関数・クラス解説
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 %)
参考
ワード検索
※入力キーワードが、関数名・説明文・タグに含まれるものを検索関数名アルファベット別
最終更新一覧
●stristr
大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却
●stripslashes
バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く
●stripos
大文字小文字を区別せずに文字列が最初に現れる位置を取得する
●stripcslashes
addcslashes() でクォートされた文字列をアンクォートする
●strip_tags
文字列から HTML と PHP のタグを除去して返却
●strcspn
指定した文字が最初に現れる位置を調べる
●strcoll
ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する
●strcmp
2つの文字列を比較し同じか(あるいは大小)を判定する
●strchr
strstr() のエイリアス
●strcasecmp
2つの文字列を比較(大文字小文字を区別せず同じとみなす)
カテゴリー一覧
PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール