勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

PHPで文字のあいまい検索(文字のゆれ)

      2014/05/17

googleとかで検索する際に、ちょっと間違えて
入力してしまっても「もしかして○○?」みたいに
フォローが効くけど、あれなんとか簡単に作れないものかと
探してみたのでメモ。

■ソース
<?
$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
http://php.net/manual/ja/function.similar-text.php
similar_text(最初の文字列,次の文字列,パーセント)

■参考サイト
http://www.jamboree.jp/cms/archives/19

■その他
なんでintvalを用いているのか確認すると、
37.373737%みたいに細かく割ってくるみたいなので
使っていた。

ユーザーさんの検索ログみたいなのを
取っておいて、検索件数の多い文字列を抽出して
配列につっこんで使うとかが使えそう。

MySQLと組み合わせられたら熱いんだけど。

 - PHP

  関連記事

UTF-16にエンコードされている文字列をUTF-8へデコード

エンコードされている文字列であまり見かけない感じのものがあった。UTF-8やSh ...

PHPのheader関数で気になった点

結論としてページの移転の場合はexitか ページ自体を消した方がよさ下。 &nb ...

Ajaxのクロスドメイン

クロスドメイン対策にて色々あるみたいだけど 簡単そうで尚且つ実践でも使えたのでメ ...

自動的に定義される定数

PHPファイルを解析中__LINE__という記述があり、 定数? とその場は思っ ...

PHPでファイルを添付してメール送信

PHPでファイルを添付の上、メールを送信したかった。方法を探したところphpma ...

MySQLのダンプとリストアをコマンドで行う

MySQLのダンプとリストアをコマンドで行う ■ダンプ mysqldump -u ...

google map apiとPHPを組み合わせて複数マーカーとウィンドウを連携させる

やりたかった事は、 mysqlから経度緯度、マーカー名、マーカーIDを持ってきて ...

PHPで画像にモザイクをかけて保存

やりたかった事はPHPで ・モザイク処理 ・元の画像とは別にファイル名をつけて保 ...

PHPでフォームの禁止ワード制限

掲示板等で本文を送信する際に、禁止ワードが含まれていないかチェックするプログラム ...

jQueryとprototypeの共存

prototypeを先に使っているがjQueryに移行してきている ページで、尚 ...