1

我目前有使用余弦相似度度量比较两个文本的 python 代码。我在这里得到了代码。

我想要做的是在计算相似性度量之前先将这两个文本传递给字典(不是python字典,只是一个单词字典)。字典将只是一个单词列表,尽管它会是一个很大的列表。我知道这应该不难,我可能会偶然发现一些东西,但我也希望它高效。谢谢。

4

2 回答 2

1

如果字典适合内存,请使用 Python 集:

ok_words = set(["a", "b", "c", "e"])

def filter_words(words):
    return [word for word in words if word in ok_words]

如果它不适合内存,你可以使用 shelve

于 2010-10-21T23:56:38.847 回答
0

您尝试创建的结构称为倒排索引在这里,您可以找到有关它的一些一般信息以及 Heaps 和 Mills 实现的片段。不幸的是,我无法找到它的源代码以及任何其他有效的实现。(如果您发现任何内容,请发表评论。)

如果您没有在纯 Python 中创建库的目标,您可以使用PyLucene - Python 扩展来访问Lucene,这又是非常强大的 Java 搜索引擎。Lucene 实现了倒排索引,可以轻松地为您提供词频信息。它还支持十几种语言的各种分析器(解析器 + 词干分析器)。
(另请注意,Lucene 已经拥有自己的相似度度量类。)

关于相似性和向量空间模型的一些话。它是非常强大的抽象,但您的实现有几个缺点。随着索引中文档数量的增加,您的共现矩阵将变得很大以适应内存,并且在其中搜索将需要很长时间。为了停止这种效果,使用了降。在像LSA这样的方法中,这是通过Singular Value Decomposition完成的。还要注意诸如使用概率理论的PLSA和唯一增量(因此仅适用于大型索引)VSM 方法的Random Indexing等技术。

于 2010-10-22T00:35:10.053 回答