【问题标题】:SQL word root matchingSQL词根匹配
【发布时间】:2010-10-29 11:55:04
【问题描述】:

我想知道主要的 SQL 引擎(MS SQL、Oracle、MySQL)是否能够理解两个词是相关的,因为它们共享同一个词根。

我们知道在搜索“network”时很容易匹配“networking”,因为后者是前者的子字符串。

但是SQL引擎在搜索“networking”时是否有可以匹配“network”的功能呢?

非常感谢。

【问题讨论】:

    标签: sql nlp stemming lemmatization


    【解决方案1】:

    此功能称为stemmer:一种可以从任何形式的单词中推断出词干的算法。

    这可能非常复杂:例如,俄语单词шёлиду 是同一个动词的不同形式,尽管它们没有一个共同的字母(具有讽刺意味的是,这对英语也是如此:wentgo)。

    对于某些在单词之间不使用空格的语言来说,断字也是一项相当复杂的任务。

    SQL Server 允许在其全文搜索引擎中使用可插入的词干分析器和分词器:

    http://msdn.microsoft.com/en-us/library/ms142509.aspx

    【讨论】:

    • 正是我想要的。太棒了!
    【解决方案2】:

    我认为主题是“语义相似性”。有多种努力试图找到解决此问题的最佳解决方案。

    【讨论】:

    • 你知道这方面的任何 SQL 实现吗?
    • 没有。我认为这是当前的研究——通常在产品中不可用。 -- 不幸的是。
    • 实际上,这被称为词形还原并且被认为接近解决(尽管它需要一些重型机器学习的 NLP 才能做到这一点)。词干提取是词形还原的轻量级启发式版本。语义相似性是一个更广泛的主题,尚未解决(并且可能是 AI 完备的)。 stackoverflow.com/questions/1787110/…
    【解决方案3】:

    您可以尝试使用 soundex,尽管它可能不是您想要的。见http://www.codeproject.com/KB/database/Phonetic_Search_MSSQL.aspx

    【讨论】:

      【解决方案4】:

      正如 Quassnoi 指出的,这可以通过 stemming 完成。如果你打开它,PostgreSQL 会为full-text search 实现它。

      ALTER TEXT SEARCH CONFIGURATION blah_en ADD MAPPING FOR english_stem;

      这使用基于Porter stemmerSnowball dictionary。 Porter 词干分析器可能是使用最广泛的词干分析器之一,因此它会产生不错的结果。但请务必记住,词干提取并不总是如您所愿。

      【讨论】:

        猜你喜欢
        • 2017-02-10
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 2019-12-01
        • 2011-05-23
        • 1970-01-01
        • 2018-08-06
        相关资源
        最近更新 更多