Обработка естественного языка с использованием TfidfVectorizer - PullRequest
0 голосов
/ 06 декабря 2018
from sklearn.feature_extraction.text import TfidfVectorizer
filename='train1.txt'
dataset=[]
with open(filename) as f:
    for line in f:
        dataset.append([str(n) for n in line.strip().split(',')])
print (dataset)
tfidf=TfidfVectorizer()
tfidf.fit(dataset)
dict1=tfidf.vocabulary_
print 'Using tfidfVectorizer'
for key in dict1.keys():
    print key+" "+ str(dict1[key])

Я читаю строки в файле train1.txt.Но при попытке выполнить оператор tfidf.fit (набор данных) это приводит к ошибке.Я не могу полностью исправить ошибку. Ищу помощь.

Журнал ошибок:

Traceback (most recent call last):
  File "Q1.py", line 52, in <module>
    tfidf.fit(dataset)
  File "/opt/anaconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 1361, in fit
    X = super(TfidfVectorizer, self).fit_transform(raw_documents)
  File "/opt/anaconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 869, in fit_transform
    self.fixed_vocabulary_)
  File "/opt/anaconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 792, in _count_vocab
    for feature in analyze(doc):
  File "/opt/anaconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 266, in <lambda>
    tokenize(preprocess(self.decode(doc))), stop_words)
  File "/opt/anaconda2/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 232, in <lambda>
    return lambda x: strip_accents(x.lower())
AttributeError: 'list' object has no attribute 'lower'

1 Ответ

0 голосов
/ 06 декабря 2018

Согласно документам для TfidfVectorizer, функция fit ожидает "итерируемое, которое возвращает либо str, unicode, либо файловые объекты" в качестве первого аргумента.Вы предоставляете ему список списков, который не удовлетворяет этому требованию.

Вы превратили каждую строку в список строк, используя метод split, поэтому вам нужно либо присоединиться к строке,или вообще не разбивайте его.Конечно, это зависит от вашего формата ввода.

Это должно работать, если вы измените строку

dataset.append([str(n) for n in line.strip().split(',')])

В зависимости от формата ввода, вам может потребоваться заменить его на что-то вроде

dataset.append(" ".join([str(n) for n in line.strip().split(',')]))

или просто

dataset.append(line.strip().replace(",", " "))

(я могу только догадываться об использовании «,» во входном тексте).

...