1

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

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

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

如果我尝试匹配它,我应该得到2的结果

笔放在桌子上

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

4

2 回答 2

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

于 2013-05-23T18:16:04.327 回答
0

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

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

于 2013-05-23T18:27:01.430 回答