От признаков до слов python («обратный» пакет слов) - PullRequest
0 голосов
/ 10 октября 2018

Используя sklearn, я создал BOW с 200 функциями в Python, которые легко извлекаются.Но как я могу изменить это?То есть перейти от вектора с 200 0 или 1 к соответствующим словам?Так как словарь является словарем, и поэтому не упорядочен, я не уверен, какому слову соответствует каждый элемент в списке возможностей.Кроме того, если первый элемент в моем 200-мерном векторе соответствует первому слову в словаре, как мне затем извлечь слово из словаря по индексу?

BOW создается таким образом

vec = CountVectorizer(stop_words = sw, strip_accents="unicode", analyzer = "word", max_features = 200)
features = vec.fit_transform(data.loc[:,"description"]).todense()

Таким образом, «особенности» - это матрица (n, 200), матрица (n - номер предложения).

1 Ответ

0 голосов
/ 10 октября 2018

Я не совсем уверен, что вы собираетесь, но похоже, что вы просто пытаетесь выяснить, какой столбец представляет какое слово.Для этого есть удобный аргумент get_feature_names.

Давайте рассмотрим пример корпуса, представленного в документах :

corpus = [
     'This is the first document.',
     'This document is the second document.',
     'And this is the third one.',
     'Is this the first document?' ]

# Put into a dataframe
data = pd.DataFrame(corpus,columns=['description'])
# Take a look:
>>> data
                             description
0            This is the first document.
1  This document is the second document.
2             And this is the third one.
3            Is this the first document?

# Initialize CountVectorizer (you can put in your arguments, but for the sake of example, I'm keeping it simple):
vec = CountVectorizer()

# Fit it as you had before:
features = vec.fit_transform(data.loc[:,"description"]).todense()

>>> features
matrix([[0, 1, 1, 1, 0, 0, 1, 0, 1],
        [0, 2, 0, 1, 0, 1, 1, 0, 1],
        [1, 0, 0, 1, 1, 0, 1, 1, 1],
        [0, 1, 1, 1, 0, 0, 1, 0, 1]], dtype=int64)

Чтобы увидеть, какой столбец представляет какое слово, используйте get_feature_names:

>>> vec.get_feature_names()
['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']

Итак, ваш первый столбец - and, второй - document и так далее.Для удобства чтения вы можете вставить это в кадр данных:

>>> pd.DataFrame(features, columns = vec.get_feature_names())
   and  document  first  is  one  second  the  third  this
0    0         1      1   1    0       0    1      0     1
1    0         2      0   1    0       1    1      0     1
2    1         0      0   1    1       0    1      1     1
3    0         1      1   1    0       0    1      0     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...