说我的数据库中有以下两个字符串:
(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