英语句子与存储在数据库中的一组英语句子的模糊匹配

时间:2011-06-26 03:11:23

标签: algorithm fuzzy-search

数据库表中大约有1000条记录。有一个名为title的列,用于存储文章的标题。在插入记录之前,我需要检查该表中是否已存在具有类似标题的文章。如果是这样,我会跳过。

执行此类模糊匹配的最快方法是什么?假设句子中的所有单词都可以在英语词典中找到。如果句子#1中70%的单词可以在句子#2中找到,我们认为它们是匹配的。理想情况下,算法可以预先计算每个句子的值,以便将值存储在数据库中。

2 个答案:

答案 0 :(得分:1)

对于1000条记录,做一些愚蠢的事情并且只是迭代所有记录都可以工作(假设字符串不是太长而且你没有遇到过多的查询)。只需从数据库中提取所有标题,然后按照与给定字符串的距离对它们进行排序(例如,您可以使用Levenshtein distance作为此指标。)

进行近似字符串匹配的更好的方法是预先计算所有字符串的n-gram并将它们存储在数据库中(某些系统本身支持此功能)。这肯定会更好地扩展性能,但它可能意味着更多的工作:

http://en.wikipedia.org/wiki/N-gram

答案 1 :(得分:1)

您可以阅读令牌 - 值存储的正向/反向索引,以获得更快的搜索结果。我个人更喜欢反向索引,它将令牌(键)的哈希映射存储到值(此处为标题)。

每当你写一篇新文章时,比如一个新的stackoverflow问题,标题中的标记将被搜索以映射所有可用的标题。

要优化结果,即获得结果的模糊逻辑,您可以按要搜索的标记中的最大出现次数对标题进行排序。例如,如果t1,t2和t3指的是标记''是''是''爱',标题是“这种爱是为了什么?”将存在于所有标记映射中,它将被放置在最顶层。

你可以更多地玩这个。我希望这种方法更简单,更有吸引力。