2016-09-16 2 views
0

nltk 모듈을 사용하여 문장의 극성을 감지하기위한 사용자 정의 자료를 만들었습니다.NLTK에서 사용자 정의 만든 코퍼스를 읽는 동안 UnicodeDecodeError

극성
여기
---- polar_tweets.txt
--nonpolar
---- nonpolar_tweets.txt

그리고 어떻게 --polar입니다 다음은 신체의 계층 구조입니다 내 소스 코드에서 그 시체를 가져 오기 오전 :

polarity = LazyCorpusLoader('polar', CategorizedPlaintextCorpusReader, r'(?!\.).*\.txt', cat_pattern=r'(polar|nonpolar)/.*', encoding='utf-8') 
corpus = polarity 
print(corpus.words(fileids=['nonpolar/non-polar.txt'])) 

하지만 다음과 같은 오류 제기

01 파일 polar_tweets.txtnonpolar_tweets.txt를 만드는 동안 23,516,
Traceback (most recent call last): 
    File "E:/Analytics Practice/Social Media Analytics/analyticsPlatform/DataAnalysis/SentimentAnalysis/data/training_testing_data.py", line 9, in <module> 
    print(corpus.words(fileids=['nonpolar/nonpolar_tweets.txt'])) 
    File "E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\util.py", line 765, in __repr__ 
    for elt in self: 
    File "E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\corpus\reader\util.py", line 291, in iterate_from 
    tokens = self.read_block(self._stream) 
    File "E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\corpus\reader\plaintext.py", line 122, in _read_word_block 
    words.extend(self._word_tokenizer.tokenize(stream.readline())) 
    File "E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\data.py", line 1135, in readline 
    new_chars = self._read(readsize) 
    File "E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\data.py", line 1367, in _read 
    chars, bytes_decoded = self._incr_decode(bytes) 
    File "E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\data.py", line 1398, in _incr_decode 
    return self.decode(bytes, 'strict') 
    File "C:\Users\prabhjot.rai\AppData\Local\Continuum\Anaconda3\lib\encodings\utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 269: invalid continuation byte 

, 나는 파일을 utf-8-uncleaned_polar_tweets.txt를 디코딩 한 다음 파일 polar_tweets.txt로 쓰고 있어요.

with open(path_to_file, "rb") as file: 
    output_corpus = clean_text(file.read().decode('utf-8'))['cleaned_corpus'] 

output_file = open(output_path, "w") 
output_file.write(output_corpus) 
output_file.close() 

output_file이이 polar_tweets.txtnonpolar_tweets.txt입니다 : 여기에 대한 코드입니다. 어디서 오류가 있습니까? 내가 처음 utf-8에서 인코딩, 나는 encoding='latin-1'하여 encoding='utf-8'를 교체 할 경우, 행

polarity = LazyCorpusLoader('polar', CategorizedPlaintextCorpusReader, r'(?!\.).*\.txt', cat_pattern=r'(polar|nonpolar)/.*', encoding='utf-8') 

에 의해 utf-8도 읽고 있습니다 때문에, 코드가 완벽하게 작동합니다. 문제는 어디에 있습니까? 코퍼스를 생성하는 중에도 utf-8에서 디코딩해야합니까?

+0

용어가 해제되어 있습니다. 독서를 할 때, 당신은 * 무언가를 해독합니다. 이 오류는 코퍼스 (또는 일부)가 유효한 UTF-8이 아님을 나타냅니다. 기분 나쁜 데이터에 대한 액세스가 없으면 추측 할 수만 있습니다. 'LC_ALL = C grep -m 1 $ '\ xC2'nonpolar_tweets.txt'는 무엇을 생산합니까? (아마도'xxd' 또는 정확하게 바이트를보기 위해 파이프로). – tripleee

+0

... 또는 파이썬에 상응하는 - 불쾌한 라인을 읽고, 그 다음에'repr()'을 확인하십시오 – tripleee

답변

1

파이썬의 모델에서 unicode은 일종의 데이터이지만 utf-8인코딩임을 이해해야합니다. 그들은 모두 똑같은 것이 아닙니다. 원문을 읽는 중입니다. 분명히 utf-8에 있습니다. 그것을 청소 한 다음 인코딩을 지정하지 않고 새 자료에 으로 작성하십시오. 그래서 당신은 그것을 쓰고 있어요 ... 누가 어떤 인코딩을하는지 압니다. 알지 못하면인코딩을 지정하여 다시 정리하고 생성하십시오.

파이썬 3에서이 모든 작업을 수행하기를 바랍니다. 그렇지 않다면 여기에서 멈추고 Python 3로 전환하십시오. 다음과 같이 코퍼스를 작성하십시오.

output_file = open(output_path, "w", encoding="utf-8") 
output_file.write(output_corpus) 
output_file.close() 
+0

해명 해 주셔서 감사합니다 :) –

관련 문제