similar_text

(PHP 4, PHP 5, PHP 7, PHP 8)

similar_text二つの文字列の間の類似性を計算する

説明

similar_text(string $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

次の文字列。

注意:

string1string2 を入れ替えると、 結果は異なるものになります; 例を参照してください。

percent

3 番目の引数としてリファレンスを渡すことにより、 similar_text() は類似性をパーセントで計算します。 これは、similar_text() の結果を、 与えられた文字列の長さの平均を 100 倍した値で割ることで出しています。

戻り値

両方の文字列でマッチした文字の数を返します。

マッチする文字数は、 最初の共通最長部分文字列を探し、 同じことをその文字列の 前後の文字列に対して再帰的に行うことで計算されます。 そうして見つかった全ての共通部分文字列の長さが追加されます。

例1 similar_text() で、引数を入れ替えた場合の例

以下のコードは、 string1string2 を入れ替えると、異なる結果になる可能性を示しています。

<?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 %)

参考

  • levenshtein() - 二つの文字列のレーベンシュタイン距離を計算する
  • soundex() - 文字列の soundex キーを計算する

関連キーワード:  計算, 二つ, similar, , soundex, 注意, 関数, string, マッチ, percent