说我的数据库中有以下两个字符串:

(1) 'Levi Watkins Learning Center - Alabama State University'
(2) 'ETH Library'


我的软件从数据源接收自由文本输入,并且应该将这些自由文本与数据库中的预定义字符串(上面的字符串)进行匹配。

例如,如果软件获取字符串'Alabama University',则应认识到与(1)相比,它与(2)更相似。

起初,我想到使用著名的字符串度量标准,例如Levenshtein-Damerau或Trigrams,但这会导致不良结果,如您在此处看到的:

http://fuzzy-string.com/Compare/Transform.aspx?r=Levi+Watkins+Learning+Center+-+Alabama+State+University&q=Alabama+University

http://fuzzy-string.com/Compare/Transform.aspx?r=ETH+Library&q=Alabama+University

Difference to (1): 37
Difference to (2): 14


即使(2)包含搜索字符串的两个词((1)(1)),Alabama也会胜出,因为它比University短得多。

我也使用Trigrams(使用Javascript库FuzzySet)进行了尝试,但在那里得到了类似的结果。

是否有一个字符串度量标准可以识别搜索字符串与(1)的相似性?

最佳答案

您可以改用Word Mover的距离https://github.com/mkusner/wmd。该算法的一个显着优势是,它在计算文档中单词之间的差异时会包含隐含的含义。可以找到该文件here

10-08 02:32