similar_text,levenshtein找到子串相似性

问题描述 投票:0回答:1

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。

是否有一种流行的方法来查找与两个函数最相似的子字符串?

php semantics
1个回答
1
投票

它可能不是理想的,但一种可能性是将两个字符串分成单词,你可以将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
*/
© www.soinside.com 2019 - 2024. All rights reserved.