PHPにて文字のあいまい検索(文字のゆれ)を実装する方法
2024/05/22
Googleで検索する際に、ちょっと間違えて入力してしまっても「もしかして○○?」のようにフォローしてくれる機能がある。これをPHPにて実装してみたい。以下にソースコード等をメモ。
実装方法
ソースコード
<?php $test = array('りんご','みかん','パイナップル','オレンジ','キウイ'); $point = 0; $per = 0; $answer = ''; if (isset($_GET['str'])) { foreach ($test as $word) { $new_point = similar_text($word,$_GET['str'],$per); if (intval($per) == 100) { //100%一致した場合はループ抜ける $answer = ''; break; } if ($point < $new_point && intval($per) > 80) { //一致度80%以上のもので一致度が高いものを選択 $point = $new_point; $answer = $word; } } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transtional//EN" "http://www.w3c.org/TR/html4/loose.dtd"> <meta http-equiv="content-type" content="text/html"/> <meta cherset = "UTF-8"> <html lang="ja"> <head> <title>タイトル</title> </head> <body> <form action="" method="get"> <input type="text" name="str" value="<?=$_GET['str'];?>"> <input type="submit" name="submit" value="あいまい検索"/> </form> <?=($answer) ? 'もしかして<strong>' . $answer . '</strong>' : '';?> </body> </html>
解説等
similar_text関数にて2つの文字列の間の類似性を検索するという内容になる。
また、similar_textの結果が37.373737%のように細かい小数で返ってきたりするのでintvalを使用している。
リファレンス
similar_text
https://www.php.net/manual/ja/function.similar-text.php
使いどころ
ユーザーの検索ログを取っておき検索件数の多い文字列を抽出して本プログラムと組み合わせるのが良さそう。
関連記事
-
-
PHPでtry~catch文
PHPでもあるってのを知らなかったのでメモ。 ■参考サイト http://www ...
-
-
Laravelのディレクトリ構造・バージョン・DB接続情報確認
Laravelで作成されているシステムに携わることがあった。しかしながら当方La ...
-
-
PHPのLocationにGETパラメータとして変数を入れる方法
PHPでページ遷移したい際に以下のように記述すると思う。 header("Loc ...
-
-
PHPで値が空の配列を削除
やりたかった事は配列でキーは入っていて値が入っていない ものを削除したかった。 ...
-
-
jQuery.uploadでリアルタイムプレビュー
やりたい事は、 ・<input type="file">で画像を選択 ...