在大型数据集中查找可能匹配的字符串

时间:2014-03-09 17:20:17

标签: hashmap string-comparison wikipedia n-gram large-data

我正处于一个项目的中间,我必须处理文本文档并使用Wikipedia链接增强它们。预处理文档包括查找所有可能的目标文章,因此我提取所有ngrams并与包含所有文章名称的数据库进行比较。当前算法是一个简单的无壳字符串比较,之前是简单的修剪。但是,我希望它更灵活,更容忍错误或像前缀等一样的文本修改。此外,数据库非常庞大,我觉得在这么大的数据库中进行字符串比较并不是最好的主意。

我想到的是一个散列函数,它会为任何文章或ngram分配一个唯一的(我宁愿避免碰撞)散列,以便我可以比较哈希而不是字符串即可。两个哈希之间的区别会让我知道这些单词是否类似,以便我可以收集所有可能的目标文章。

理论上,我可以使用余弦相似度来计算单词之间的相似性,但这对我来说似乎不合适,因为多次比较这些字符听起来像是一个性能问题。

有没有推荐的方法呢?这根本不是一个好主意吗? 也许与正确索引的字符串比较并不那么糟糕,哈希在这里不会帮助我

我查看了散列函数,文本相似度算法,但我还没有找到解决方案......

1 个答案:

答案 0 :(得分:1)

考虑使用Apache Lucene API它提供搜索,词干化,标记化,索引,文档相似性评分的功能。它是信息检索中基本最佳实践的开源实现

Lucene最有用的功能是他们的 moreLikeThis 算法,该算法使用潜在语义分析来查找类似的文档。