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
使いどころ
ユーザーの検索ログを取っておき検索件数の多い文字列を抽出して本プログラムと組み合わせるのが良さそう。
関連記事
-
-
TCPDF「Could not include font definition」エラーの対処方法
TCPDFでフォントを「arialunicid0」に指定したところ「TCPDF ...
-
-
PHPからRedisを利用する際のよく使う構文について
PHPからRedisを利用する際のよく使う構文について以下にメモ。 ...
-
-
Stripeでキャンセル処理を行う際に「$config must be a string ~」エラーが出る場合の対応方法
Stripeにて先日メモした内容でキャンセル(返金)処理をしようとしたところ1件 ...
-
-
PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法
PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...
-
-
PHPMailerでエラーメッセージ及びデバッグログの表示方法について
PHPMailerでエラーメッセージ及びデバッグログを表示させたいというケースが ...