Python中基于令牌的编辑距离?

4
我熟悉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?我更愿意使用已实现和测试过的内容,而不是编写自己的代码。谢谢提供的建议。

2个回答

14
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

这个答案解释得更好。换句话说,如果你将两个字符串传递给editdistance函数,它将返回字符串之间的字符级编辑距离。如果你传递两个字符串列表,则该函数将返回标记/单词级别的编辑距离。 - NightFury13

6

首先,安装以下内容:

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

(这是一个关于it技术的链接,可以提供更多相关信息。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接