2014-09-05 5 views
0

NLTK Collocations를 사용하여 Trigram을 찾고 'training_set'은 많은 텍스트 줄이있는 문자열입니다.NLTK Colligations에서 Trigrams를 찾는 동안 인식 할 수없는 단어 얻기

finder = TrigramCollocationFinder.from_words(str(training_set)) 
print finder.nbest(trigram_measures.pmi, 5) 

하지만

[('\xe5', '\x8d', '\xb8'), ('\xe5', '\x85', '\x8d'), ('\xe2', '\x80', '\x9c'), ('\xe2', '\x80', '\x9d'), ('\xe2', '\x80', '\xa6')] 

로 출력을 얻고이 어떤 인코딩 문제인가? 어떻게하면 정상적인 영어 단어를 얻을 수 있습니까?

답변

0

예는, 사람들은 '창-1252'인코딩 된 문자 모양 :

>>> import chardet 

>>> chardet.detect('\xe5') {'confidence': 0.5, 'encoding': 'windows-1252'} 

을 당신이 당신의 텍스트에 이런 일을 할 수있는 표시하는 사람들을 싶지 않아 그래서 경우 :

>> '\xe5'.decode('windows-1252').encode('ascii', 'ignore') 
+0

디코딩 및 인코딩 스크립트를 실행하면 빈 문자열이 표시됩니다. – Shivendra

+0

외국 문자이기 때문에 영어 단어가 아닐 것입니다. 실제 문자를 얻으려면 인코딩 부분을 생략하면됩니다. >>> print '\ xe5 '.decode ('windows-1252 ') å. 그것은 또한 당신이 가지고있는 것이 단어의 삼중주가 아니라 개별 편지의 것 인 것처럼 보입니다. TrigramCollocationFinder로 보내기 전에 텍스트를 토큰 화해야 할 가능성이 큽니다. – leavesof3

+0

finder = TrigramCollocationFinder.from_words (nltk.word_tokenize (str (training_set))) – leavesof3