文字列のNgram化

ブログ | 2009/9/29 02:43
function ngram($str){
 $str = preg_replace('/[\r\n  ]/u','',$str); //...(1)
 $len = mb_strlen($str);
 $n = array();
 for($i=0; $i < $len-1; $i++){
   $n[] = mb_substr($str,$i,2);  //....(2)
 }
 $n = array_unique($n);   //...(3)
 return $n;
}
こんな感じかな。

(1) 改行とスペースの削除
(2) 2文字ずつ配列に
(3) 重複をまとめる

で、配列で返す。
▼追記 2009/9/29 04:15
2文字のインデックスだけだと、「駅」みたいな1文字が検索できないんだな。
$n[] = mb_substr($str,$i,1);
も追加しとくか。
▼追記 2009/9/29 22:58
1文字2文字だけだと、長いフレーズが遅いと思う。
ということで、1〜5文字でインデックス化したる。
縮小 拡大

ログインしておくと、後で編集が可能です。

Rottel内コンテンツ

ユーザー一覧

Rottelとは?
利用規約
開発飲料
利用者の声
ヘルプ
close