短语之间的相似度得分

时间:2019-04-11 18:22:33

标签: python similarity levenshtein-distance sentence-similarity

Levenshtein距离是一种用于测量单词之间的差异的方法,而对于短语则不能。

是否有一个很好的距离量度来测量短语之间的差异?

例如,如果短语1由n个单词x1 x2 x_n组成,而短语2由m个单词y1 y2 y_m组成。我认为应该对单词进行模糊对齐,然后对对齐的单词进行打分,以判断它们的相似程度,并对不对齐的单词应用某种空位罚分。这些积极得分和消极得分应该以某种方式进行汇总。似乎涉及一些启发式方法。

是否存在测量短语之间相似度的解决方案?首选Python,但其他解决方案也可以。谢谢。

2 个答案:

答案 0 :(得分:0)

看看FuzzyWuzzy

>>> from fuzzywuzzy import fuzz

>>> s1 = "this is a sentence used for testing"
>>> s2 = "while this is another sentence also used for testing"
>>> s3 = "I am a completely unrelated string"

>>> fuzz.partial_ratio(s1, s2)
80
>>> fuzz.partial_ratio(s1, s3)
52
>>> fuzz.partial_ratio(s2, s3)
43

它还包括其他比较模式,这些模式可以解释乱序的令牌等。

答案 1 :(得分:0)

您还可以使用Levenshtein距离来测量两个短语之间的相似度,从而将每个单词视为一个元素。如果字符串大小不等,则可以使用Smith-Waterman或Needleman-Wunsch算法。这些算法在生物信息学中被广泛使用,其实现可以在biopython软件包中找到。 您还可以标记短语中的单词,并测量每个短语中每个标记的频率,这将导致每个短语的频率数组。从该数组中,您可以使用任何矢量距离(例如欧几里得距离或余弦相似度)来测量成对相似度。短语的标记化可以使用nltk软件包完成,并且距离可以通过scipy测量。 希望能帮助到你。