Преобразование счетчика векторизаторов в tf-idf - PullRequest
0 голосов
/ 28 сентября 2019

Итак, у меня есть следующая таблица, в которой каждая строка представляет собой документ, а в каждом столбце есть слова, а не вхождения слов.-idf векторизатор?

Редактировать: Мое решение для этого.Дайте мне знать, если это правильно.

def get_tfidf(df_tfidf):

total_docs = df_tfidf.shape[0]

#Term Frequency
#(Number of times term w appears in a document) / (Total number of 
#terms in the document)

total_words_doc = df_tfidf.astype(bool).sum(axis=1)
tf = df_tfidf.values/total_words_doc[:,None]

#Inverse document frequency
#log_e(Total number of documents / Number of documents with term w in 
#it)
words_in_doc = df_tfidf.astype(bool).sum(axis=0)
idf = np.log(total_docs/words_in_doc)

tf_idf = tf*idf.values[None,:]

return tf_idf

1 Ответ

0 голосов
/ 28 сентября 2019

Предположим, у вас есть счетчик чисел в виде pandas.DataFrame, например:

import pandas as pd
data = [[1,2,0,0],[2,0,0,2],[3,0,2,0]]
df = pd.DataFrame(data,columns=['doc','apple','banana','cat'])
df

Выход :

doc apple   banana  cat
0   1   2   0   0
1   2   0   0   2
2   3   0   2   0

Тогда вы можете использовать sklearn.feature_extraction.text.TfidfVectorizerчтобы получить вектор tf-idf следующим образом:

from sklearn.feature_extraction.text import TfidfVectorizer
v = TfidfVectorizer()
x = v.fit_transform(df)
df1 = pd.DataFrame(x.toarray(), columns=v.get_feature_names())
print(df1)

Вывод :

apple  banana  cat  doc
0    0.0     0.0  0.0  1.0
1    1.0     0.0  0.0  0.0
2    0.0     1.0  0.0  0.0
3    0.0     0.0  1.0  0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...