パソコンなどの話題を書いていきます。
次は登録したインデックスから検索する処理を考えます。
まず「ぱじゃま」という言葉を2グラムで分割します。それぞれのグラムを保持するカラムを取得します。
<?php
$NGRAM = 2;
$EXCLUDES = array("、", "。");
$searchWord = "ぱじゃま";
$wordset = array();
for($i = 0;$i <= (mb_strlen($searchWord) - $NGRAM);$i++) {
$parts = mb_substr($searchWord, $i, $NGRAM);
$parts = strtolower($parts);
$exists_exclude = false;
foreach($EXCLUDES as $exclude) {
$pos = mb_strpos($parts, $exclude);
if($pos === 0) {
$exists_exclude = true;
} else if($pos !== false) {
$parts = str_replace($exclude, " ", $parts);
}
}
if(!$exists_exclude) {
$result[] = "'".$parts."'";
}
}
$counted_list = array();
foreach($result as $num => $word) {
if(array_key_exists($word, $counted_list)) {
$counted_list[$word][] = $num;
} else {
$counted_list[$word] = array($num);
}
}
$conn = mysql_connect("localhost:3306", "user", "pass");
if(!$conn) {
echo mysql_error();
exit();
}
$res = mysql_select_db("mydatabase", $conn);
if(!$res) {
echo mysql_error();
exit();
}
echo "mysql connected.n";
$sql = "select document_id, grams, words_in_document from ngrams_2 where grams in (".implode($result, ",").")";
$res = mysql_query($sql, $conn);
if(!$res) {
echo mysql_error();
} else {
for($i = 0; $row = mysql_fetch_assoc($res); $i++) {
echo $row["document_id"].", ".$row["grams"].", ".$row["words_in_document"]."n";
}
mysql_free_result($res);
}
mysql_close($conn);
?>
実行結果
mysql connected.
0, じゃ, 3,10,16
0, ぱじ, 2,9,15
0, ゃま, 4,11,17
HandyReader : C/C++,Java等のソースコードに色付けをしてくれるアプリです。