计算fvt表的tf_idf

时间:2019-01-03 19:16:34

标签: python pandas numpy nlp tf-idf

我有一个频率值表,例如-

    a   b           
1   3   0                   
2   0   3                   
3   4   5                   

我想计算tf_idf。

我的代码-

l=len(data)
for doc in data:

m=data.groupby(doc).apply(lambda column: column.sum()/(column != 0).sum())
for i in range(l):
    tf=print(data.loc[i,doc])
    idf=log(l/m)                  
    weight=tf*idf
    data.loc[i,doc]=weight

说明- 首先,我遍历每列,在其中找到var m中该列的非零行,并将该行的特定值存储为tf,然后计算tf_idf,并用tf_idf权重替换表中的值。

预期输出-

对于g列第一行,我们有tf = 3 idf = log(5/4),因此tf_idf = idf * tf

    a   b           
1   0.4 0                   
2   0   0.4                 
3   0.17 .22                    

1 个答案:

答案 0 :(得分:1)

输入数据框:

df
    a   b
0   3   0
1   0   3
2   4   5

首先,在所有单词中找到idf

idf_list = []
for col in list(df.columns):
    total_count = df[col].nonzero()[0][1]
    idf = np.log(len(df) / total_count)
    idf_list.append(round(idf, 3))

现在,找到tf-idf并更新数据框

for row in range(len(df)):
    total_doc_words = sum(df.iloc[row].values)
    for col in range(len(df.columns)):
        tf = df.iloc[row, col] / total_doc_words
        df.iloc[row, col] = tf * idf_list[col]

输出:

df
       a    b
0   0.405   0.000
1   0.000   0.405
2   0.180   0.225