【问题标题】:Fuzzy match of an English sentence with a set of English sentences stored in a database英语句子与数据库中存储的一组英语句子的模糊匹配
【发布时间】:2011-06-26 03:11:23
【问题描述】:

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

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

【问题讨论】:

    标签: algorithm fuzzy-search


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      每当您撰写新文章(例如新的 stackoverflow 问题)时,都会搜索标题中的标记以映射到所有可用标题。

      要优化结果,即获得结果的模糊逻辑,您可以按正在搜索的标记中的最大出现次数对标题进行排序。例如,如果 t1、t2 和 t3 指代记号“what”、“is”、“love”,以及标题“this love is for what?”。将存在于所有标记映射中,它将被放置在最顶部。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 2023-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多