ICT-STARTのホームページ

パソコンなどの話題を書いていきます。


N-gram検索処理|自然言語処理・全文検索

次は登録したインデックスから検索する処理を考えます。
まず「ぱじゃま」という言葉を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

トップへ

ブログへ

製作物

Java系

簡易Webサーバー

自然言語処理・全文検索

トップ

Rust Language

Kotlin

 

Androidアプリ

HandyReader : C/C++,Java等のソースコードに色付けをしてくれるアプリです。