计算单个字符串的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)

请参阅文档。

最新更新