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

abh*_*rni 3 python numpy scipy term-document-matrix

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

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

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

谢谢.

ely*_*ase 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.        ]])
Run Code Online (Sandbox Code Playgroud)