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
使いどころ
ユーザーの検索ログを取っておき検索件数の多い文字列を抽出して本プログラムと組み合わせるのが良さそう。
関連記事
-
-
他所のサーバからWordPressの記事情報をpostIDを指定して取得する方法
他所のサーバからWPの記事IDを指定した上で、当該IDのタイトル・アイキャッチ画 ...
-
-
PHPで「operator not supported for strings」エラーの対応方法
PHPにて「Fatal error: [] operator not suppo ...
-
-
PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...
-
-
PHP8系の環境でdBug.phpライブラリが使用できない場合の対応方法
先日メモしたdBug.phpをPHP8系の環境で試すと動作しなかった。ただエラー ...
-
-
Stripe Checkoutにてクレジットカード決済の際に3Dセキュア対応にする方法
先日Stripe Checkoutを用いたクレジットカード決済機能についてメモし ...