standford NLP课程笔记四 编辑距离

编辑距离用来衡量两个串的相似度

编辑距离就是用最少的编辑操作将一个词变为另一个词,操作有三种

插入

删除

替换

如何计算最短编辑距离? 采用动态规划

字符串X长度为n

字符串Y长度为m

定义D(i,j)表示X[1,i]和Y[1,j]的最短编辑距离,则D(n,m)表示X和Y的最短编辑距离,注意这里的字符串  下标是从1开始的,而数组D的下标是从0开始的

比如 D(0,1)表示X不取,Y取第一个字符 这两个字串的聚类,显然是1,即删除Y的第一个字符即可

初始化

D(i,0)=i

D(j,0)=j

先计算i,j较小的情况下的D(i,j),然后再 利用已经计算出来的结果来计算i,j较大的情况下的D(i,j)

X(1...i)和Y(1...j)的编辑距离,要么是 已知X(1....i-1)和Y(1,j)的编辑距离的基础上,在X(1....i-1)的末尾进行增加操作 

  或者 在已知X(1....i)和Y(1....j-1)的编辑距离的基础上,在Y(1....j-1)的末尾进行增加操作

或者 在已知X(1....i-1)和Y(1,j-1)的编辑距离的基础上,将X的第i个字符和Y的第j个字符进行替换操作,当然,如果相同的话就不需要替换了

用公式表达出来就是


进行迭代,知道i=m,j=n为止

上面的公式里面,增加,删除,的代价设的是1,替换的代价是2


计算出编辑距离了还不够,很多时候我们需要知道两个字符串如何对上(alignment),使用回溯即可


时间复杂度

O(nm) 因为要把D矩阵每个元素都算一遍

空间复杂度

O(nm)


编辑距离可以带权,为何要加权?

比如:

拼写检查里,某些字符错写成某些字符的可能性更大。比如 e 很可能被错写成a , o很可能被错写成e. 而a和b就不太容易互相写错

生物学里,某个基因片段被添加或删除的可能性比其它的片段更大

考虑到权的编辑距离的递推式与普通的基本相同

在初始化的时候

D(0,0) = 0

D(0,i) = D(0,i-1)+insert(Y(i))   .   X 一个都不取,Y取前i个字符

D(i,0) = D(i-1,0)+delete(X(i))  .   X取前i个字符,Y一个都不取

注意这里的insert和delete 都是对字符串X进行的操作

递推公式

 




编辑距离的各种变形

覆盖度检测,字符串首位的差异不考虑

初始的时候不考虑插入删除成本,中间过程跟前面一样,结束条件就是某一个串到达结尾了



2 局部对比问题

对于两个串

x = x1,x2 .......xm

y=y1,y2......ym

找出它们中相似度最高的字串x' y'


例子




你可能感兴趣的:(读书笔记)