関数・クラス解説

similar_text

version:PHP 4, PHP 5, PHP 7 (公式)

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

フォーマット

int : similar_text ( string $first , string $second [, float &$percent ] )

パラメータ

string $first
最初の文字列

string $second
次の文字列
※first と second を入れ替えると、結果が異なる可能性があることに注意しましょう。

float &$percent
第3引数をリファレンス渡しで指定することによって、類似性をパーセントで計算した値を格納します。計算方法はこの関数の結果を100倍し、与えられた文字列の長さの平均で割った値です。
計算式: (結果 * 100) / (($firstの文字長 + $secondの文字長)/2)

返値 int
ある処理方法によって両方の文字列でマッチした文字の数を返します。

解説

この関数は2つの文字列間の類似度を計算して返却します。返される結果の数値が高いほど類似していると考えてよいです。似たような関数に levenshtein() 関数がありますので参照してください。

記述サンプル

//PHP 7.4.6で実行
//類似度を調べたい2つのテキストを指定
$text1 = "apple";
$text2 = "appstore";

//実行
$result = similar_text($text1, $text2);

//結果表示
echo $result;
4

/* ----------------------------- */

//類似度を調べたい2つのテキストを指定
$text1 = "string";
$text2 = "starring";

//$percent(リファレンス渡し) を指定して実行
$result = similar_text($text1, $text2, $percent));

//結果表示
echo $result;
6

echo $percent;
85.714285714286

/* ----------------------------- */


//マルチバイト文字列を指定
$text1 = "日本語を話すアメリカ人";
$text2 = "日本語を話すオランダ人";

//$percent(リファレンス渡し) を指定して実行
$result = similar_text($text1, $text2, $percent));

//結果表示
echo $result;
28

echo $percent;
84.8484848484856

参考リンク

levenshtein 2つの文字列のレーベンシュタイン距離を算出する
soundex 文字列の soundexキー(音声表現文字列)を返す

タグ

比較 類似度 String 文字列


公式リファレンス

書式

similar_text ( string $first , string $second [, float &$percent ] ) : int

説明

この関数は、Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1) に記述されたように二つの文字列の間の類似性を計算します。 この実装は Oliver の擬似コードの様にスタックを使用せず、 プロセス全体の速度が改善されるかどうかにかかわらず再帰呼び出しを行うことに注意してください。 このアルゴリズムの複雑さは、O(N**3) であることにも注意してください。 ただし、N は最も長い文字列の長さです。

パラメータ

first
最初の文字列。
second
次の文字列。
注意: first と second を入れ替えると、 結果は異なるものになります; 例を参照してください。
percent
3 番目の引数としてリファレンスを渡すことにより、 similar_text() は類似性をパーセントで計算します。 これは、similar_text() の結果を、 与えられた文字列の長さの平均を 100 倍した値で割ることで出しています。

返値

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

サンプル

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

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

<?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 キーを計算する
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール