我想知道这样的算法是否存在并在任何数据库(理想情况下是 Postgres)中实现。
Levenstein 匹配字符串,但我想根据匹配单词的数量来比较字符串。例如,拥有:
敏捷的棕色狐狸跳过了懒狗
如果我尝试匹配它,我应该得到2的结果
笔放在桌子上
因为它在两个句子上都匹配了“the”和“over”
我想知道这样的算法是否存在并在任何数据库(理想情况下是 Postgres)中实现。
Levenstein 匹配字符串,但我想根据匹配单词的数量来比较字符串。例如,拥有:
敏捷的棕色狐狸跳过了懒狗
如果我尝试匹配它,我应该得到2的结果
笔放在桌子上
因为它在两个句子上都匹配了“the”和“over”
这是一个使用数组的 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
我相信您可以使用为字母设计的相同算法也可以用于单词。另请参阅此问题。用词比较并不常见,我很确定 PostgreSQL 不支持它(也不支持我知道的任何其他数据库)。但是,只要您可以使用数组,正如 David Aldridge 在回答中所建议的那样,您可以为此编写自己的存储过程。
您可以在Wikibooks上获取算法的灵感,只需将String
s 替换为List<String>
、size()
forlength()
和char
比较 forequals()
就可以了。现在您可以在 SQL 中实现相同的功能,您所需要的只是数组分配(如果您不能使用二维数组,还需要一些索引算法)。在最坏的情况下,您可以使用临时表而不是数组。