python - 计算单个字符串的 TF-IDF 分数
问题描述
我使用 TF-IDF 和余弦相似度进行字符串匹配,它非常适合在字符串列表中查找字符串之间的相似度。
现在,我想在新字符串与先前计算的矩阵之间进行匹配。我使用以下代码计算 TF-IDF 分数。
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df=1, analyzer=ngrams)
tf_idf_matrix = vectorizer.fit_transform(list_string)
如何计算新字符串相对于先前矩阵的 TF-IDF 分数?我可以将新字符串添加到系列并重新计算矩阵,如下所示,但这将是低效的,因为我只想要矩阵的最后一个索引并且不需要重新计算旧系列的矩阵。
list_string = list_string.append(new_string)
single_matrix = vectorizer.fit_transform(list_string)
single_matrix = single_matrix[len(list_string) - 1:]
在阅读了一段时间关于TF-IDF计算的信息后,我正在考虑保存每个术语的IDF值并在不使用矩阵的情况下手动计算新字符串的TF-IDF,但我不知道该怎么做。我怎样才能做到这一点?或者有没有更好的方法?
解决方案
重新拟合 TF-IDF 以计算单个条目的分数不是办法;您应该简单地.transform()
将现有拟合矢量化器的方法用于您的新字符串(而不是整个矩阵):
single_entry = vectorizer.transform(new_string)
请参阅文档。
推荐阅读
- javascript - Symfony + Webpack 在模板中使用节点包
- bluetooth-lowenergy - 间歇性出现连接错误:使用 gatttool 连接时未实现功能 (38)
- loops - 用于遍历以特定字符串开头的目录的批处理脚本
- spring-boot - Flyway 未运行迁移脚本
- javascript - 获取请求返回 html 代码而不是真实数据
- python - 如何将返回字典的函数中的一些键值分配给另一个字典?
- python - tkinter 上的 Checkbutton 无论如何都保留它的价值
- python - 使用 pxssh 时 prompt() 为 False
- git - 解压缩存储库文件夹后 git status 卡住
- ios - Swift iOS将字符串“Hello”屏蔽为“Hxxxo”