【问题标题】:similarity score between phrases短语之间的相似度得分
【发布时间】:2019-04-11 18:22:32
【问题描述】:

Levenshtein distance 是一种衡量单词之间差异的方法,但对于短语而言则不然。

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

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

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

【问题讨论】:

    标签: python similarity levenshtein-distance sentence-similarity


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 它会考虑文字吗?还是仍将短语视为字符串?
      • 你能澄清你的问题吗?
      • 它是否首先比较短语之间的单词并使用单词分数计算短语差异?
      • 我不认为是这样,但你会更幸运地检查项目文档。我与"thisisasentenceusedfortesting" 的相似度为 83,这可能表明它不关心单词。但是,它的一些其他方法,如 token_sorttoken_set 确实关心单词。
      • 好的。此外,同一个词的不同词形之间的差异(例如,复数与单数)应该小于两个不同词之间的差异(例如,“took”与“look”)。是否有相似度分数可以解决这个问题?
      猜你喜欢
      • 1970-01-01
      • 2015-10-27
      • 2011-01-03
      • 2013-04-18
      • 2013-06-06
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      相关资源
      最近更新 更多