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
使いどころ
ユーザーの検索ログを取っておき検索件数の多い文字列を抽出して本プログラムと組み合わせるのが良さそう。
関連記事
-
-
formのinput="file"でディレクトリを選択させ、ディレクトリ内のファイルを全てアップロードする方法
フォームで複数のファイルをアップロードしたい場合、input="file"を複数 ...
-
-
PHPでPOST送信する際に多次元配列も送る方法
PHPでPOST送信する際に多次元配列も送りたかった。ただ普通に送ろうとするとO ...
-
-
MySQLiでUPDATE文
MySQLiでUPDATE文 ■ソース $mysqli = new mysqli ...
-
-
Codeigniter4で外部ファイル(CSS / JS)の読み込みと共通パーツ化する方法
Codeigniter4.4.4でCSS及びJavaScriptファイルを設置し ...
-
-
SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法
メールサーバを構築せずに独自ドメインのメールアドレスにてメール送信を行いたい。過 ...