編輯距離(edit distance),又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。一般來說,編輯距離越小,兩個串的相似度越大。俄羅斯科學家vladimir levenshtein在2023年提出這個概念。好的好的我懂,先直接上**是不是比較好?~
嘛,確實只要能用能算出來就行了,關於可能出現的問題呀,除錯相關的東西也就閒下來的時候看看就好,那就先把demo貼出來吧~
#-*- coding: utf-8 -*-
from bs4 import beautifulsoup
from multiprocessing import pool
import os
import re
import sys
import commands
import configparser
deflevenshtein
(first,second):
if len(first) > len(second):
first,second = second,first
if len(first) == 0:
return len(second)
if len(second) == 0:
return len(first)
first_length = len(first) + 1
second_length = len(second) + 1
distance_matrix = [range(second_length) for x in range(first_length)]
#print distance_matrix
for i in range(1,first_length):
for j in range(1,second_length):
deletion = distance_matrix[i-1][j] + 1
insertion = distance_matrix[i][j-1] + 1
substitution = distance_matrix[i-1][j-1]
if first[i-1] != second[j-1]:
substitution += 1
distance_matrix[i][j] = min(insertion,deletion,substitution)
#print distance_matrix
return distance_matrix[first_length-1][second_length-1]
if __name__ == '__main__' :
# lines = [line.strip().split('\t')[0] for line in file("./test_inputfile")];
lines = [line.strip() for line in file("./test_inputfile")];
for i in xrange(0,len(lines)):
l.notice("now calculating %s-th word" % str(i))
for j in xrange(i+1,len(lines)):
str1,str2 = lines[i].decode('utf-8'),lines[j].decode('utf-8')
dist = levenshtein(str1,str2)
dist = (1.0*dist) / (1.0*max(len(str1),len(str2)))
if dist < 0.5: # 可通過設定閾值,僅輸出所需求的細數矩陣
print
"%s\t%s\t%s" % (lines[i],lines[j],str(dist))
使用方法:更改讀入檔名,或者將已有檔案改名為test_inputfile
放於python檔案同目錄下,執行python檔案重定向輸出到自定義檔名即可。
輸入格式:輸入檔案中,每行乙個樣本詞句,若為多列需要選取,可以更改
lines = [line.strip().split('\t')[0] for line in
file("./test_inputfile")];
中的.split('\t')[0]
部分來切分分割字選取所需列。
為什麼要單獨寫出來呢,當然是為了讓**(zhan)簡(ge)潔(zi)啦,這裡寫一些本來想要放在注釋項給**裡奇怪的地方做個註解的東西:
/* 偽** */
//動態規劃經常被用來作為這個問題的解決手段之一。
//整數 levenshtein距離(字串 str1[1..m], 字串 str2[1..n])
//宣告變數, d[i , j]用於記錄str1[1...i]與str2[1..j]的levenshtein距離
int d[0..m, 0..n] //初始化
for i from
0to m
d[i, 0] := i
for j from
0to n
d[0, j] := j
//用動態規劃方法計算levenshtein距離
for i from
1to m
for j from
1to n
return d[m, n]
祝願今後也能身心健康愉快的成長~
動態規劃求編輯距離
編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sitting g 動態規劃是解決該問題...
最短編輯距離 python 最短編輯距離演算法實現
一,演算法介紹 在cs124課程的第一周提到 求解兩個字串相似度的演算法 minimum edit distance 最短編輯距離 演算法。該演算法在nlp 自然語言處理 中也會用到。如何定義相似度呢?任給兩個字串x 和y,使用以下三種操作將 字串x 變到 字串y 插入 insert 操作 刪除操作...
python求球面距離
今天我們用python 寫乙個求球面距離的公式,可以通過經緯度,計算球面間兩點的距離。如下 def geodistance lng1,lat1,lng2,lat2 lng1,lat1,lng2,lat2 map radians,float lng1 float lat1 float lng2 flo...