pandas - 如果我已经在 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 结构不是表明流派是文档,关键字是准备好的标记吗?
我应该做一些不同的事情吗?
解决方案
你正在做的事情有点不合常规,但如果你想这样做,你可以按照以下步骤进行:退一步并组成一串令牌:
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
推荐阅读
- antd - 如何在 React 打字稿中使用 ant d 添加带有注销选项的下拉菜单
- ckeditor - 无法在 CKEditor 中本地添加 mathtype 插件
- angular - 使用打字稿在Angular中获取IPv4地址
- graph - Neo4j中是否以BFS方式遍历变长关系?
- python - 在具有相同和不同位置的两个字符串中查找匹配字符
- reactjs - 如何在 React.js 和 Framer Motion 中创建轮播
- javascript - 具有 for-each 的高阶函数,包括检查两个数组是否具有相同的值
- reactjs - reactjs中如何将属性从一个函数传递给另一个函数
- r - 如何在 R 图中指定 y 轴的中断
- wordpress - 按下一步按钮更改变体