【问题标题】:Levenshtein distance with scrambling of characters?字符加扰的Levenshtein距离?
【发布时间】:2012-10-24 15:09:30
【问题描述】:

我正在寻找一个字符串比较度量 ala Levenshtein,当字符串中的字符被打乱时,它也可以工作。有谁知道这样的指标?如果有一个 Python 模块可以计算这样的指标,那就太好了。 谢谢!

【问题讨论】:

  • 如何像成对的字符转换或完全混乱?如果是后者,您需要 Jaccard 或余弦相似度
  • @DavidRobinson 字符对转换的任何相似性度量?

标签: python string string-comparison levenshtein-distance fuzzy-comparison


【解决方案1】:

您可以尝试difflib 库,或者还有一个名为pylevenshtein 的外部库。

【讨论】:

    【解决方案2】:

    计算每种类型字符的数量(使用 HashMap 或等效项),然后减去结果值并取每个减法的绝对值。将所有这些加在一起,然后除以 2(因为您已经重复计算了每个差异)。

    例子:

    banana
    batman
    
    a - 3 , 2 -> |1| -> 1
    b - 1 , 1 -> |0| -> 0
    m - 0 , 1 -> |-1| -> 1
    n - 2 , 1 -> |1| -> 1
    t - 0 , 1 -> |-1| -> 1
    

    因此你有1+1+1+1 = 4 -> 4/2 = 2

    检查:在banana 中,将一个n 更改为t,将一个a 更改为m(2 次更改),然后您在batman 中有字母

    如果字符串的长度不同,请计算字符串长度的差异,然后从差异计数中减去该数字(上图)。然后除以 2,然后把那个数字加回来。

    例子:

    nab
    banana
    
    total difference count: 3
    3 - 3 = 0 -> 0 / 2 = 0 -> 0 + 3 = 3
    

    此外,我根本不会在这里使用 Levenshtein,因为该问题的很多困难在于定位,而您并不关心。

    【讨论】:

      【解决方案3】:

      可以简单地编辑 levenstien 距离的动态规划解决方案,以捕获例如德里、德里的成对加扰,并且与相应的替换或添加或删除相比,赋予此更少的权重。

      编辑:这个算法已经存在并且被命名为Damerau–Levenshtein distance。搜索这个算法会给你一个Python package,你可以直接使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        • 2018-09-21
        • 2011-04-19
        • 2018-03-05
        • 1970-01-01
        • 2014-04-20
        相关资源
        最近更新 更多