Nlp nltk编辑距离低于元组的预期距离 在计算编辑距离NLTK时,似乎没有正确地考虑更改。例如 edit_distance(('paravati', 'selke', 'vital'), ('paravati', 'selke', 'vital'), transpositions=True)
由于字符串匹配,因此返回0Nlp 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点表
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