我在postgres数据库中有一个句子表。该表名为sentences
,存储每行句子的列称为sentence
。
如何将句子与给定句子进行比较并返回其中60%的单词(甚至更好的单词根)匹配的句子,然后根据匹配的质量对结果进行排序?
理想情况下,在70%匹配之前会有90%匹配,而50%的匹配根本不会显示。
理想情况下,它也会排除标点符号,但这不是必需的。
答案 0 :(得分:2)
查看fuzzystrmatch模块,尤其是levenshtein
功能。这计算两个字符串之间的“距离”,较低的值意味着它们更相似。它通常用在两个单词之间,但只要句子不太长(每个参数的最大字符串长度为255个字节),你也可以将它们与句子一起使用。
然后你会按levenshtein
函数的升序输出排序,结果从大多数到最不相似。
如果要排除标点符号,请使用正则表达式对字符串调用regexp_replace
以删除所需的所有字符,将其替换为空字符串,并将这些返回值用作levenshtein
的参数