Наличие некоторых проблем. Я занимаюсь TwitterSentimentAnalysis в наборе данных длиной 1,6 миллиона. Поскольку мой компьютер не мог выполнить работу (из-за большого количества вычислений), профессор сказал мне использовать университетский сервер.UnicodeDecodeError на Python 2.7
Я просто понял, что на сервере версия python равна 2,7, что не позволяет мне использовать параметр encoding в csv reader для чтения файла.
В любое время, когда я получил UnicodeDecodeError
, мне нужно вручную удалить твитер из набора данных, иначе я не смогу сделать все остальное. Я попытался решить весь вопрос на сайте, но я ничего не решил.
Я просто хочу пропустить линию, которая вызывает ошибку, поскольку набор достаточно велик, чтобы дать мне хороший анализ.
class UTF8Recoder:
def __init__(self, f, encoding):
self.reader = codecs.getreader(encoding)(f)
def __iter__(self):
return self
def next(self):
return self.reader.next().encode("utf-8", errors='ignore')
class UnicodeReader:
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
f = UTF8Recoder(f, encoding)
self.reader = csv.reader(f, dialect=dialect, **kwds)
def next(self):
'''next() -> unicode
This function reads and returns the next line as a Unicode string.
'''
row = self.reader.next()
return [unicode(s, "utf-8", errors='replace') for s in row]
def __iter__(self):
return self
def extraction(file, textCol, sentimentCol):
"The function reads the tweets"
#fp = open(file, "r",encoding="utf8")
fp = open(file, "r")
tweetreader = UnicodeReader(fp)
#tweetreader = csv.reader(fp, delimiter=',', quotechar='"', escapechar='\\')
tweets = []
for row in tweetreader:
# It takes the column in which the tweets and the sentiment are
if row[sentimentCol]=='positive' or row[sentimentCol]=='4':
tweets.append([remove_stopwords(row[textCol]), 'positive']);
else:
if row[sentimentCol]=='negative' or row[sentimentCol]=='0':
tweets.append([remove_stopwords(row[textCol]), 'negative']);
else:
if row[sentimentCol]=='irrilevant' or row[sentimentCol]=='2' or row[sentimentCol]=='neutral':
tweets.append([remove_stopwords(row[textCol]), 'neutral']);
tweets = filterWords(tweets)
fp.close()
return tweets;
Ошибка:
Traceback (most recent call last):
File "sentimentAnalysis_v4.py", line 165, in <module>
newTweets = extraction("sentiment2.csv",5,0)
File "sentimentAnalysis_v4.py", line 47, in extraction
for row in tweetreader:
File "sentimentAnalysis_v4.py", line 29, in next
row = self.reader.next()
File "sentimentAnalysis_v4.py", line 19, in next
return self.reader.next().encode("utf-8", errors='ignore')
File "/usr/lib/python2.7/codecs.py", line 615, in next
line = self.readline()
File "/usr/lib/python2.7/codecs.py", line 530, in readline
data = self.read(readsize, firstline=True)
File "/usr/lib/python2.7/codecs.py", line 477, in read
newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd9 in position 48: invalid continuation byte
Вы на 100% уверены, что данные кодируются как UTF-8? –
Hrm, трассировка, которую вы показываете, показывает, что 'codecs.getreader (encoding) (f)' возвратил объект, который не возвращает 'unicode', когда вы вызываете' next' на нем. –
@MartijnPieters, если это не так, должно ли оно читать другие твиты? Твиты, которые я должен удалить вручную, имеют тип «à €€» и такие странные вещи. – JackLametta