以下のドキュメントからtf-idfを計算したい。私はpythonとパンダを使用しています。
import pandas as pd
df = pd.DataFrame({'docId': [1,2,3],
'sent': ['This is the first sentence','This is the second sentence', 'This is the third sentence']})
最初に、行ごとにWord_countを取得する必要があると考えました。だから私は簡単な関数を書いた:
def Word_count(sent):
Word2cnt = dict()
for Word in sent.split():
if Word in Word2cnt: Word2cnt[Word] += 1
else: Word2cnt[Word] = 1
return Word2cnt
そして、それを各行に適用しました。
df['Word_count'] = df['sent'].apply(Word_count)
しかし、今私は迷っています。 Graphlabを使用する場合、tf-idfを計算する簡単な方法があることは知っていますが、オープンソースオプションに固執したいと思います。 Sklearnとgensimはどちらも圧倒的に見えます。 tf-idfを取得する最も簡単なソリューションは何ですか?
Scikit-learnの実装は本当に簡単です:
_from sklearn.feature_extraction.text import TfidfVectorizer
v = TfidfVectorizer()
x = v.fit_transform(df['sent'])
_
指定できるパラメーターはたくさんあります。ドキュメントを参照してください here
Fit_transformの出力はスパース行列になります。視覚化する場合は、x.toarray()
を実行できます。
_In [44]: x.toarray()
Out[44]:
array([[ 0.64612892, 0.38161415, 0. , 0.38161415, 0.38161415,
0. , 0.38161415],
[ 0. , 0.38161415, 0.64612892, 0.38161415, 0.38161415,
0. , 0.38161415],
[ 0. , 0.38161415, 0. , 0.38161415, 0.38161415,
0.64612892, 0.38161415]])
_