如果我已经在python df中有了关键字列表,如何使用TfidfVectorizer?正确的输入是什么?

问题描述

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

我有以下格式的df:

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

我对类型col使用了explode并得到:

```['k1',g1
['k1',g2
['k2',g1
['k2',g3
['k1',g4
['k6',g3
['k6',g5
...```

然后我按类型“分组”以拥有df_agg:

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

因此,我进行了这些更改,以计算每种类型的关键字的Tf-IDF,但是我不确定这是否是正确的格式,因为df_agg ['keywords']是列表,但我在网上看到的所有示例均使用文本并从文本中删除令牌。我的df_agg结构不是暗示类型是文档,而关键字是否已准备好标记

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

解决方法

您的操作有点不合常规,但是如果您愿意,可以按照以下步骤进行:退后一步并编写一串令牌:

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