2015-11-05 20 views
1

Я хочу рассчитать TF_IDF для набора документов (10). Для этого я использую Python Anaconda.Anaconda: UnicodeDecodeError: кодек 'utf8' не может декодировать байт 0x92 в позиции 1412: недопустимый стартовый байт

import nltk 
import string 
import os 

from sklearn.feature_extraction.text import TfidfVectorizer 
from nltk.stem.porter import PorterStemmer 

path = '/opt/datacourse/data/parts' 
token_dict = {} 
stemmer = PorterStemmer() 

def stem_tokens(tokens, stemmer): 
    stemmed = [] 
for item in tokens: 
    stemmed.append(stemmer.stem(item)) 
return stemmed 

def tokenize(text): 
    tokens = nltk.word_tokenize(text) 
    stems = stem_tokens(tokens, stemmer) 
    return stems 

for subdir, dirs, files in os.walk(path): 
    for file in files: 
    file_path = subdir + os.path.sep + file 
    shakes = open(file_path, 'r') 
    text = shakes.read() 
    lowers = text.lower() 
    no_punctuation = lowers.translate(None, string.punctuation) 
    token_dict[file] = no_punctuation 

    tfidf = TfidfVectorizer(tokenizer=tokenize, stop_words='english') 
    tfs = tfidf.fit_transform(token_dict.values()) 

Но после печати tfs = tfidf.fit_transform(token_dict.values()) я получаю следующее сообщение об ошибке.

UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 1412: invalid start byte 

Как исправить эту ошибку?

+0

Попробуйте латинский-1, а не utf8 –

+0

Как изменить код, чтобы попробовать латинский-1? – dave

+0

tfs = tfs.decode ('latin-1') –

ответ

0

Ваши данные кодируются с другим кодированием :)

Для декодирования данных в строке, используйте следующие

myvar.decode("ENCODING") 

где кодирование может быть любым именем кодировки. Эта функция делает это в фоновом режиме, расшифровывается на «utf-8».

Вам следует попробовать «latin1» или «latin2»; оба из них, с UTF-8 являются наиболее распространенными используется

Приветствия

1

Я использовал ту же ссылку для предварительной обработки данных и получил точно такую ​​же ошибку. Это несколько шагов, которые я взял и получил совершенно действующий код на Pyhton 2.7 на машине Ubuntu 14.04,

1) Используйте «кодеки», чтобы открыть файл и установить параметр «кодирование» как ISO-8859-1. Вот как вы это делаете

import codecs 
with codecs.open(pathToYourFileWithFileName,"r",encoding = "ISO-8859-1") as file_handle: 

2) Как сделать этот первый шаг, вы столкнетесь с 2 проблемы при использовании

no_punctuation = lowers.translate(None, string.punctuation) 

, который объясняется здесь string.translate() with unicode data in python

Решение будет идти, как

lowers = text.lower() 
remove_punctuation_map = dict((ord(char), None) for char in string.punctuation) 
no_punctuation = lowers.translate(remove_punctuation_map) 

Надеюсь, это поможет.

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

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