levenshtein矩阵细胞计算

时间:2015-06-09 21:06:19

标签: python matrix levenshtein-distance hamming-distance edit-distance

我不明白如何计算levenshtein矩阵中的值According to this article。我知道我们是如何到达编辑距离3.有人可以用非专业人员的方式解释我们如何得出每个单元格中的每个值吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

您好我刚看了您分享的维基百科文章的链接:

“定义”中描述了构建矩阵的方式。 现在我将把它转化为它意味着什么以及你需要做什么来自己构建矩阵:

只是为了确保没有遗漏任何基本信息:i表示行号,j表示列号。

让我们从矩阵的第一个定义行开始: 它表示矩阵是max(i,j),如果min(i,j)= 0 仅对第0行和第0列的元素满足条件。 (然后min(0,j)为0,min(i,0)为0)。因此,对于第0行和第0列,输入max(i,j)的值,该值对应于第0列的行号和第0行的列号。 到目前为止一切顺利:

    k i t t e n
  0 1 2 3 4 5 6
s 1
i 2
t 3
t 4
i 5
n 6
g 7

所有其他值都构建为这三个值中的一个的最小值:

lev(i-1, j) + 1
lev(i, j-1) + 1
lev(i-1, j-1) + 1_(a_i != b_i)

其中lev对应于已存在的levenshtein矩阵元素。 lev(i,j-1)只是我们想要确定的那个左边的矩阵分量。 lev(i-1,j)是上面的组件,lev(i-1,j-1)是左边和上面的元素。这里,1_(a_i!= b_i)表示如果此空间上的字母不等于1则添加,否则为0.

如果我们直接进入矩阵元素(1,1),它对应于字母(s,k):我们确定3个组成部分:

lev(i-1, j) + 1 = 2     [1 + 1 = 2]
lev(i, j-1) + 1 = 2     [1 + 1 = 2]
lev(i-1, j-1) + 1 = 1   [0 + 1 = 1]  + 1 because k is clearly not s

现在,我们取这三个值中的最小值,我们找到了Levenshtein矩阵的下一个条目。

对每个单个元素行或列进行此评估,结果是完整的Levenshtein矩阵。

答案 1 :(得分:0)

将鼠标悬停在每个值上方,并在wikipedia article的矩阵中使用下方的点,并以外行人的术语描述每个值的含义。

e.g。使用(x,y)表示法

  • 元素(0,0)NoneNone进行比较。 (0,0) = 0因为它们是平等的
  • 元素(0,1)'k'None进行比较。 (0,1) = 1因为:
    1. insert 'k'None转换为'k'所以+1
  • 元素(3,2)'kit''si'进行比较。 (3,2) = 2因为``
    1. None == None所以+0 - Lev = 0见元素(0,0)
    2. swap 's','k'所以+1 - Lev = 1见元素(1,1)
    3. 'i' == 'i'所以+0 - Lev = 1见元素(2,2)
    4. insert 't'所以+1 - Lev = 2见元素(3,2)