Обновление: проблема решена. (см. Раздел комментария ниже.) В конечном счете, для преобразования моего .csv в unicode были необходимы следующие две строки: use = [cell.decode ('utf-8') для ячейки в строке], а text = ».join (строка).Python 2.7 и Textblob - TypeError: аргумент `text` передан` __init __ (текст) `должен быть строкой, а не <type 'list'>
Оригинальный вопрос: Я пытаюсь использовать библиотеку Python под названием Textblob для анализа текста из CSV-файла. Ошибка я получаю, когда я звоню Textblob в моем коде:
Traceback (most recent call last): File "C:\Users\Marcus\Documents\Blog\Python\Scripts\Brooks\textblob_sentiment.py", line 30, in blob = TextBlob(row) File "C:\Python27\lib\site-packages\textblob\blob.py", line 344, in init 'must be a string, not {0}'.format(type(text)))TypeError: The
text
argument passed to__init__(text)
must be a string, not
Мой код:
#from __future__ import division, unicode_literals #(This was recommended for Python 2.x, but didn't help in my case.)
#-*- coding: utf-8 -*-
import csv
from textblob import TextBlob
with open(u'items.csv', 'rb') as scrape_file:
reader = csv.reader(scrape_file, delimiter=',', quotechar='"')
for row in reader:
row = [unicode(cell, 'utf-8') for cell in row]
print row
blob = TextBlob(row)
print type(blob)
Я работаю по вопросам UTF/Unicode. У меня первоначально был другой предмет, который я поставил this thread. (Так как мой код и ошибка изменились, я отправляю сообщение в новый поток.) Операторы печати указывают, что переменная «row» имеет тип = str, который, как я думал, указывал на то, что объект-читатель был преобразован по требованию Textblob , Источник .csv-файл сохраняется как UTF-8. Может ли кто-нибудь дать отзыв о том, как я могу разблокировать это, и недостатки в моем коде?
Большое спасибо за помощь.
Спасибо Майкл. К сожалению, когда я заменяю свою предыдущую строку «row =» на ту, которую вы предлагаете выше, я получаю страшную ошибку Unicodedecode, которую я получал с предыдущими версиями моего кода. Эта ошибка: UnicodeDecodeError: кодек 'ascii' не может декодировать байт 0xed в позиции 425: порядковый номер не в диапазоне (128). Я не уверен, что еще делать, так как даже очистка моего исходного файла не поможет мне в следующий раз, когда я его регенерирую. – Marcus
@Marcus Привет, Маркус, не могли бы вы сказать, какую кодировку вы используете для своего терминала? –
Я на ПК с Windows 10. Источник .csv-файл ('items.csv') генерируется из командной строки, используя следующую команду: scrapy crawl newrun -o items.csv. Затем я попытался проверить/изменить кодировку, открыв items.csv в блокноте ++. Надеюсь, это даст вам лучший смысл ... – Marcus