2016-03-05 23 views
-1

我试图导入CSV文件,以培养我的分类,但我不断收到此错误Unicode的错误ASCII不能编码字符

traceback (most recent call last): 
File "updateClassif.py", line 17, in <module> 
myClassif = NaiveBayesClassifier(fp, format="csv") 
    File "C:\Python27\lib\site-packages\textblob\classifiers.py", line 191, in __init__ 
    super(NLTKClassifier, self).__init__(train_set, feature_extractor, format, **kwargs) 
    File "C:\Python27\lib\site-packages\textblob\classifiers.py", line 123, in __init__ 
    self.train_set = self._read_data(train_set, format) 
    File "C:\Python27\lib\site-packages\textblob\classifiers.py", line 143, in _read_data 
    return format_class(dataset, **self.format_kwargs).to_iterable() 
    File "C:\Python27\lib\site-packages\textblob\formats.py", line 68, in __init__ 
    self.data = [row for row in reader] 
    File "C:\Python27\lib\site-packages\textblob\unicodecsv\__init__.py", line 106, in next 
    row = self.reader.next() 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe6' in position 55: ordinal not in range(128) 

CSV文件包含160万行的鸣叫所以我相信一些推文包含特殊字符。我尝试使用开放式办公室保存它作为某人推荐,但仍然是相同的结果。我也尝试使用拉丁编码,但结果相同。 这是我的代码:

with codecs.open('tr.csv', 'r' ,encoding='latin-1') as fp: 
myClassif = NaiveBayesClassifier(fp, format="csv") 

这是从库中我使用的代码:

def __init__(self, csvfile, fieldnames=None, restkey=None, restval=None, 
       dialect='excel', encoding='utf-8', errors='strict', *args, 
       **kwds): 
     if fieldnames is not None: 
      fieldnames = _stringify_list(fieldnames, encoding) 
     csv.DictReader.__init__(self, csvfile, fieldnames, restkey, restval, dialect, *args, **kwds) 
     self.reader = UnicodeReader(csvfile, dialect, encoding=encoding, 
            errors=errors, *args, **kwds) 
     if fieldnames is None and not hasattr(csv.DictReader, 'fieldnames'): 
      # Python 2.5 fieldnames workaround. (http://bugs.python.org/issue3436) 
      reader = UnicodeReader(csvfile, dialect, encoding=encoding, *args, **kwds) 
      self.fieldnames = _stringify_list(reader.next(), reader.encoding) 
     self.unicode_fieldnames = [_unicodify(f, encoding) for f in 
            self.fieldnames] 
     self.unicode_restkey = _unicodify(restkey, encoding) 

    def next(self): 
     row = csv.DictReader.next(self) 
     result = dict((uni_key, row[str_key]) for (str_key, uni_key) in 
         izip(self.fieldnames, self.unicode_fieldnames)) 
     rest = row.get(self.restkey) 
+0

请发布追溯的**全文**。另外,请指出您使用的Python版本。 – MattDMo

+0

它可能是utf = 8编码的。试试看。 – tdelaney

+0

@tdelaney我尝试过使用utf = 8并且它返回给我这个:“UnicodeDecodeError:'utf8'编解码器无法解码位置35中的字节0xe6:无效继续字节” – Pca

回答

0

在Python2中,不支持unicode。所以你必须传入某种迭代器对象(如文件),它只产生字节串

这意味着你的代码应该是这样的:

with open('tr.csv', 'rb') as fp: 
    myClassif = NaiveBayesClassifier(fp, format="csv") 

但是请注意,CSV文件必须被编码为UTF-8。如果不是,那么显然需要首先将其转换为UTF-8才能使上述代码正常工作。

0

注意回溯说 codeError,不DecodeError。它看起来像NaiveBayesClassifier期待ascii。或者让它接受Unicode,或者,如果这对你的应用程序是好的,用'?'替换非ASCII字符。或者其他的东西。

+0

我已经在上面附上了我正在使用的库中的代码,应该更改“encoding = utf-8”吗? – Pca

+0

你如何初始化你的库?它接受一个'encoding'参数。你有没有尝试将它设置为latin1? –

+0

我正在使用这个库提供的分类器,我只是导入库:从textblob.classifiers从textblob导入NaiveBayesClassifier import TextBlob我已经尝试使用latin1和相同的错误。是否有包含所有字符的编码,包括特殊字符? – Pca

相关问题