Levenshtein是一种用于找到两个弦之间的Levenshtein距离的算法。 string_similarity也以类似的方式起作用 - 计算相似度并输出分数。
这个问题有几个活动部分。
拿两个字符串:
$string1="adipesesing et";
$string2="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua";
现在查看$ string1,“adipesesing et”将在$ string2中的子字符串“adipisicing elit”中找到最相似的内容,其中第一个单词拼写错误,后者是缩写。上述函数不会根据此子字符串计算得分,而是全部为$ string2。
是否有一种流行的方法来查找与两个函数最相似的子字符串?
它可能不是理想的,但一种可能性是将两个字符串分成单词,你可以将similar_text
应用于与$string2
相同大小的$string1
的每组单词。
$needle_word_count = count(preg_split('/\W+/', $string1));
$haystack_words = preg_split('/\W+/', $string2);
$n = count($haystack_words) - $needle_word_count;
for ($i = 0; $i <= $n; $i++) {
$words = array_slice($haystack_words, $i, $needle_word_count);
$substring = implode(' ', $words);
$results[$substring] = similar_text($substring, $string1);
}
arsort($results);
/* $results:
array (size=17)
'adipisicing elit' => int 11
'consectetur adipisicing' => int 8
'sit amet' => int 5
'labore et' => int 5
'eiusmod tempor' => int 4
'dolor sit' => int 4
'ipsum dolor' => int 4
'tempor incididunt' => int 4
'Lorem ipsum' => int 3
'incididunt ut' => int 3
'sed do' => int 3
'do eiusmod' => int 3
'elit sed' => int 3
'amet consectetur' => int 3
'dolore magna' => int 3
'et dolore' => int 2
'ut labore' => int 1
*/