【问题标题】:Token-based edit distance in Python?Python中基于令牌的编辑距离?
【发布时间】:2016-04-24 18:56:13
【问题描述】:

我熟悉python的nltk.metrics.distance模块,通常用于计算两个字符串的编辑距离。

我对一个计算这种距离的函数感兴趣,但不是像通常那样按字符计算,而是按令牌计算。我的意思是您只能替换/添加/删除整个标记(而不是字符)。

常规编辑距离示例和我想要的标记化版本:

> char_dist("aa bbbb cc",
            "aa b cc")
3                              # add 'b' character three-times

> token_dist("aa bbbb cc",
             "aa b cc")
1                              # replace 'bbbb' token with 'b' token

是否已经有一些函数可以在 python 中计算token_dist?我宁愿使用已经实现和测试过的东西,也不愿编写自己的代码。感谢您的提示。

【问题讨论】:

    标签: python nltk edit-distance


    【解决方案1】:

    NLTK 的 edit_distance 似乎与列表和字符串一样好用:

    nltk.edit_distance("aa bbbb cc", "aa b cc")
    > 3
    nltk.edit_distance("aa bbbb cc".split(), "aa b cc".split())
    > 1
    

    【讨论】:

    • 这个答案解释得更好。用文字来表达 - 如果您将 2 个字符串传递给 editdistance 函数,它将返回字符串之间的字符级编辑距离。如果您传递 2 个字符串列表,则该函数返回令牌/单词级别编辑距离。
    【解决方案2】:

    首先,安装以下内容:

    pip install editdistance
    

    那么以下将为您提供按标记的编辑距离:

    import editdistance
    editdistance.eval(list1, list2)
    

    例子:

    import editdistance
    tokens1 = ['aa', 'bb', 'cc']
    tokens2 = ['a' , 'bb', 'cc']
    editdistance.eval(tokens1, tokens2)
    out[4]: 1
    

    更多信息请参考:

    https://github.com/aflc/editdistance

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2021-08-01
      • 2021-11-08
      • 2022-10-07
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多