Изменение фраз на векторы с помощью функции while в Python

Я хотел бы изменить следующие фразы на векторы с помощью sklearn:

Article 1. It is not good to eat pizza after midnight
Article 2. I wouldn't survive a day withouth stackexchange
Article 3. All of these are just random phrases
Article 4. To prove if my experiment works.
Article 5. The red dog jumps over the lazy fox

я получил следующий код:

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(min_df=1)

n=0
while n < 5:
   n = n + 1
   a = ('Article %(number)s' % {'number': n})
   print(a)
   with open("LISR2.txt") as openfile:
     for line in openfile:
       if a in line:
           X=line
           print(vectorizer.fit_transform(X))

что дает мне следующую ошибку:

ValueError: Iterable over raw text documents expected, string object received.

почему это происходит? Я знаю, что это должно работать, потому что если я набираю индивидуально:

X=("It is not good to eat pizza","I wouldn't survive a day", "All of these")

print(vectorizer.fit_transform(X))

это дает мне нужные векторы.

(0, 8)  1
(0, 2)  1
(0, 11) 1
(0, 3)  1
(0, 6)  1
(0, 4)  1
(0, 5)  1
(1, 1)  1
(1, 9)  1
(1, 12) 1
(2, 10) 1
(2, 7)  1
(2, 0)  1

2 ответов


посмотреть документы. Тут написано CountVectorizer.fit_transform ожидает итерацию строк (например, a список строк). Вы проходите одну строку вместо.

это имеет смысл, fit_transform в scikit делает две вещи: 1) он изучает модель (fit) 2) он применяет модель к данным (transform). Вы хотите построить матрицу, где столбцы - это все слова в словаре, а строки соответствуют документам. Для этого тебе нужно знать все. словарь в вашем корпусе (все столбцы).


эта проблема возникает, когда вы предоставляете необработанные данные, означает, что непосредственно давая строку функции извлечения, вместо этого вы можете дать Y = [X] и передать этот Y в качестве параметра, то вы получите его правильно я столкнулся с этой проблемой тоже