0

Levenshtein distance 是一种衡量单词之间差异的方法,但对于短语而言并非如此。

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

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

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

4

2 回答 2

1

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

于 2019-04-12T06:08:16.730 回答
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

它还包括考虑乱序令牌等的其他比较模式。

于 2019-04-11T18:30:23.877 回答