首页 > 解决方案 > 如果我已经在 python df 中有一个关键字列表,如何使用 TfidfVectorizer?什么是正确的输入?

问题描述

我想计算给定类型的关键字的 TF-IDF。这些关键字从来都不是文本的一部分,它们已经分开但格式不同。我从该格式中提取它们并将它们放入列表中。流派也一样

我有一个这种格式的df:

```keywords,genres
['k1','k2','k3'],['g1','g2']
['k2','k5','k7'],['g1','g3']
['k1','k2','k9'],['g4']
['k6','k7','k8'],['g3','g5]
...```

我在流派 col 上使用了 explode 并得到:

```['k1','k2','k3'],g1
['k1','k2','k3'],g2
['k2','k5','k7'],g1
['k2','k5','k7'],g3
['k1','k2','k9'],g4
['k6','k7','k8'],g3
['k6','k7','k8'],g5
...```

然后我“按”流派分组以获得这个 df_agg:

```genres,keywords
g1,['k1','k2','k3','k2','k5','k7']
g2,['k1','k2','k3']
g3,['k2','k5','k7','k6','k7','k8']
g4,['k1','k2','k9']
g5,['k6','k7','k8']
...```

因此,我进行了这些更改以计算每种类型的关键字的 Tf-IDF,但我不确定这是否是正确的格式,因为 df_agg['keywords'] 是一个列表,但我在网上看到的所有示例都使用文本并获得标记文本。我的 df_agg 结构不是表明流派是文档,关键字是准备好的标记吗?

我应该做一些不同的事情吗?

标签: pandasscikit-learnnlptf-idf

解决方案


你正在做的事情有点不合常规,但如果你想这样做,你可以按照以下步骤进行:退一步并组成一串令牌:

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
tfidf_matrix = tfidf.fit_transform(df["keywords"].apply(lambda x: " ".join(x))).toarray()

如果您愿意,可以将其放入 df 中:

df_tfidf = pd.DataFrame(tfidf_matrix, columns=tfidf.vocabulary_)
print(df_tfidf)
         k1        k2        k3        k5        k7        k6        k8  \
0  0.359600  0.605014  0.433206  0.433206  0.000000  0.359600  0.000000   
1  0.562638  0.473309  0.677803  0.000000  0.000000  0.000000  0.000000   
2  0.000000  0.279457  0.000000  0.400198  0.400198  0.664401  0.400198   
3  0.503968  0.423954  0.000000  0.000000  0.000000  0.000000  0.000000   
4  0.000000  0.000000  0.000000  0.000000  0.609818  0.506204  0.609818   

         k9  
0  0.000000  
1  0.000000  
2  0.000000  
3  0.752515  
4  0.000000

推荐阅读