Nlp nltk编辑距离低于元组的预期距离 在计算编辑距离NLTK时,似乎没有正确地考虑更改。例如 edit_distance(('paravati', 'selke', 'vital'), ('paravati', 'selke', 'vital'), transpositions=True)

Nlp nltk编辑距离低于元组的预期距离 在计算编辑距离NLTK时,似乎没有正确地考虑更改。例如 edit_distance(('paravati', 'selke', 'vital'), ('paravati', 'selke', 'vital'), transpositions=True),nlp,nltk,Nlp,Nltk,由于字符串匹配,因此返回0 edit_distance(('paravati', 'selke', 'vital'), ('selke', 'paravati', 'vital'), transpositions=True) 由于已启用换位,因此返回1。其他2 edit_distance(('paravati', 'selke', 'vital'), ('belke', 'paravati', 'vital'), transpositions=True) 这将返回2,因为1点表示换位,1点表

由于字符串匹配,因此返回0

edit_distance(('paravati', 'selke', 'vital'), ('selke', 'paravati', 'vital'), transpositions=True)
由于已启用换位,因此返回1。其他2

edit_distance(('paravati', 'selke', 'vital'), ('belke', 'paravati', 'vital'), transpositions=True)
这将返回2,因为1点表示换位,1点表示替换

edit_distance(('paravati', 'selke', 'vital'), ('belke', 'zaravati', 'vital'), transpositions=True)
但是当我改变第二个单词的拼写(从p到z)时,我仍然得到2的值。预期值大于2,因为现在更改了2个单词


换句话说,这两个单词的距离是5,包含完全相同单词的元组的距离是3。这似乎不正确

from nltk.metrics import edit_distance

edit_distance('vital', 'vataldedd', transpositions=True)

edit_distance(('paravati', 'selke', 'vital'), ('selke', 'zaravatiasdf', 'vataldedd'), transpositions=True)
此元组比较的预期距离为5或更多


更新:

我分别比较了所有的字符串,并按预期得到了返回10的总数

s1, s2 = ('paravati', 'selke', 'vital'), ('selke', 'zaravatiasdf', 'vataldedd')

final=list()
for i in s1:
    mylist=list()
    for k in s2:
        mylist.append(edit_distance(i, k, transpositions=True))
    final.append(min(mylist))

sum(final)

这种方法正确吗?还是我遗漏了什么?

函数
编辑距离
不支持元组计算,预期输入是一对字符串。从文件中:

:param s1, s2: The strings to be analysed
:param transpositions: Whether to allow transposition edits
:type s1: str
:type s2: str
问题在于,该函数不检查值的类型是否为
str
,因此您可以传递任何支持索引的对象,例如
tuple
list
。将一对元组传递给
edit\u distance
时,函数会将元组的每个元素视为基本元素。这就是打电话的原因:

d = edit_distance(('paravati', 'selke', 'vital'), ('belke', 'zaravati', 'vital'), transpositions=True)
返回2,因为有两个不同的元素
('paravati','zaravati'
)和
('selke','belke')
。要计算一组字符串之间的总编辑距离,必须将代码包装到函数中,如下所示:

def total_edit_distance(s1, s2):
    final = list()
    for i in s1:
        mylist = list()
        for k in s2:
            mylist.append(edit_distance(i, k, transpositions=True))
        final.append(min(mylist))
    return sum(final)

函数
edit\u distance
不支持元组计算,预期输入是一对字符串。从文件中:

:param s1, s2: The strings to be analysed
:param transpositions: Whether to allow transposition edits
:type s1: str
:type s2: str
问题在于,该函数不检查值的类型是否为
str
,因此您可以传递任何支持索引的对象,例如
tuple
list
。将一对元组传递给
edit\u distance
时,函数会将元组的每个元素视为基本元素。这就是打电话的原因:

d = edit_distance(('paravati', 'selke', 'vital'), ('belke', 'zaravati', 'vital'), transpositions=True)
返回2,因为有两个不同的元素
('paravati','zaravati'
)和
('selke','belke')
。要计算一组字符串之间的总编辑距离,必须将代码包装到函数中,如下所示:

def total_edit_distance(s1, s2):
    final = list()
    for i in s1:
        mylist = list()
        for k in s2:
            mylist.append(edit_distance(i, k, transpositions=True))
        final.append(min(mylist))
    return sum(final)
函数需要字符串作为输入。简单地说,将每个元组中的子字符串连接成一个字符串

>>> from nltk.metrics import edit_distance

>>> x, y = ('paravati', 'selke', 'vital'), ('belke', 'zaravati', 'vital')
>>> x, y = " ".join(x), " ".join(y)

>>> x
'paravati selke vital'
>>> y
'belke zaravati vital'

>>> edit_distance(x, y)
13

>>> edit_distance(x, y, transpositions=True)
13
函数需要字符串作为输入。简单地说,将每个元组中的子字符串连接成一个字符串

>>> from nltk.metrics import edit_distance

>>> x, y = ('paravati', 'selke', 'vital'), ('belke', 'zaravati', 'vital')
>>> x, y = " ".join(x), " ".join(y)

>>> x
'paravati selke vital'
>>> y
'belke zaravati vital'

>>> edit_distance(x, y)
13

>>> edit_distance(x, y, transpositions=True)
13