在PHP的相似度计算功能:介绍编辑
指令先看看Levenshtein的描述()在手动功能:
The Levenshtein () function returns the Levenshtein distance between the two strings.
Levenshtein距离,也称为编辑距离是指最低数量的编辑操作两个字符串之间的要求,这是互相转化。许可的编辑操作包括与另一个字符替换一个字符,插入一个字符,或删除一个字符。
例如,把小猫变成坐着的人:
坐(K S)
在(E I)
坐(G)编辑()函数给出相同的重量为每个操作(替换,插入,删除)。然而,你可以通过设置可选的插入,定义每个操作的代价替换和删除参数。
Grammar:
Levenshtein(string1,string2,插入,替换,删除)
参数描述
一是必要的。要比较的第一个字符串。
STRING2是必要的。二字符串进行比较。
插入是可选的。插入字符的成本。默认值是1。
替换是可选的。替换字符的成本。默认值是1。
删除是可选的。删除一个字符的成本。默认值是1。
提示和注释
如果一个字符串超过255个字符,Levenshtein()函数返回到1。
Levenshtein()函数是区分大小写的情况下。
Levenshtein()函数比similar_text更快()函数。然而,这similar_text()函数提供了更精确的结果,需要较少的修改。
例子
复制代码代码如下所示:
< PHP
Echo Levenshtein(你好世界
;
Echo Levenshtein(你好世界
>
输出:130
源代码分析
Levenshtein()是一个标准的功能,并在 / / /目录下的标准有一个文件,这个功能特别执行:编辑C.
Levenshtein()将选择的实现方法,根据参数的个数。对于reference_levdist和2的reference_levdist()函数将被用来计算距离。区别在于默认值1的最后三个参数,当参数为2。
在源代码实现,我们发现文件中没有说明一个案例:Levenshtein()函数也可以通过三个参数,这将最终给custom_levdist()函数,它接受第三个参数作为一个自定义函数的实现,即如下:
复制代码代码如下所示:
Echo Levenshtein(你好世界
执行董事会报告警告:总编辑的支持是不存在的。这是因为该方法尚未实现,只是一个坑放在那里。
该reference_levdist实施()函数是一个经典的DP问题。
给定两个字符串x和y,找到将x转换为y的最少的更改。修改后的规则只能是以下三种类型之一:删除、插入、更改。
使用{ } }来显示将x的前一个字符转换为y的前j个字符所需的最小操作数,状态转移方程是:
复制代码代码如下所示:
当x {我} = = y { J }:一{我} {,} = min(一个{ } { }·J-1,{ } { }一·J + 1个{我} { J-1 } + 1);
当x { }!= y { J }:一{我} {,} = min(一个{ } { }·J-1,{ } { }表示一个J,一个{我} { J-1 })+ 1;
在使用状态转移方程之前,我们需要初始化(n+1)(m + 1)的矩阵D,使第一行和列的值从0增加。
简单的实现过程如下:
复制代码代码如下所示:
< PHP
$ S1 =abcdd ;
$ L1 = strlen(合一);
$ S2 =aabbd ;
$ L2 = strlen($ S2);
($ i = 0;$ i $ L1;$ + +){
$ $ 0 { $ I + 1 } = $ I + 1;
}
($ i = 0;$ i $ L2;$ + +){
$ $ { i + 1 } { 0 } = $ i + 1;
}
($ i = 0;$ i $ L2;$ + +){
对于($ = 0;$ $ L1;$ + +){
如果($ $ $ i I = $ $ = $ $ J }){
$ $ { i + 1 } { $ + 1 } = min($ { i $ },$ $ { 1)1,$ 1 1 };
其他{ }
$ $ { i + 1 } { $ + 1 } = min($ { i $ },$ $ { 1),1美元} 1;
}
}
}
回声$ $ { L1 $ };
回声n;
Echo Levenshtein($ S1,S2美元);
在PHP的实现,实施者清楚地表明在诠释这个函数只优化内存使用不考虑速度和时间复杂度为O(m×n)从它的实现算法,优化点是把二维数组在上面的状态转移方程转化为两组阵列的简单实现。如下:
复制代码代码如下所示:
< PHP
$ S1 =abcjfdkslfdd ;
$ L1 = strlen(合一);
$ S2 =aab84093840932bd ;
$ L2 = strlen($ S2);
美元= 0;
($ i = 0;$ i $ L2;$ + +){
美元;
}
($ i = 0;$ i $ L1;$ + +){
$ { 0 } = $ { 0 } } + 1;
对于($ = 0;$ j $ L2;$ + +){
如果(($)$ $ i = = $ { = $ j }){
美元=最小值(1美元,1美元,1美元);
其他{ }
美元(1美元1, 1美元,1美元)。
}
1美元;
}
$ $ = P1;
美元= P2;
美元= TMP;
}
回声n;
回声$;
回声n;
Echo Levenshtein($ S1,S2美元);
例如,PHP内核开发者优化经典DP,优化点是不断重复的两个一维数组,一个记录,最后的结果,和一个记录本次实验结果。如果三个操作的值是根据PHP参数指定的值不同,对应的1成上述算法的操作对应的值,最小函数的第一个参数对应的修改。第二个参数对应于源代码天空的删除,而第三个参数对应于加法。
Levenshtein距离描述
编辑距离是第一个发明在1965由俄罗斯科学家Vladimir Levenshtein,以他的名字命名。Not Pindu,可以称之为编辑距离(编辑距离)。Levenshtein距离可作为:
拼写检查(拼写检查)
语音识别(语句识别)
DNA分析(DNA分析)
抄袭检测(抄袭)LD使用Mn矩阵存储距离值。