Je lis un tas de fichiers RTF dans des chaînes python . Sur certains textes, j'obtiens cette erreur:
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
J'ai essayé:
Rien ne fonctionne. Des idées?
Ce n'est probablement pas lié, mais voici le code dans lequel vous vous demandez:
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)
comme je l'ai dit dans la liste de diffusion, il est probablement plus simple d'utiliser l'option charset_error
et de la définir sur ignore
. Si le fichier est réellement utf-16, vous pouvez également définir le jeu de caractères sur utf-16 dans le vectoriseur .Voir la docs .
Cela résoudra vos problèmes:
import codecs
f = codecs.open(dir+location, 'r', encoding='utf-8')
txt = f.read()
À partir de ce moment, txt est au format Unicode et vous pouvez l'utiliser partout dans votre code.
Si vous souhaitez générer des fichiers UTF-8 après votre traitement, procédez comme suit:
f.write(txt.encode('utf-8'))
Vous pouvez vider les lignes du fichier csv dans le fichier json sans erreur de codage, comme suit:
json.dump(row,jsonfile, encoding="ISO-8859-1")