FM-Indexライブラリに文書検索機能を実装しました
ウェーブレット木ライブラリShellinfordのFM-Indexクラスに文書検索機能を追加実装したので公開しておく。
- shellinford - shellinford: succinct document retrieval library - Google Project Hosting
- An alphabet-friendly FM-index P. Ferragina, G. Manzini, V. Makinen, G. Navarro, 2004
テストデータとして(http://jusyo.jp/)の住所データを用いる。
$$ mkdir var $$ cd var $$ wget http://jusyo.jp/downloads/new/csv/csv_zenkoku.zip $$ unzip csv_zenkoku.zip $$ nkf -w zenkoku.txt > zenkoku.txt.utf8 $$ perl -ne '@a=split(/\t/);$s="$a[7]$a[9]$a[11]"; $s=~s/"//g;print "$s\n"' zenkoku.txt.utf8 > zenkoku.key $$ sort -u zenkoku.key -o zenkoku.key $$ cd ..
インストは以下のとおり。
$$ cd src $$ make $$ sudo make install $$ cd ..
あとはshellinford/sample/以下のサンプルを使って文書検索ができる。
$$ cd sample $$ make $$ ./make_fm_index ../var/zenkoku.index < ../var/zenkoku.key
これでzenkoku.indexという検索用の辞書ができた。あとは
$$ ./search_fm_index ../var/zenkoku.index 麻布 10 hits. [20812]: 北海道目梨郡羅臼町麻布町(1) [70320]: 新潟県三条市麻布(1) [76668]: 東京都港区元麻布(1) [76672]: 東京都港区南麻布(1) [76677]: 東京都港区東麻布(1) [76689]: 東京都港区西麻布(1) [76692]: 東京都港区麻布十番(1) [76693]: 東京都港区麻布台(1) [76694]: 東京都港区麻布永坂町(1) [76695]: 東京都港区麻布狸穴町(1)
というように麻布を含む文書(住所)が検索できる。
というわけでそれなりに使えるものができた気がする。とりあえずの利用者は自分なので積極的に活用していく予定。