13

たくさんのRTFファイルをPython文字列に読み込んでいます。一部のテキストでは、次のエラーが発生します。

Traceback (most recent call last):
  File "11.08.py", line 47, in <module>
    X = vectorizer.fit_transform(texts)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
716, in fit_transform
    X = super(TfidfVectorizer, self).fit_transform(raw_documents)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
398, in fit_transform
    term_count_current = Counter(analyze(doc))
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
313, in <lambda>
    tokenize(preprocess(self.decode(doc))), stop_words)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
224, in decode
    doc = doc.decode(self.charset, self.charset_error)
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 462: invalid
 start byte

私はもう試した:

  1. ファイルのテキストをコピーして新しいファイルに貼り付ける
  2. rtfファイルをtxtファイルとして保存する
  3. Notepad ++でtxtファイルを開き、「utf-8に変換」を選択し、エンコーディングをutf-8に設定します
  4. Microsoft Wordでファイルを開き、新しいファイルとして保存する

何も機能しません。何か案は?

おそらく関連性はありませんが、疑問に思っている場合のコードは次のとおりです。

f = open(dir+location, "r")
doc = Rtf15Reader.read(f)
t = PlaintextWriter.write(doc).getvalue()
texts.append(t)
f.close()
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')
X = vectorizer.fit_transform(texts)     
4

4 に答える 4

10

これで問題が解決します。

import codecs

f = codecs.open(dir+location, 'r', encoding='utf-8')
txt = f.read()

その瞬間から、txtはUnicode形式になり、コード内のどこでも使用できます。

処理後にUTF-8ファイルを生成する場合は、次のようにします。

f.write(txt.encode('utf-8'))
于 2012-08-12T00:58:48.227 に答える
6

メーリングリストで述べたように、このcharset_errorオプションを使用してに設定するのがおそらく最も簡単ignoreです。ファイルが実際にutf-16である場合は、Vectorizerで文字セットをutf-16に設定することもできます。ドキュメントを参照してください。

于 2012-08-12T10:07:19.223 に答える
2

次のように、エンコードエラーなしでcsvファイルの行をjsonファイルにダンプできます。

json.dump(row,jsonfile, encoding="ISO-8859-1")
于 2015-07-09T07:47:56.693 に答える
1

この行を維​​持します:

vectorizer = TfidfVectorizer(encoding='latin-1',sublinear_tf=True, max_df=0.5, stop_words='english')

encoding='latin-1'は私のために働いた。

于 2019-05-15T09:47:16.333 に答える