2014年1月24日金曜日

groonga-index-dumpで遊んでみる

これがやりたくてtweets.csvをMroongaに食わせていた

$ time /usr/ruby/2.0.0/bin/groonga-index-dump /usr/mysql/5.6.15/data/mroonga.mrn

real    0m33.430s
user    0m29.649s
sys     0m2.924s

$ ll
合計 16
drwxr-xr-x 2 root     root     4096  7月  3 19:14 2013 hsperfdata_root
drwxr-xr-x 2 yoku0825 yoku0825 4096 11月  6 11:49 2013 hsperfdata_ttanaka
drwxrwxr-x 3 yoku0825 yoku0825 4096  1月 24 12:04 2014 index-dump
drwx------ 2 yoku0825 tmux    4096  1月 10 15:19 2014 tmux-3012

--output-directoryで指定しない場合はカレントディレクトリの下にindex-dumpディレクトリを掘る。

$ cd index-dump/

$ ll
合計 2012
drwxrwxr-x 2 yoku0825 yoku0825 2056192  1月 24 12:04 2014 tweets-text.index

$ cd tweets-text.index/

$ ll | wc
  47997  479962 3723665

index-dumpの下に<テーブル名>-<インデックス名>.indexディレクトリが作られるぽい。
ls -l叩くと泣きたくなるくらいにファイルの数が多い。

$ ll | head
合計 201992
-rw-rw-r-- 1 yoku0825 yoku0825    222  1月 24 12:04 2014 %21%21%21%21%21%21%21%21%21%21%21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    218  1月 24 12:04 2014 %21%21%21%21%21%21%21%E3%80%8D.dump
-rw-rw-r-- 1 yoku0825 yoku0825    256  1月 24 12:04 2014 %21%21%21%21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    337  1月 24 12:04 2014 %21%21%21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    216  1月 24 12:04 2014 %21%21%21%21%21%E3%80%8D.dump
-rw-rw-r-- 1 yoku0825 yoku0825    417  1月 24 12:04 2014 %21%21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    218  1月 24 12:04 2014 %21%21%21%21%E3%80%8D%E3%80%8C.dump
-rw-rw-r-- 1 yoku0825 yoku0825    417  1月 24 12:04 2014 %21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    212  1月 24 12:04 2014 %21%21%21%28.dump

なんかざっと見ただけで、1つのトークンに対して1つの<トークン>.dumpファイルが出来上がっている予感。

$ cat %21%21%21%21%21%21%21%21%21%21%21%21%21%21.dump
index: tweets-text.index        term: <!!!!!!!!!!!!!!>  domain: tweets-text     range: tweets   have_section: false     have_weight: false    have_position: true
  weight        position        term_frequency  record
  0     74      1       tweets[398641294714499072].text

$ cat %E3%81%84%E3%81%BC.dump
index: tweets-text.index        term: <いぼ>    domain: tweets-text     range: tweets   have_section: false     have_weight: false    have_position: true
  weight        position        term_frequency  record
  0     40      1       tweets[198244626002481152].text

やりたいことは myisam_ftdump 的なことなので、この.dumpファイルをテキトーにパースしてやらないといけないっぽい。

取りあえず、投げやりなPerlワンライナーで。

$ cat `ls | head -1000` | perl -nle 'if (/\sterm:\s<(.+)>\s/) {printf("%d\t%s\n", $count, $term); $term= $1; $count= 0;} elsif (/\s([0-9]+)\s+tweets\[[0-9]+\]\.text$/) {$count+= $1;}' | sort -nr | head
12305   、
11013   。
9295    @
7042    /
4599    :
3583    。。
3479    #
2577    ://
2561    (
2243    「

cat *でやろうとしたらなんか怒られた(´・ω・`)

$ cat * | perl -nle 'if (/\sterm:\s<(.+)>\s/) {printf("%d\t%s\n", $count, $term); $
term= $1; $count= 0;} elsif (/\s([0-9]+)\s+tweets\[[0-9]+\]\.text$/) {$count+= $1;}' | sort -nr | head
cat: オプションが違います -- '%'
詳しくは `cat --help' を実行して下さい.

これで索引の中の無駄なトークンをあぶりだしてメンテしてやるのがゴールのつもり。


【2014/01/24 13:46】
catがダメなのは"-"で始まるファイルっぽい。

$ for f in *; do cat $f > /dev/null || (echo $f; break); done
cat: オプションが違います -- '%'
詳しくは `cat --help' を実行して下さい.
-%23.dump
cat: オプションが違います -- '%'
詳しくは `cat --help' を実行して下さい.
-%25%27.dump
cat: オプションが違います -- '%'
詳しくは `cat --help' を実行して下さい.
-%26.dump
..

cat ./*にしたら食えた。

$ cat ./* | perl -nle 'if (/\sterm:\s<(.+)>\s/) {printf("%d\t%s\n", $count, $term); $term= $1; $count= 0;} elsif (/\s([0-9]+)\s+tweets\[[0-9]+\]\.text$/) {$count+= $1;}' | sort -nr | head
12305   、
11013   。
10217   _
9295    @
7042    /
6456    って
4599    :
4514    mysql
4147    ない
3801    5

うん、mysql多いなオイ。

0 件のコメント :

コメントを投稿