Как CountVectorizer работает после предварительной обработки? - PullRequest
0 голосов
/ 23 января 2019

Я сделал положительный и отрицательный отзыв, чтобы увидеть, как работает countvectorizer после предварительной обработки?

['I like this movie awesome',
'never saw movie like this',
'This is my favorite movie',
'Script is marvellous',
'This is one of the worst movie',
'I hate the movie',
'Bad script',
'2 hours is wasted',
'Nothing new in the movie']

преобразован в нижний регистр

X=[] for string in x: string=string.lower() X.append(string)

['i like this movie awesome',
'never saw movie like this',
'this is my favorite movie',
'script is marvellous',
'this is one of the worst movie',
'i hate the movie',
'bad script',
'2 hours is wasted',
'nothing new in the movie']

После использования countvectorizer я получил массив

from sklearn.feature_extraction.text import CountVectorizer vect=CountVectorizer() x=vect.fit_transform(x).toarray() print(vect.get_feature_names()) print(x)

['awesome',
'bad',
 'favorite',
 'hate',
 'hours',
 'in',
 'is',
 'like',
 'marvellous',
 'movie',
 'my',
 'never',
 'new',
 'nothing',
 'of',
 'one',
 'saw',
 'script',
 'the',
 'this',
 'wasted',
 'worst']
 array([[1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,0],
   [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0],
   [0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
   [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1],
   [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
   [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
   [0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
   [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0]],
  dtype=int64)`

, где каждая строка в массиве - это один из ваших исходных документов (строк), каждый столбец - это особенность (слово), иЭлемент - это число для этого конкретного слова и документа.Вы можете видеть, что если вы сложите каждый столбец, вы получите правильное число

Но после токенизации, лемматизации и

from nltk.tokenize import word_tokenize x=[] for string in X: x=x+[word_tokenize(string)]

[['i', 'like', 'this', 'movie', 'awesome'],
['never', 'saw', 'movie', 'like', 'this'],
['this', 'is', 'my', 'favorite', 'movie'],
['script', 'is', 'marvellous'],
['this', 'is', 'one', 'of', 'the', 'worst', 'movie'],
['i', 'hate', 'the', 'movie'],
['bad', 'script'],
['2', 'hours', 'is', 'wasted'],
['nothing', 'new', 'in', 'the', 'movie']]`

аналогичнолемматизация
Передача этого ввода в Countvectorizer при получении ошибки и возможности понять, нужно ли мне снова преобразовывать внутренний список в документ (строку)?Если да, то преимущество предварительной обработки состоит в том, чтобы получить близлежащие слова, и теперь эти близлежащие слова становятся функцией для CountVectorizer

После применения предварительной обработки

from nltk.stem import wordnet
from nltk.stem import WordNetLemmatizer
word_lem=WordNetLemmatizer()
x=[]
for document in X:
   temp=''
   for word in document:
        temp=temp+' '+str(word_lem.lemmatize(word))
   x.append(str(temp))`

[' i like thi movi awesom',
 ' never saw movi like thi',
 ' thi is my favorit movi',
 ' script is marvel',
 ' thi is one of the worst movi',
 ' i hate the movi',
 ' bad script',
 ' 2 hour is wast',
 ' noth new in the movi']

, получая вот такой вывод.

...