(PHP 4, PHP 5, PHP 7, PHP 8)
similar_text — 二つの文字列の間の類似性を計算する
$string1
, string $string2
, float &$percent
= null
): intこの関数は、Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1) に記述されたように二つの文字列の間の類似性を計算します。 この実装は Oliver の擬似コードの様にスタックを使用せず、 プロセス全体の速度が改善されるかどうかにかかわらず再帰呼び出しを行うことに注意してください。 このアルゴリズムの複雑さは、O(N**3) であることにも注意してください。 ただし、N は最も長い文字列の長さです。
string1
最初の文字列。
string2
次の文字列。
注意:
string1
とstring2
を入れ替えると、 結果は異なるものになります; 例を参照してください。
percent
3 番目の引数としてリファレンスを渡すことにより、
similar_text() は類似性をパーセントで計算します。
これは、similar_text() の結果を、
与えられた文字列の長さの平均を
100
倍した値で割ることで出しています。
両方の文字列でマッチした文字の数を返します。
マッチする文字数は、 最初の共通最長部分文字列を探し、 同じことをその文字列の 前後の文字列に対して再帰的に行うことで計算されます。 そうして見つかった全ての共通部分文字列の長さが追加されます。
例1 similar_text() で、引数を入れ替えた場合の例
以下のコードは、
string1
と
string2
を入れ替えると、異なる結果になる可能性を示しています。
<?php
$sim = similar_text('bafoobar', 'barfoo', $perc);
echo "類似度: $sim ($perc %)\n";
$sim = similar_text('barfoo', 'bafoobar', $perc);
echo "類似度: $sim ($perc %)\n";
上の例の出力は、 たとえば以下のようになります。
類似度: 5 (71.428571428571 %) 類似度: 3 (42.857142857143 %)