计算单个字符串的 TF-IDF 分数

Calculating TF-IDF Score of a Single String

我使用 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)

参见docs