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からLINEのMessaging APIにリクエストし通知を送る方法
LINEから「2025/3/31にLINE Notifyのサービスが終了する」と ...
-
-
MySQLで使用するインデックスを指定する
ちゃんと指定してるのにインデックスが使用されていない場合、 オプティマイザに知ら ...
-
-
eval関数について
ちょくちょく見ることがあったeval関数について、 なんとなく分かってきたのでメ ...
-
-
PHPで一括出力ではなく、ひとつずつ順次に出力する方法
PHPで重たい処理とかをしている際に、途中報告みたいな形で順次出力させる方法のメ ...
-
-
PHPで画像のフォーマット(拡張子)の変換
画像のアップロードでjpg/png/gif形式を受け付けつつ、 最終的にjpgで ...