问题描述
我想为给定类型计算关键字的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