亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

關于PHP的相似度計算函數:levenshtein的使用介紹

2020-03-22 20:20:32
字體:
來源:轉載
供稿:網友
使用說明
先看手冊上 levenshtein() 函數的說明:levenshtein() 函數返回兩個字符串之間的 Levenshtein 距離。Levenshtein 距離,又稱編輯距離,指的是兩個字符串之間,由一個轉換成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。例如把 kitten 轉換為 sitting:sitten (k→s)
sittin (e→i)
sitting (→g)levenshtein() 函數給每個操作(替換、插入和刪除)相同的權重。不過,您可以通過設置可選的 insert、replace、delete 參數,來定義每個操作的代價。語法:levenshtein(string1,string2,insert,replace,delete)參數 描述string1 必需。要對比的第一個字符串。
string2 必需。要對比的第二個字符串。
insert 可選。插入一個字符的代價。默認是 1。
replace 可選。替換一個字符的代價。默認是 1。
delete 可選。刪除一個字符的代價。默認是 1。
提示和注釋如果其中一個字符串超過 255 個字符,levenshtein() 函數返回 -1。
levenshtein() 函數對大小寫不敏感。
levenshtein() 函數比 similar_text() 函數更快。不過,similar_text() 函數提供需要更少修改的更精確的結果。
例子
復制代碼 代碼如下:
?php
echo levenshtein("Hello World","ello World");
echo " br /
echo levenshtein("Hello World","ello World",10,20,30);
?
輸出: 1 30源碼分析
levenshtein() 屬于標準函數,在/ext/standard/目錄下有專門針對此函數實現的文件:levenshtein.c。levenshtein()會根據參數個數選擇實現方式,針對參數為2和參數為5的情況,都會調用 reference_levdist() 函數計算距離。其不同在于對后三個參數,參數為2時,使用默認值1。并且在實現源碼中我們發現了一個在文檔中沒有說明的情況: levenshtein() 函數還可以傳遞三個參數,其最終會調用 custom_levdist() 函數。它將第三個參數作為自定義函數的實現,其調用示例如下:
復制代碼 代碼如下:
echo levenshtein("Hello World","ello World", 'strsub');
執行會報Warning: The general Levenshtein support is not there yet。這是因為現在這個方法還沒有實現,僅僅是放了一個坑在那。reference_levdist() 函數的實現算法是一個經典的DP問題。給定兩個字符串x和y,求最少的修改次數將x變成y。修改的規則只能是如下三種之一:刪除、插入、改變。
用a[i][j]表示把x的前i個字符變成y的前j個字符所需的最少操作次數,則狀態轉移方程為:
復制代碼 代碼如下:
當x[i]==y[j]時:a[i][j] = min(a[i-1][j-1], a[i-1][j]+1, a[i][j-1]+1);
當x[i]!=y[j]時:a[i][j] = min(a[i-1][j-1], a[i-1][j], a[i][j-1])+1;
在用狀態轉移方程前,我們需要初始化(n+1)(m+1)的矩陣d,并讓第一行和列的值從0開始增長。 掃描兩字符串(nm級的),對比字符,使用狀態轉移方程,最終$a[$l1][$l2]為其結果。簡單實現過程如下:
復制代碼 代碼如下:
?PHP
$s1 = "abcdd";
$l1 = strlen($s1);
$s2 = "aabbd";
$l2 = strlen($s2);


for ($i = 0; $i $l1; $i++) {
$a[0][$i + 1] = $i + 1;
}
for ($i = 0; $i $l2; $i++) {
$a[$i + 1][0] = $i + 1;
}

for ($i = 0; $i $l2; $i++) {
for ($j = 0; $j $l1; $j++) {
if ($s2[$i] == $s1[$j]) {
$a[$i + 1][$j + 1] = min($a[$i][$j], $a[$i][$j + 1] + 1, $a[$i + 1][$j] + 1);
}else{
$a[$i + 1][$j + 1] = min($a[$i][$j], $a[$i][$j + 1], $a[$i + 1][$j]) + 1;
}
}
}

echo $a[$l1][$l2];
echo "n";
echo levenshtein($s1, $s2);
在PHP的實現中,實現者在注釋中很清楚的標明:此函數僅優化了內存使用,而沒有考慮速度,從其實現算法看,時間復雜度為O(m×n)。其優化點在于將上面的狀態轉移方程中的二維數組變成了兩個一組數組。簡單實現如下:
復制代碼 代碼如下:
?PHP
$s1 = "abcjfdkslfdd";
$l1 = strlen($s1);
$s2 = "aab84093840932bd";
$l2 = strlen($s2);

$dis = 0;
for ($i = 0; $i = $l2; $i++){
$p1[$i] = $i;
}

for ($i = 0; $i $l1; $i++){
$p2[0] = $p1[0] + 1;

for ($j = 0; $j $l2; $j++){
if ($s1[$i] == $s2[$j]){
$dis = min($p1[$j], $p1[$j + 1] + 1, $p2[$j] + 1);
}else{
$dis = min($p1[$j] + 1, $p1[$j + 1] + 1, $p2[$j] + 1); // 注意這里最后一個參數為$p2
}
$p2[$j + 1] = $dis;
}
$tmp = $p1;
$p1 = $p2;
$p2 = $tmp;
}

echo "n";
echo $p1[$l2];
echo "n";
echo levenshtein($s1, $s2);

如上為PHP內核開發者對前面經典DP的優化,其優化點在于不停的復用兩個一維數組,一個記錄上次的結果,一個記錄這一次的結果。如果按照PHP的參數,分別給三個操作賦值不同的值,在上面的算法中將對應的1變成操作對應的值就可以了。 min函數的第一個參數對應的是修改,第二個參數對應的是刪除源碼天空,第三個參數對應的是添加。Levenshtein distance說明
Levenshtein distance最先是由俄國科學家Vladimir Levenshtein在1965年發明,用他的名字命名。不會拼讀,可以叫它edit distance(編輯距離)。Levenshtein distance可以用來:
Spell checking(拼寫檢查)
Speech recognition(語句識別)
DNA analysis(DNA分析)
Plagiarism detection(抄襲檢測) LD用mn的矩陣存儲距離值。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美华人在线视频| 国产精品第10页| 日韩精品在线免费| 狠狠躁18三区二区一区| 91久久国产综合久久91精品网站| 中文在线资源观看视频网站免费不卡| 欧美日韩电影在线观看| 国产精品偷伦一区二区| 日韩欧美在线观看视频| 日韩女在线观看| www.欧美精品一二三区| 欧美视频免费在线观看| 欧美一区二区视频97| 日韩最新免费不卡| 欧美乱妇高清无乱码| 色婷婷**av毛片一区| 亚洲欧美在线x视频| 日韩中文字幕在线精品| 成人黄色大片在线免费观看| 成人高h视频在线| 日韩在线观看视频免费| 日韩成人在线免费观看| 欧美视频中文字幕在线| 日韩欧美成人免费视频| 北条麻妃99精品青青久久| 国产精品十八以下禁看| 欧美在线视频网站| 国产91精品青草社区| 国产精品日日摸夜夜添夜夜av| 91亚洲精品久久久久久久久久久久| 亚洲美女精品久久| 国产欧美一区二区三区久久| 国产日本欧美在线观看| 日韩中文字幕免费| 欧美精品久久久久久久久| 亚洲天堂色网站| 国产午夜精品免费一区二区三区| 日韩高清电影免费观看完整| 日韩视频免费看| 丝袜一区二区三区| 91精品视频专区| 日韩在线免费视频| 91av在线不卡| 精品一区二区三区三区| www.国产一区| 91精品国产自产在线观看永久| 亚洲少妇中文在线| 免费av在线一区| 亚洲综合视频1区| 久久久久久欧美| 精品久久久在线观看| 色偷偷av一区二区三区乱| 一本久久综合亚洲鲁鲁| 日韩有码在线电影| 久久久久久噜噜噜久久久精品| 欧美激情综合色| 欧美性色19p| 国产精品无码专区在线观看| 精品一区二区三区四区在线| 91精品国产成人| 精品国产拍在线观看| 亚洲性生活视频在线观看| 欧美成年人网站| 欧美激情videoshd| 国产精品2018| 九九热最新视频//这里只有精品| 欧美疯狂xxxx大交乱88av| 人妖精品videosex性欧美| 亚洲电影中文字幕| 国产亚洲欧美一区| 亚洲天堂2020| 久久成人综合视频| 久久精品国产视频| 久久偷看各类女兵18女厕嘘嘘| 中文字幕在线观看亚洲| 国产精品综合久久久| 日韩精品在线免费观看视频| 欧美在线视频免费| 欧美肥老太性生活视频| 日韩成人在线播放| 国产欧美精品一区二区| 91国语精品自产拍在线观看性色| 色综合视频网站| 国产成人一区二区| 亚洲第一页中文字幕| 日韩经典中文字幕| 欧美午夜片在线免费观看| 日韩精品日韩在线观看| 68精品国产免费久久久久久婷婷| 中文日韩电影网站| 伊人青青综合网站| 91精品综合久久久久久五月天| 一区二区三区 在线观看视| 国产欧美日韩免费看aⅴ视频| 91精品国产高清自在线看超| 亚洲激情成人网| 国产成人一区二区在线| 亚洲四色影视在线观看| 国产精品av电影| 日韩欧美国产激情| 亚洲国产高清福利视频| 精品无人区太爽高潮在线播放| 日韩欧美黄色动漫| 中文国产成人精品久久一| 久久综合伊人77777| 国产欧美日韩中文字幕在线| 欧美日韩国产精品专区| 成人国产亚洲精品a区天堂华泰| 日韩禁在线播放| 91日韩在线播放| 日韩欧美在线中文字幕| 亲爱的老师9免费观看全集电视剧| 欧美最猛性xxxx| 成人乱人伦精品视频在线观看| 一区二区三区四区精品| 欧美激情a在线| 亚洲欧美日韩综合| 成人激情视频免费在线| 亚洲精品色婷婷福利天堂| 国产精欧美一区二区三区| 精品国产欧美成人夜夜嗨| 欧美日韩亚洲国产一区| 亚洲人成啪啪网站| 午夜精品三级视频福利| 欧美成aaa人片在线观看蜜臀| 久久久国产精品一区| 国产精品手机播放| 日韩精品欧美激情| 亚洲精品国产福利| 在线观看久久久久久| 亚洲成人三级在线| 久久久国产精品亚洲一区| 国产日韩在线亚洲字幕中文| 国产午夜精品全部视频播放| 91嫩草在线视频| 一本色道久久88亚洲综合88| 欧美激情奇米色| 伊人男人综合视频网| 亚洲偷熟乱区亚洲香蕉av| 6080yy精品一区二区三区| 亚洲国产精品网站| 久久免费在线观看| 91精品国产亚洲| 夜夜躁日日躁狠狠久久88av| 色综合视频网站| 欧美日韩在线视频一区二区| 欧美黑人一区二区三区| 欧美在线观看一区二区三区| 亚洲精品一区在线观看香蕉| 一区二区av在线| 久久久久久国产精品美女| 亚洲精品美女视频| 欧美成人亚洲成人| wwwwwwww亚洲| 亚洲福利视频在线| 国产精品高潮在线| 色综合久久悠悠| 日韩av综合中文字幕| 另类天堂视频在线观看| 成人免费网站在线看| 欧美电影在线观看高清| 久久久欧美一区二区| 国产91在线播放精品91| 亚洲成人av中文字幕|