テキスト・マイニング/SennaのRubyバインディングを使う
をテンプレートにして作成
開始行:
*はじめに [#gb692fb7]
組み込み型全文検索エンジンSennaには標準でRubyバインディン...
ここでは,その使い方についてメモしておきます.
MacへSennaをインストールする方法については[[こちらのペー...
Mac OS X 10.5.7とSenna 1.1.4とRuby 1.9.1で確認しました.
*ログ [#e8c28ad3]
ログは/var/senna/log/senna.logに出力されます.
そこで,ディレクトリーを作成し,権限を与えます.
#geshi(bash){{
$ sudo mkdir /var/senna/log
$ sudo chmod 755 /var/senna/log
}}
Sennaがうまく動かないときは,このログに書き込まれたエラー...
ただし,ログ・ファイルのサイズがものすごい勢いで大きくな...
#geshi(bash){{
$ rm /var/senna/log/senna.log
$ touch /var/senna/log/senna.log
$ chmod 444 /var/senna/log/senna.log
}}
*ポイント [#x73a562f]
SennaのAPIが文字列の終端の判定をNULL文字で行っているため...
(C言語では文字列の終端がNULL文字で表されるため,明示的に...
#geshi(ruby){{
def append_nullchar(s)
return (s.unpack("C*") + [0x00]).pack("C*")
end
}}
文字列の最初が「 」(空白)だとなぜかインデックスが作成...
*サンプル・プログラム [#q70c7782]
インデックスを作成し,4つの文章を登録し,インデックスの内...
インデックスの文字コードはutf-8にしています.
そこで,プログラムもutf-8で作成します.
#geshi(ruby){{
# -*- encoding: utf-8 -*-
require 'senna'
# 文字列の最後にNULL文字を追加するメソッド
def append_nullchar(s)
return (s.unpack("C*") + [0x00]).pack("C*")
end
# インデックスtestを作成します
index = Senna::Index.create("test",0,0,0,Senna::ENC_UTF8)
# インデックスに文章を追加します
index.upd('0001', nil, append_nullchar('プログラミング言...
index.upd('0002', nil, append_nullchar('私は言語学者では...
index.upd('0003', nil, append_nullchar(' 私が使用してい...
index.upd('0004', nil, append_nullchar('仕事のためにこの...
# インデックスを検索します
rcs = index.sel(append_nullchar('言語'))
if rcs != nil
print rcs.nhits, "\n"
while rcs.next != nil
print rcs.curr_key, "\n"
end
end
index.close;
# sen_symインスタンスを開きます
sym=Senna::Sym.open("test.SEN.l")
print "Open ", sym, "\n"
size = sym.size
print "size=", size, "\n"
# sen_symインスタンスに登録されているデータを表示します.
for i in (1..size) do
len, s = sym.key(i)
# printf "%d : %d : %s \n", i, len, s
printf "%d : %d : %s : %s\n", i, len, s.unpack("H*"), s;
end
sym.close;
}}
*参考情報 [#r65c9d27]
-[[Senna 組み込み型全文検索エンジン:http://qwik.jp/senna/...
-[[RubyでSennaを使って全文検索を行う -STBBS.NET blog:http...
-[[RubySenna - Greenbear Laboratory:http://mono.kmc.gr.jp...
-[[senna&mecab - junoのへたれサーバ管理日記:http://juno10...
終了行:
*はじめに [#gb692fb7]
組み込み型全文検索エンジンSennaには標準でRubyバインディン...
ここでは,その使い方についてメモしておきます.
MacへSennaをインストールする方法については[[こちらのペー...
Mac OS X 10.5.7とSenna 1.1.4とRuby 1.9.1で確認しました.
*ログ [#e8c28ad3]
ログは/var/senna/log/senna.logに出力されます.
そこで,ディレクトリーを作成し,権限を与えます.
#geshi(bash){{
$ sudo mkdir /var/senna/log
$ sudo chmod 755 /var/senna/log
}}
Sennaがうまく動かないときは,このログに書き込まれたエラー...
ただし,ログ・ファイルのサイズがものすごい勢いで大きくな...
#geshi(bash){{
$ rm /var/senna/log/senna.log
$ touch /var/senna/log/senna.log
$ chmod 444 /var/senna/log/senna.log
}}
*ポイント [#x73a562f]
SennaのAPIが文字列の終端の判定をNULL文字で行っているため...
(C言語では文字列の終端がNULL文字で表されるため,明示的に...
#geshi(ruby){{
def append_nullchar(s)
return (s.unpack("C*") + [0x00]).pack("C*")
end
}}
文字列の最初が「 」(空白)だとなぜかインデックスが作成...
*サンプル・プログラム [#q70c7782]
インデックスを作成し,4つの文章を登録し,インデックスの内...
インデックスの文字コードはutf-8にしています.
そこで,プログラムもutf-8で作成します.
#geshi(ruby){{
# -*- encoding: utf-8 -*-
require 'senna'
# 文字列の最後にNULL文字を追加するメソッド
def append_nullchar(s)
return (s.unpack("C*") + [0x00]).pack("C*")
end
# インデックスtestを作成します
index = Senna::Index.create("test",0,0,0,Senna::ENC_UTF8)
# インデックスに文章を追加します
index.upd('0001', nil, append_nullchar('プログラミング言...
index.upd('0002', nil, append_nullchar('私は言語学者では...
index.upd('0003', nil, append_nullchar(' 私が使用してい...
index.upd('0004', nil, append_nullchar('仕事のためにこの...
# インデックスを検索します
rcs = index.sel(append_nullchar('言語'))
if rcs != nil
print rcs.nhits, "\n"
while rcs.next != nil
print rcs.curr_key, "\n"
end
end
index.close;
# sen_symインスタンスを開きます
sym=Senna::Sym.open("test.SEN.l")
print "Open ", sym, "\n"
size = sym.size
print "size=", size, "\n"
# sen_symインスタンスに登録されているデータを表示します.
for i in (1..size) do
len, s = sym.key(i)
# printf "%d : %d : %s \n", i, len, s
printf "%d : %d : %s : %s\n", i, len, s.unpack("H*"), s;
end
sym.close;
}}
*参考情報 [#r65c9d27]
-[[Senna 組み込み型全文検索エンジン:http://qwik.jp/senna/...
-[[RubyでSennaを使って全文検索を行う -STBBS.NET blog:http...
-[[RubySenna - Greenbear Laboratory:http://mono.kmc.gr.jp...
-[[senna&mecab - junoのへたれサーバ管理日記:http://juno10...
ページ名: