【发布时间】:2018-08-25 10:42:19
【问题描述】:
在计算编辑距离时,nltk 似乎没有正确考虑更改。例如
edit_distance(('paravati', 'selke', 'vital'), ('paravati', 'selke', 'vital'), transpositions=True)
返回 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 个单词被改变了。
也就是说,这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)
这种方法正确还是我遗漏了什么?
【问题讨论】: