2012-02-10
簡潔データ構造を使った全文検索アルゴリズム、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
ちなみにウェーブレット木はちょっと高速化したので一つ前の記事のパフォーマンス測定結果が改善されて
rank_wavelet_tree: 14.71s select_wavelet_tree: 460.34s
となった。これについては機会があったら記事を書く。
サンプルは以下のような感じ。
#include <iostream>
#include "shellinford_fm_index.h"
using namespace std;
using namespace shellinford;
int main() {
try {
string s = "mississippi";
cout << "text: " << s << endl;
fm_index fm;
fm.build(s.c_str());
string key = "";
while (cin >> key) {
uint64_t first, last;
uint64_t rows = fm.get_rows(key.c_str(), first, last);
cout << rows << " hits." << endl;
if (rows > 0) {
for (uint64_t i = first; i <= last; i++) {
uint64_t pos = fm.get_position(i);
cout << fm.get_substring(pos, fm.size()) << endl;
}
}
}
} catch (const char *err) {
cerr << "ERR: " << err << endl;
return 1;
}
return 0;
}
これをsample.ccなどどして保存し以下のように使う。
$$ g++ -lshellinford sample.cc $$ ./a.out text: mississippi ssi 2 hits. ssippi ssissippi
テキストmississippiから検索キーssiで始まるsuffixが2件検索された。
トラックバック - http://d.hatena.ne.jp/echizen_tm/20120210/1328893184
リンク元
- 22 http://www.google.co.jp/url?sa=t&rct=j&q=ミルキィホームズ1.5 6話&source=web&cd=1&ved=0CCwQFjAA&url=http://d.hatena.ne.jp/echizen_tm/20111223/1324656918&ei=BKw1T4jTKYSdmQXTnvj6AQ&
- 21 http://www.google.co.jp/url?sa=t&rct=j&q=魔装機神ii+改造データ&source=web&cd=6&ved=0CFUQFjAF&url=http://d.hatena.ne.jp/echizen_tm/20120120/1327079934&ei=ZOA1T-HmNIqJmQXYouicAg&usg=
- 19 http://reader.livedoor.com/reader/
- 18 http://t.co/8TneB2Pa
- 18 http://www.google.co.jp/url?sa=t&rct=j&q=機械学習 素性&source=web&cd=5&ved=0CEQQFjAE&url=http://d.hatena.ne.jp/echizen_tm/20110114/1295030258&ei=SXg2T8qiLs_mmAWu0bSXAg&usg=AFQjCNEJO9AdM1nSt7Jz9
- 17 http://search.minakoe.jp/rsss/rsss.asp?bd=2008/09/30&base=20&plp=1&blp=1&lid=3969&qry=perl&pd=2008/09/30&pid=221627&nlp=1&multi=1&sd=2008/09/30
- 16 http://www.google.co.jp/url?sa=t&rct=j&q=サポートベクター&source=web&cd=16&ved=0CEgQFjAFOAo&url=http://d.hatena.ne.jp/echizen_tm/20110608/1307549165&ei=zvY1T4a8G6LcmAWno6mKAg&usg=AFQjCNF6
- 13 http://d.hatena.ne.jp/tkng/20120203/1328248554
- 12 http://t.co/nxOuqPWC
- 12 http://www.facebook.com/l.php?u=http://d.hatena.ne.jp/echizen_tm/20110209/1297272686&h=7AQHJitweAQGe31yGHfbl2mUJGCrzg20hxwicx5bZLGyYIA

