Сделать так, чтобы векторизатор tfidf возвращался как количество документов - PullRequest
0 голосов
/ 11 января 2020

Я использую Sklearn TfidfVectorizer, который мне подходит для N документов, и затем я хочу получить векторное представление слова на основе его оценки tfidf в каждом документе.

Некоторый код может помочь:

from sklearn.feature_extraction.text import TfidfVectorizer

model = TfidfVectorizer()

corpus = ["first corpus with words like dog and cat", "second corpus with words like car and plane"]

model.fit(corpus)

model.transform(["cat"]).toarray().shape

>> (1, 11)

Почему я получаю функцию 11? Я ожидаю, что у меня будет 2 функции, так как я оснастил модель только двумя документами.

Так что я не похож на:

[0, tfidfscore]

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Кажется, что вы хотите сделать что-то вроде этого

from sklearn.feature_extraction.text import TfidfVectorizer

model = TfidfVectorizer()

corpus = ["first corpus with words like dog and cat", "second corpus with words like car and plane"]

X = model.fit_transform(corpus)

words = model.get_feature_names()
word2idx = dict(zip(words, range(len(words))))

print(X[:, word2idx['cat']].todense())

Это дает вам базовый отклик слова "кошка" в матрице tf-idf

0 голосов
/ 11 января 2020

Я прочитал документацию и с основами c понимания о TF-IDF я мог прийти к выводу. Это не экспертное заключение.

Согласно документации , преобразование возвращает разреженную матрицу, размеры которой (n_samples, n_features).

Возвращает X: разреженная матрица, [n_samples, n_features]

Tf-idf-взвешенная матрица термина документа.

Теперь ваши n_samples равны 1 и n_features исходит из модели ... которую он вычислил равной 11.

То, что возвращается преобразованием, является взвешенным по TD-IDF Document-term-matrix , где каждая строка соответствует к документу, и каждый столбец содержит функции.

Вы можете узнать свои функции, сказав «print (model.get_feature_names ())». В вашем случае это даст следующий результат:

['and', 'car', 'cat', 'corpus', 'dog', 'first', 'like', 'plane', 'second', 'with', 'words']

Как вы можете видеть, есть 11 функций. Теперь кошка является третьим элементом, для которого частота должна быть высокой. Если вы скажете «print (model.transform ([" cat "]). Toarray ())", вы будете знать всю матрицу. Как было сказано ранее, будет одна строка (как вы передали в одном документе .. "cat" и 11 столбцов (по причине выше). Как вы можете видеть ниже в третьем столбце, частота самая высокая 1.00.

[[0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]]

Я внес минимальные изменения в ваш код с намерением помочь вам.

from sklearn.feature_extraction.text import TfidfVectorizer

model = TfidfVectorizer()

corpus = ["first corpus with words like dog and cat", "second corpus with words like car and plane"]

model.fit(corpus)

Returned_Features = model.get_feature_names()
Returned_TF_IDF_DTM = model.transform(["cat"]).toarray()

print(Returned_Features)
print(Returned_TF_IDF_DTM)

Надеюсь, это поможет. Всего наилучшего

...