3

我有以下情况,我想使用Python(最好使用numpyand scipy)来解决:

  1. 我要转换为稀疏术语文档矩阵的文档集合。
  2. 提取每个文档的稀疏向量表示(即矩阵中的一行),并在某些文档子集中使用余弦相似度找出前 10 个相似文档(文档标有类别,我想在同一类别中找到相似的文档)。

我如何做到这一点Python?我知道我可以用来scipy.sparse.coo_matrix将文档表示为稀疏向量并采用点积来查找余弦相似度,但是如何将整个语料库转换为一个大但稀疏的术语文档矩阵(这样我也可以将它的行提取为scipy.sparse.coo_matrix行向量)?

谢谢。

4

2 回答 2

5

我可以推荐你看看scikit-learn吗?这是 Python 社区中非常受欢迎的库,具有非常简单且一致的 API。他们还实施了余弦相似度度量。这是取自此处的示例,说明如何用 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.        ]])
于 2013-08-07T21:38:18.460 回答
0

你可以参考这个问题

Python:tf-idf-cosine:查找文档相似度

我已经回答了你可以找到与scikit包的余弦相似度的问题。

于 2013-09-20T11:00:58.323 回答