PHP函数similar_text()Levenshtein(),以提高计算字符串的相似度
similar_text(中文版)复制代码代码如下所示:
< PHP
拆分字符串
功能split_str($str){
preg_match_all( / / U。
返回的数组{ 0 };
}
相似性检测
功能similar_text_cn($ str1、str2美元){
arr_1美元= array_unique(split_str($ str1));
arr_2美元= array_unique(split_str($ str2));
美元($ arr_2相似=数)数(array_diff(arr_2美元,美元arr_1));
返回相似度;
}
Levenshtein()中文版
复制代码代码如下所示:
< PHP
拆分字符串
功能mbstringtoarray($字符串编码=美元'utf-8){
arrayresult美元=阵();
而($艾朗= mb_strlen($字符串编码,$)){
array_push(arrayresult美元,mb_substr($ 0, 1,$字符串编码));
字符串(字符串mb_substr美元美元,1美元美元,艾朗,编码);
}
返回的arrayresult;
}
编辑距离
功能levenshtein_cn($ str1、str2 costreplace = 1美元,美元,美元'utf-8 encoding=){
count_same_letter = 0美元;
数组();
mb_len1美元= mb_strlen(str1美元美元,编码);
mb_len2 = mb_strlen美元(美元美元str2,编码);
mb_str1美元= mbstringtoarray(str1美元美元,编码);
mb_str2 = mbstringtoarray美元(美元美元str2,编码);
为($ I1 = 0;美元美元美元mb_len1 I1 <;I1 + +){
$ { $ I1 } =阵();
$ { $ I1 } { 0 } = $ I1;
}
为($ I2 = 0;美元美元美元mb_len2 I2 <;I2 + +){
0;
}
为($ I1 = 1;美元美元美元mb_len1 I1 <;I1 + +){
为($ I2 = 1;美元美元美元mb_len2 I2 <;I2 + +){
/ /成本=(美元美元美元str1的{ 1 } = $ I1 I2 str2 { $ 1 } 0):1;
如果($ mb_str1 { 1 } $ I1 1 } = $ mb_str2 { $ I2){
成本= 0;
count_same_letter美元+ +;
{人}
costreplace美元美元成本= / /更换;
}
$ { $ I1 I2 } { } = min(美元$ { 1 } { $ $ I1 I2 } + 1 /插入
$ { $ I1 I2 } { 1 } + 1美元 / /删除
$ { 1 } { $ $ I1 I2 1 } +美元);
}
}
返回$ { $ mb_len1 } { $ mb_len2 };
/ /返回数组('distance ' = $ { $ mb_len1 } { $ mb_len2 },'count_same_letter ' = $ count_same_letter);
}
最长公共子序列LCS()
复制代码代码如下所示:
< PHP
最长公共子序列英文版
功能lcs_en(str_1美元,美元str_2){
len_1美元= strlen($ str_1);
len_2美元= strlen($ str_2);
$ len = len_1美元美元美元美元len_2 >> len_1:len_2;
$ =数组();
($ i = 0;$ i;
$ $ I } =数组();
$ $ { 0 } = 0 } =;
$ 0 { } $ i } = 0;
}
为($我= 1;美元美元美元我<< len_1;i++){
(J = 1;对美元美元美元,<< len_2;j++){
如果($ str_1 { 1 }我美元1 } = = $ str_2 { $ J){
$ $ {我一点一点,我是1美元,1美元1美元;
{人}
1美元,我是1美元,1美元,1美元;
}
}
}
返回的DP { $ len_1 } { $ len_2 };
}
拆分字符串
功能mbstringtoarray($字符串编码=美元'utf-8){
arrayresult美元=阵();
而($艾朗= mb_strlen($字符串编码,$)){
array_push(arrayresult美元,mb_substr($ 0, 1,$字符串编码));
字符串(字符串mb_substr美元美元,1美元美元,艾朗,编码);
}
返回的arrayresult;
}
最长公共子序列中文版
功能lcs_cn($ str1、str2美元美元,编码= 'utf-8){
mb_len1美元= mb_strlen(str1美元美元,编码);
mb_len2 = mb_strlen美元(美元美元str2,编码);
mb_str1美元= mbstringtoarray(str1美元美元,编码);
mb_str2 = mbstringtoarray美元(美元美元str2,编码);
$ len = mb_len1美元美元美元美元mb_len2 >> mb_len1:mb_len2;
$ =数组();
($ i = 0;$ i;
$ $ I } =数组();
$ $ { 0 } = 0 } =;
$ 0 { } $ i } = 0;
}
为($我= 1;美元美元美元我<< mb_len1;i++){
(J = 1;对美元美元美元,<< mb_len2;j++){
如果($ mb_str1 { 1 }我美元1 } = = $ mb_str2 { $ J){
$ $ {我一点一点,我是1美元,1美元1美元;
{人}
1美元,我是1美元,1美元,1美元;
}
}
}
返回的DP { $ mb_len1 } { $ mb_len2 };
}