短语之间的相似性得分



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

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

例如,如果短语 1 由 n 个单词 x1 x2 x_n组成,短语 2 由 m 个单词 y1 y2 y_m组成。我认为它们应该被单词模糊对齐,然后对齐的单词应该有一个关于它们相似程度的分数,并且应该对未对齐的单词应用某种间隙惩罚。这些正分和负分应该以某种方式汇总。似乎涉及一些启发式方法。

是否有现有的解决方案来衡量短语之间的相似性?Python是首选,但其他解决方案也可以。谢谢。

您还可以使用Levenshtein距离来测量两个短语之间的相似性,将每个单词威胁为单个元素。当你有大小不等的字符串时,你可以使用史密斯-沃特曼或Needleman-Wunsch算法。这些算法广泛用于生物信息学,其实现可以在biopython包中找到。您还可以标记短语中的单词并测量每个短语中每个标记的频率,这将为每个短语生成一个频率数组。从该数组中,您可以使用任何向量距离(例如欧几里得距离或余弦相似性(来测量成对相似性。短语的标记化可以使用 nltk 包完成,距离可以用 scipy 测量。希望对您有所帮助。

看看 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

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

最新更新