fts3 SQLiteのロシア語の語幹解析アルゴリズムの統合

この記事では、 ステミング拡張機能をSQLiteコードに統合した経験を共有したいと思います。 すべてのアクションは、OS Ubuntu 11.10で実行されました。



問題



fts3 SQLiteには、 Porterのステミングアルゴリズムを実装する単純なステマーがありますが、ロシア語には実装がありません。 つまり 「ホテル」という単語の一致では、「ホテル」という単語を含むレコードは検索されません。



コンパイル準備



必要なもの






さらに、sqlite3ソースが$ HOME / SQLiteにあると想定されています。



ステマーコード


ロシア語文字UTF-8のエンコード。

Stemmerは、ラテン語の単語に組み込みのPorter Stemmerを使用し、ロシア語の単語にも同様のアルゴリズムを実装します。

コードはもともとC ++用に作成され、SQLiteの拡張機能としてロードされました。 C言語コンパイラでコンパイルできるように修正したので、美しく厳格なものとはほど遠い。 起こったことは次のとおりです。

fts3_porter_ext.c

ステマーを$ HOME / SQLite / ext / fts3 / fts3_porter_ext.cに配置します



ファイル編集


Makefile.in


ファイル$ HOME / SQLite / Makefile.inを編集します。



fts3.c


$ HOME / SQLite / ext / fts3 / fts3.cを編集します。

行の後に追加

void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule);









void sqlite3Fts3PorterTokenizerModule1(sqlite3_tokenizer_module const**ppModule);







行の後

sqlite3Fts3PorterTokenizerModule(&pPorter);







モジュールの初期化を追加します

const sqlite3_tokenizer_module *pPorter1 = 0;

sqlite3Fts3PorterTokenizerModule1(&pPorter1);







最後に

|| sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter)







モジュールを組み込みトークンのハッシュに追加します

|| sqlite3Fts3HashInsert(pHash, "russian", 8, (void *)pPorter1)







mkfts3amal.tcl


$ HOME / SQLite / ext / fts3 / mkfts3amal.tclを編集します

行の後

fts3_tokenizer1.c







追加する

fts3_porter_ext.c







mksqlite3c.tcl


$ HOME / SQLite / tool / mksqlite3c.tclを編集します

行の後

fts3_tokenizer1.c







追加する

fts3_porter_ext.c









編集



次のことをしましょう(--prefix = $ HOMEは、より健全なものに置き換える方が良いです。これがインストールパスになります)

cd $HOME/SQLite && mkdir build && cd build && ../configure --prefix=$HOME CFLAGS='-DSQLITE_SOUNDEX -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS' && make







次に、ステマーがsqlite3.cにあることを確認します

grep fts3_porter_ext.c sqlite3.c







次のようなものが得られるはずです。

/************** Begin file fts3_porter_ext.c *********************************/

/************** End of fts3_porter_ext.c *************************************/







次に、コンピューターにsqlite3をインストールします。

sudo make install









使用する



fts3テーブルを作成する場合、次のようにステマーを指定する必要があります。

CREATE VIRTUAL TABLE tag_fti USING fts3(name, tokenize=russian);







これで、tag_ftiテーブルのMATCHクエリで、ステマーが使用されます。



まとめ



プロジェクトに接続できるsqlite3.cおよびsqlite3.hファイルが2つありました。

拡張モジュールをダウンロードする必要はありません。

アプリケーションが作成するfts3テーブルへのリクエストを正しく処理するコンソールクライアントを取得しました。 また、コンソールクライアントによって作成されたテーブルがアプリケーションによって処理されることもあります。

この記事が誰かに役立つとうれしいです。



UPD:修正されたリンク



All Articles