erika-trie(実用版)とキーワード抽出ツールerika_extractを作ったよ

先日まで勉強のためにerika-trieというLOUDSを用いたトライ木を作っていた。ある程度考えがまとまったので実用版を作り始めた。
erika-trie(実用版)はmarisa-trieやtx/ux/rx等と同等の操作を備えたトライ木。またerika-trieを用いてテキストからキーワードを高速に抽出するためのツールerika_extractが付属している。

DSIRNLP#1で発表しました「TRIEにトライ!〜今日からはじめるTRIE入門〜」 - EchizenBlog-Zwei
海風に揺れる一輪のTRIEライブラリ erikaを作ってみたよ - EchizenBlog-Zwei
erika-trie: succinct trie library - Google Project Hosting


はじめに。なんとなくツールをerika-trieにしたのだが、意味のない名前というのもアレなので意味らしきものを無理やりこじつけてみた。

ERIKA = ExtRact Information as Keyword Array

気を取り直してまずはインストール。

$$ svn checkout https://erika-trie.googlecode.com/svn/trunk/ erika-trie
$$ cd erika-trie/src
$$ ./configure
$$ make
$$ sudo make install

インストールしたら早速トライ木を作ってみる。

$$ cat keys.txt
apple
add
all

$$ sort keys.txt -o keys.txt
$$ erika_make_node < keys.txt > keys.node
$$ erika_make_trie keys.trie < keys.node

これによって3つの単語が登録されたトライ木が作成された。
さて。erika-trieには他のtrieライブラリと同様にcommon_prefix_searchとpredictive_searchの機能がある。詳細は他の資料を見ていただくとして(何)、ここではそれぞれどういう状況で利用できるかを付属のツールの紹介を兼ねて解説する。
まずerika_extract。これは入力テキスト中にトライに登録した単語が出現した場合に、その位置を教えてくれる、というもの。これはcommon_prefix_searchの機能を用いて実現している。

$$ cat sample.txt
After all, I love applepie.
 
$$ erika_extract keys.trie < sample.txt
# After all, I love applepie.
all	6	9
apple	18	23

抽出した単語、開始位置、終了位置がタブ区切りで出力される。erika_extractは事前に用意したリストに含まれる単語をハイライトしたり、テキストにNGリストに該当する単語がないかチェックしたり、という用途で利用できる。


erika_extractとは別にerika_predictive_searchというツールも付属している。これはその名の通りpredictive_searchの機能を使ったツールで、キーワードを入力すると、そのキーワードで始まる単語でトライに登録されているものをリストアップしてくれる。

$$ cat sample2.txt
a
app
 
$$ erika_predictive_search keys.trie < sample2.txt
# a
add
all
apple
# app
apple

aと入力すると候補としてadd,all,appleすべてが、appと入力するとappleが候補として出力される。
主な使いかたは以上。技術的な話や、他のツールとの比較はおいおいしていく予定。今回は簡単にツールを紹介した。