【发布时间】:2010-10-29 11:55:04
【问题描述】:
我想知道主要的 SQL 引擎(MS SQL、Oracle、MySQL)是否能够理解两个词是相关的,因为它们共享同一个词根。
我们知道在搜索“network”时很容易匹配“networking”,因为后者是前者的子字符串。
但是SQL引擎在搜索“networking”时是否有可以匹配“network”的功能呢?
非常感谢。
【问题讨论】:
标签: sql nlp stemming lemmatization
我想知道主要的 SQL 引擎(MS SQL、Oracle、MySQL)是否能够理解两个词是相关的,因为它们共享同一个词根。
我们知道在搜索“network”时很容易匹配“networking”,因为后者是前者的子字符串。
但是SQL引擎在搜索“networking”时是否有可以匹配“network”的功能呢?
非常感谢。
【问题讨论】:
标签: sql nlp stemming lemmatization
此功能称为stemmer:一种可以从任何形式的单词中推断出词干的算法。
这可能非常复杂:例如,俄语单词шёл 和иду 是同一个动词的不同形式,尽管它们没有一个共同的字母(具有讽刺意味的是,这对英语也是如此:went和go)。
对于某些在单词之间不使用空格的语言来说,断字也是一项相当复杂的任务。
SQL Server 允许在其全文搜索引擎中使用可插入的词干分析器和分词器:
【讨论】:
我认为主题是“语义相似性”。有多种努力试图找到解决此问题的最佳解决方案。
【讨论】:
您可以尝试使用 soundex,尽管它可能不是您想要的。见http://www.codeproject.com/KB/database/Phonetic_Search_MSSQL.aspx。
【讨论】:
正如 Quassnoi 指出的,这可以通过 stemming 完成。如果你打开它,PostgreSQL 会为full-text search 实现它。
ALTER TEXT SEARCH CONFIGURATION blah_en ADD MAPPING FOR english_stem;
这使用基于Porter stemmer 的Snowball dictionary。 Porter 词干分析器可能是使用最广泛的词干分析器之一,因此它会产生不错的结果。但请务必记住,词干提取并不总是如您所愿。
【讨论】: