【问题标题】:Compare strings by matching words通过匹配单词比较字符串
【发布时间】:2013-05-23 18:06:10
【问题描述】:

我想知道这样的算法是否存在并在任何数据库(最好是 Postgres)中实现。

Levenstein 匹配字符串,但我想根据匹配单词的数量来比较字符串。例如,有:

敏捷的棕色狐狸跳过了懒狗

如果我尝试将它与 2 匹配,我应该得到一个结果

笔放在桌子上

因为它在两个句子中都匹配“the”和“over”

【问题讨论】:

    标签: sql database string algorithm postgresql


    【解决方案1】:

    这是一个使用数组的 SQL 方法:

    select count(*) from
    (
    (select distinct unnest(string_to_array(upper('the quick brown fox jumps over the lazy dog'),' ')))
    intersect all
    (select distinct unnest(string_to_array(upper('the pen lies over the table'),' ')))
    ) t3
    

    http://sqlfiddle.com/#!12/724f7/6

    【讨论】:

      【解决方案2】:

      我相信您可以使用为字母设计的相同算法也可以用于单词。另见this question。用词比较并不常见,我很确定 PostgreSQL 不支持它(也不支持我知道的任何其他数据库)。但是,只要您可以使用数组,正如 David Aldridge 在回答中所建议的那样,您可以为此编写自己的存储过程。

      您可以在Wikibooks 上获取算法的灵感,只需将Strings 替换为List<String>,将size() 替换为length()charequals() 进行比较即可。现在您可以在 SQL 中实现相同的功能,您所需要的只是数组分配(如果您不能使用二维数组,还需要一些索引算法)。在最坏的情况下,您可以使用临时表而不是数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-09
        • 2016-06-10
        • 2019-04-27
        • 2022-03-30
        相关资源
        最近更新 更多