standford NLP課程筆記四 編輯距離

2021-07-03 05:20:08 字數 1534 閱讀 3048

編輯距離用來衡量兩個串的相似度

編輯距離就是用最少的編輯操作將乙個詞變為另乙個詞,操作有三種

插入刪除

替換如何計算最短編輯距離? 採用動態規劃

字串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進行的操作

遞推公式

編輯距離的各種變形

1 覆蓋度檢測,字串首位的差異不考慮

初始的時候不考慮插入刪除成本,中間過程跟前面一樣,結束條件就是某乙個串到達結尾了

2 區域性對比問題

對於兩個串

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

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

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

例子

standford NLP課程筆記一 正規表示式

課程位址 裡面的字元表示每個都可以,比如 ww oodchuck 可以表示woodchuck和woodchuck 1234567890 表示任何單個數字 表示範圍的 a z 表示所有大寫字母 a z 表示所有小寫字母 0 9 表示所有單個數字 表示否定的 a z 不要大寫的字母 a z 不要小寫的字...

Coursera Scala課程 第二週筆記

higher order functions 這被稱為 高階函式 既可以當引數傳,也可以當返回值。最早的形式 def sum f int int,a int,b int int if a b 0 else f a sum f,a 1,b def sumints a int,b int sum id,...

Boolan C 課程第一周筆記

第一周 20170407 類 帶指標 1 不帶指標 object based 基於物件 單一物件 object oriented 物件導向 多個有關聯的物件 語言學習 語言 標準庫 標頭檔案寫法 防衛式宣告 ifndef complex define complex 前置宣告 類的宣告 類的定義 e...