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

标签 algorithm fuzzy-search

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

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

最佳答案

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

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

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

关于algorithm - 英语句子与数据库中存储的一组英语句子的模糊匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481906/

相关文章:

regex - 可以 "skip"的模糊字符串匹配?例如 "i am (.*)."到 "I am here."的距离为 0

algorithm - 如果对于每个节点,都给出了父指针,则查找树的直径

java - 增加所有叶子元素值的两种解决方案

mysql - 如何使用 PHP 对 MYSQL 中的公司名称进行模糊匹配以实现自动完成?

spring-boot - 当SpringBoot应用程序请求ElasticSearch时,是否可以将所有索引数据搜索上的Fuzzy参数设置为应用程序参数?

python - 在数据框列中应用模糊匹配并将结果保存在新列中

c# - 使用 NHibernate 对连接的全名进行模糊搜索

algorithm - 用户放置轮换算法

algorithm - 为什么邻接表 O(|E|/|V|)$ 中的操作?

c# - 如何将包含单词的文件加载到文件超过 300 万行的列表中