PHP でテキスト・文字列の類似度を計算する(levenshtein 関数)

2008年 5月 23日 19:14

文字列の処理をやっている時に2つ以上の文字列の類似度を計算したい場合があったりします。そんな時に便利なのが PHP の levenshtein 関数です。この関数はレーベンシュタイン距離を求める関数で、2つの文字列に、文字の挿入、削除、置換を何回やると全く同じ文字列になるかを求める関数になります。

つまり、全く同じ文字列を比較すると距離は 0 になるわけです。

とりあえず、打ち間違えた文字列から、正しい文字列を推測するサンプルは次の通りです。PHP のマニュアルにも同じようなサンプルが載ってます。

<?php
    $word_list = array("goo", "google", "yahoo", "msn");//文字列の辞書

    $key_text = "yapoo";//打ち間違えた文字列

    $min_dist = -1;
    foreach($word_list as $word) {
        $dist = levenshtein($key_text, $word);
        if($min_dist > $dist || $min_dist < 0) {
            $min_dist = $dist;
            $hit_word = $word;
        }
    }

    print("あなたが入力しようとしたのは、これ? " . $hit_word);//推測した結果を表示
?>

レーベンシュタイン距離の具体的な計算の仕方なんかはここら辺に書いてあるので参考にどうぞ。リンク先には Java のサンプルソースもあったりしますので、Java でレーベンシュタイン距離を求めたりする時に参考になるかもです。


トラックバック URL


※言及リンクのないトラックバックは削除されます。
※書き込まれてから公開されるまで時間がかかる場合があります。

コメントをどうぞ

Spam protection by WP Captcha-Free

※書き込まれてから公開されるまで時間がかかる場合があります。