勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPにて文字のあいまい検索(文字のゆれ)を実装する方法

   2024/05/22  PHP

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

  関連記事

PHPからWebAPI(screendot)経由で他サイトのスクリーンショットを取得する方法
PHPからWebAPI(screendot)経由で他サイトのスクリーンショットを取得する方法

PHPで他サイトのスクリーンショットを取得したい。今回はライブラリは無しで実現し ...

PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法
PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法

PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...

PHP8系で関数の引数が設定しやすくなる名前付き引数について
PHP8系で関数の引数が設定しやすくなる名前付き引数について

PHP8系で名前付き引数が導入されたということを最近知った。今までは「第〇引数」 ...

PHPで指定したディレクトリ内のファイルを全てincludeする方法
PHPで指定したディレクトリ内のファイルを全てincludeする方法

PHPでライブラリを利用する際にcomposerからインストールしたものは「ve ...

PHPで「Warning: date(): It is not safe to…」エラーの対応方法
PHPで「Warning: date(): It is not safe to…」エラーの対応方法

PHPでdate関数を使った際に「Warning: date(): It is ...