Python中的术语文档矩阵和余弦相似度

时间:2013-08-07 20:40:02

标签: python numpy scipy term-document-matrix

我有以下情况,我想使用Python解决这个问题(最好使用numpyscipy):

  1. 我想要转换为稀疏术语文档矩阵的文档集合。
  2. 提取每个文档的稀疏矢量表示(即矩阵中的一行),并在某些文档子集中使用余弦相似性找出前10个相似文档(文档标有类别,我想在同一类别中找到类似文档)。
  3. 如何在Python中实现这一目标?我知道我可以使用scipy.sparse.coo_matrix将文档表示为稀疏向量并使用点积来查找余弦相似度,但是如何将整个语料库转换为大而稀疏的术语文档矩阵(这样我也可以提取它的行作为scipy.sparse.coo_matrix行向量)?

    感谢。

2 个答案:

答案 0 :(得分:5)

我建议你看看scikit-learn吗?这是Python社区中非常受欢迎的库,它具有非常简单的一致API。他们还实施了cosine similarity指标。这是从here获取的一个示例,您可以在3行代码中执行此操作:

>>> from sklearn.feature_extraction.text import TfidfVectorizer

>>> vect = TfidfVectorizer(min_df=1)
>>> tfidf = vect.fit_transform(["I'd like an apple",
...                             "An apple a day keeps the doctor away",
...                             "Never compare an apple to an orange",
...                             "I prefer scikit-learn to Orange"])
>>> (tfidf * tfidf.T).A
array([[ 1.        ,  0.25082859,  0.39482963,  0.        ],
       [ 0.25082859,  1.        ,  0.22057609,  0.        ],
       [ 0.39482963,  0.22057609,  1.        ,  0.26264139],
       [ 0.        ,  0.        ,  0.26264139,  1.        ]])

答案 1 :(得分:0)

你可以参考这个问题

Python: tf-idf-cosine: to find document similarity

我已回答了一个问题,您可以在其中找到与scikit包的余弦相似性。