частота слов с TfidfVectorizer - PullRequest
       16

частота слов с TfidfVectorizer

0 голосов
/ 11 марта 2020

Я пытаюсь вычислить частоту слов для кадра данных обмена сообщениями с помощью TF-IDF. Пока у меня есть это

import nltk
from sklearn.feature_extraction.text import TfidfVectorizer

new_group['tokenized_sents'] = new_group.apply(lambda row: nltk.word_tokenize(row['message']),axis=1).astype(str).lower()
vectoriser=TfidfVectorizer()
new_group['tokenized_vector'] = list(vectoriser.fit_transform(new_group['tokenized_sents']).toarray())

Однако с кодом выше я получаю кучу нулей вместо частоты слов. Как я могу это исправить, чтобы получить правильное количество сообщений для сообщений. Это мой фрейм данных

user_id     date          message      tokenized_sents      tokenized_vector
X35WQ0U8S   2019-02-17    Need help    ['need','help']      [0.0,0.0]
X36WDMT2J   2019-03-22    Thank you!   ['thank','you','!']  [0.0,0.0,0.0]

1 Ответ

0 голосов
/ 11 марта 2020

Прежде всего для подсчета, вы не хотите использовать TfidfVectorizer, поскольку он нормализован. Вы хотите использовать CountVectorizer. Во-вторых, вам не нужно токенизировать слова, так как sklearn имеет встроенный токенизатор с TfidfVectorizer и CountVectorizer.

#add whatever settings you want
countVec =CountVectorizer()

#fit transform
cv = countVec.fit_transform(df['message'].str.lower())

#feature names
cv_feature_names = countVec.get_feature_names()

#feature counts
feature_count = cv.toarray().sum(axis = 0)

#feature name to count
dict(zip(cv_feature_names, feature_count)) 
...