2013-03-22 2 views
9

mycorpus.txtапостроф превращается в x92

Human where's machine interface for lab abc computer applications 
A where's survey of user opinion of computer system response time 

stopwords.txt

let's 
ain't 
there's 

Следующий код

corpus = set() 
for line in open("path\\to\\mycorpus.txt"): 
    corpus.update(set(line.lower().split())) 
print corpus 

stoplist = set() 
for line in open("C:\\Users\\Pankaj\\Desktop\\BTP\\stopwords_new.txt"): 
    stoplist.add(line.lower().strip()) 
print stoplist 

дает следующий вывод

set(['a', "where's", 'abc', 'for', 'of', 'system', 'lab', 'machine', 'applications', 'computer', 'survey', 'user', 'human', 'time', 'interface', 'opinion', 'response']) 
set(['let\x92s', 'ain\x92t', 'there\x92s']) 

Почему апостроф превращается в \ x92 во втором сете?

+1

Никогда не используйте редакторы Microsoft, если вы хотите писать тексты ASCII. Если вы хотите использовать их, тогда вам придется обрабатывать cp1252 (который также включает в себя «правую кавычку»). – Bakuriu

ответ

9

Кодовая точка 92 (шестнадцатеричная) в кодировке window-1252 является кодовой точкой Юникода 2019 (шестнадцатеричная), которая является «ПРАВОЙ ОДИНОЧНОЙ ЦЕНОЙ». Это похоже на апостроф и, вероятно, будет фактическим персонажем, который у вас есть в stopwords.txt, который, как я уже догадался, из-за того, как интерпретировал python, был закодирован в windows-1252 или кодировке, которая разделяет значения кодовых точек ASCII и ,

'vs'

+0

, то в 1-м наборе почему он показывает «где» вместо «где \ x92s» ?? –

+0

@PankajSinghal: Возможно, потому, что вы действительно имеете символ апострофа ASCII в первом файле. Чтобы подтвердить это, используйте такой инструмент, как hexdump, чтобы проверить фактические байты в обоих ваших файлах. –

+0

ya, я вижу, что в персонажах есть разница. Итак, что мне делать, чтобы он читался как «не», а не «ain \ x92t» ??? –

Смежные вопросы