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
使いどころ
ユーザーの検索ログを取っておき検索件数の多い文字列を抽出して本プログラムと組み合わせるのが良さそう。
関連記事
-
-
PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...
-
-
Composer無し&ファイル1枚でPHPのエラーメッセージ画面をリッチにするライブラリ「PHP Error」の利用方法
先日PHPのエラーメッセージを見やすくするwhoopsの利用方法をメモしたが導入 ...
-
-
PHPでデータベースを取り扱いやすくなるORMライブラリ「idiorm」の利用方法
Codeigniterでデータベースを取り扱う際にクエリビルダクラスを用いて可読 ...
-
-
PHPで指定日から曜日を割り出す
曜日ってどうやって割り出すの? となったのでメモ。 ■リファレンス http:/ ...
-
-
PHPで携帯(スマホ含)とPCの判別
PHPにて携帯(スマホ含む)とPCで処理を振り分けたかったのでメモ。 <? ...