おぼえがき

おぼえがき

mecabにオリジナル辞書をシステム辞書として投入する

2014-09-19 | linux_other
mecabに独自の辞書の追加する。
最終的には、wikipediaや、hatenaのデータもオリジナル辞書に入れる

ここに、https://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html
書いてあることを基本的にはやったまで。
ただ、文字コード周りや、足らないファイルや、バックアップについて
など、メモしとく
たたいたコマンドの先頭には、#を入れておく

■概要
-------------------------
mecabへオリジナル辞書追加方法には、システム辞書への追加
ユーザー辞書への追加の2種類がある。
 辞書更新が頻繁でないときや, 解析速度を落としたくない時は, 直接 システム辞書を変更するのがよいでしょう
とのことなので、システム辞書への追加を行う

■現状の確認
-------------------------
Scientific Linux release 6.0 (Carbon)
mecab-0.996-1.el6.x86_64
mecab-ipadic-2.7.0.20070801-8.el6.1.x86_64
が入っている状態

■やりたいこと
-------------------------
#mecab
綾小路きみまろ
綾小路 名詞,固有名詞,人名,姓,*,*,綾小路,アヤノコウジ,アヤノコージ
きみ 名詞,一般,*,*,*,*,きみ,*,*,wikipedia
まろ 名詞,一般,*,*,*,*,まろ,*,*,wikipedia
EOS
これを、「綾小路きみまろ」という名詞として認識させたい

■バックアップと新たなシステム辞書設置場所の用意
-------------------------
mecabの設定状況はこんな感じ
 #cat /etc/mecabrc
 ;
 ; Configuration file of MeCab
 ;
 ; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
 ;
 dicdir = /usr/lib64/mecab/dic/ipadic
 
 ; userdic = /home/foo/bar/user.dic
 
 ; output-format-type = wakati
 ; input-buffer-size = 8192
 
 ; node-format = %m\n
 ; bos-format = %S\n
 ; eos-format = EOS\n
 
システム辞書は、dicdirを見ているのがわかるので、こいつのバックアップを
とっておく。
#cp /usr/lib64/mecab/dic/ipadic /usr/lib64/mecab/dic/ipadic.org

これからの作業で、おかしくなる可能性があるので、必ずオリジナルのバックアップを
やっておくこと。以降の項目で、dicdirのパスを書き換えるが、うまくいかなくなったら、
dicdirのパスをオリジナルに向けなおせば、元の状態に戻る


新しいシステム辞書を置くディレクトリを掘る
#cp -r /usr/lib64/mecab/dic/ipadic /usr/lib64/mecab/dic/ipadic.update.v1



■準備
-------------------------
1.コスト自動推定の機能を使う準備
 https://code.google.com/p/mecab/downloads/detail?name=mecab-ipadic-2.7.0-20070801.model.bz2
 ここから、 mecab-ipadicのモデルファイルをダウンロードする
 解凍して、utf8にして
 /tmpに置いとく

2.ipadicのオリジナルをダウンロードする
 http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/
 ↑ここから、ipadicのオリジナルをダウンロードして、解凍する
 中に、*.def *.csvが存在するので、それを全て、utf8化して、
 /usr/lib64/mecab/dic/ipadic.update.v1/配下に置く

 ちゃんとutf8化しておかないと、後で痛い目にあう

3.設定ファイルの変更
 #vi /etc/mecabrc
 ;
 ; Configuration file of MeCab
 ;
 ; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
 ;
 ;dicdir = /usr/lib64/mecab/dic/ipadic
 dicdir = /usr/lib64/mecab/dic/ipadic.update.v1
 にして、保存

■オリジナル辞書の作成
-------------------------

1.オリジナル辞書の元データの用意
 mecabの辞書のフォーマットは、
 表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
 となっている。
 なんのこっちゃわからんが、とりあえず、
 
 #cat /tmp/test.csv
 綾小路きみまろ,,,,名詞,一般,*,*,*,*,綾小路きみまろ,*,*,this_is_test_dic
 ※最後に、改行は入れない
 を用意する

2.オリジナル辞書の作成
 左文脈ID,右文脈ID,コストの部分には値が入っていないので、その値を下記の方法でセット
 
 #/usr/libexec/mecab/mecab-dict-index -m /tmp/mecab-ipadic-2.7.0-20070801.model.utf8 -d /usr/lib64/mecab/dic/ipadic.update.v1 -u test2.csv -f utf8 -t utf8 -a test.csv
 -m:コスト自動推定の機能を使うデータの場所
 -d:システム辞書のディレクトリのパス
 -u:オリジナル辞書出力先
 -f:-dの文字コード(デフォがutf8)
 -t:csvの文字コード
 -a:オリジナル辞書を作成する元データ

 /tmp/mecab-ipadic-2.7.0-20070801.model is not a binary model. reopen it as text mode...
 reading test.csv ...
 done!
 
 できた。
 
 #cat test2.csv
 綾小路きみまろ,1285,1285,7336,名詞,一般,*,*,*,*,綾小路きみまろ,*,*,testdic
 
 左文脈ID,右文脈ID,コストの部分にデータが入っているのが確認できる

■システム辞書アップデート
-------------------------
 test2.csvができたので、/usr/lib64/mecab/dic/ipadic.update.v1にそのファイルを持っていく
 
 #ls /usr/lib64/mecab/dic/ipadic.update.v1
 Adj.csv          Interjection.csv   Noun.name.csv    Noun.verbal.csv  Symbol.csv  dicrc        rewrite.def
 Adnominal.csv    Noun.adjv.csv      Noun.number.csv  Others.csv       Verb.csv    feature.def  right-id.def
 Adverb.csv       Noun.adverbal.csv  Noun.org.csv     Postp-col.csv    left-id.def  sys.dic
 Auxil.csv        Noun.csv           Noun.others.csv  Postp.csv        matrix.bin   test2.csv
 Conjunction.csv  Noun.demonst.csv   Noun.place.csv   Prefix.csv       char.bin    matrix.def   unk.def
 Filler.csv       Noun.nai.csv       Noun.proper.csv  Suffix.csv       char.def    pos-id.def   unk.dic


 上記のような状態になっているはず。
 
 #cd /usr/lib64/mecab/dic/ipadic.update.v1
 #/usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8

 reading ./unk.def ... 40
 emitting double-array: 100% |###########################################|
 ./model.def is not found. skipped.
 reading ./Noun.name.csv ... 34202
 reading ./Noun.number.csv ... 42
 reading ./Noun.verbal.csv ... 12146
 reading ./Others.csv ... 2
 reading ./Symbol.csv ... 208
 reading ./test2.csv ... 1
 reading ./Prefix.csv ... 221
 reading ./Noun.place.csv ... 72999
 reading ./Interjection.csv ... 252
 reading ./Adnominal.csv ... 135
 reading ./Noun.csv ... 60477
 reading ./Suffix.csv ... 1393
 reading ./Adj.csv ... 27210
 reading ./Noun.nai.csv ... 42
 reading ./Noun.demonst.csv ... 120
 reading ./Noun.adjv.csv ... 3328
 reading ./Postp.csv ... 146
 reading ./Filler.csv ... 19
 reading ./Verb.csv ... 130750
 reading ./Noun.org.csv ... 16668
 reading ./Auxil.csv ... 199
 reading ./Noun.others.csv ... 151
 reading ./Postp-col.csv ... 91
 reading ./Noun.adverbal.csv ... 795
 reading ./Adverb.csv ... 3032
 reading ./Noun.proper.csv ... 27327
 reading ./Conjunction.csv ... 171
 emitting double-array: 100% |###########################################|
 reading ./matrix.def ... 1316x1316
 emitting matrix : 100% |###########################################|
 
 done!
 
 #mecab
 綾小路きみまろ
 綾小路きみまろ 名詞,一般,*,*,*,*,綾小路きみまろ,*,*,testdic
 EOS
 
 #mecab
 すもも
 すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
 EOS

■出会ったエラーたち
-------------------------
feature_index.cpp(81) [ifs] no such file or directory: /usr/lib64/mecab/dic/ipadic/feature.def
 このエラーは、■準備:2でをちゃんとやること
viterbi.cpp(59) [tokenizer_->dictionary_info()->lsize == connector_->left_size() && tokenizer_->dictionary_info()->rsize == connector_->right_size()] Transition table and dictionary are not compatible
 このえらーも、■準備:2でをちゃんとやることdefファイルがなかった
context_id.cpp(96) [it != left_.end()] cannot find LEFT-ID for 名詞,一般,*,*,*,*,*
 ■オリジナル辞書の作成:1のフォーマットでやればいける

■wikipediaを突っ込んでみる
-------------------------
1.データのダウンロード
 #wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
 から持ってくる
 
2.不要な文字列を削って、オリジナル辞書のフォーマットを作る
 下記ファイルを用意
 #cat grepptn
 ^.{1,3}$
 page_title
 ^[0-9-]+$
 曖昧さ回避
 ^日本の
 ^日本に
 ^日本と
 ^日本で
 ^中国の
 ^中国に
 ^中国と
 ^中国で
 ^アメリカの
 ^アメリカに
 ^アメリカと
 ^アメリカで
 ^ヨーロッパの
 ^ヨーロッパに
 ^ヨーロッパと
 ^ヨーロッパで
 _\(何か\)$
 一覧$
 の登場人物$
 ^[0-9]{4}[年|_]
 ^[0-9]+月[0-9]+日
 
 で、オリジナル辞書を作るシェルを実行
 #for i in $(sed -e "s/,//g" jawiki-latest-all-titles-in-ns0 | pcregrep -vf grepptn )
 #do
 # echo "$i,,,,名詞,一般,*,*,*,*,$i,*,*,wikipedia" >> newdic.csv
 #done
 
 これは、「,」が含まれるとおかしくなるので、それをsedで取り除いて、
 pcregrepにて、不要なレコードを除外するシェル。
 pcregrepのfオプションで、不要なファイルを除外するパターンファイルを指定している
 
3.左文脈ID,右文脈ID,コストを生成
 #/usr/libexec/mecab/mecab-dict-index -m /tmp/mecab-ipadic-2.7.0-20070801.model.utf8 -d /usr/lib64/mecab/dic/ipadic.update.v1 -u wikidic.csv -f utf8 -t utf8 -a newdic.csv
 これで、wikidic.csvにデータが出力されるはず

4.システム辞書に追加
 /tmpに生成された、wikidic.csvをusr/lib64/mecab/dic/ipadic.update.v1に持ってきて
 #cd /usr/lib64/mecab/dic/ipadic.update.v1
 #/usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8
 
 で、出来上がり



■hatenaキーワードを突っ込んでみる
-------------------------
1.データのダウンロード
 #wget wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
 から持ってくる

あとは、一緒

おしまい

ubuntu livewallpaper

2013-02-06 | linux_other
ubuntuのlivewallpaperのstableを入れるおぼえがき



sudo add-apt-repository ppa:fyrmir/livewallpaper-stable
sudo apt-get update && sudo apt-get install livewallpaper livewallpaper-config livewallpaper-indicator

あとは、livewallpaper-config起動すると実行できる


さて、仕事するか

イベントログ収集ツール fluentのインストール

2011-09-30 | linux_other
fluentをインストールしてみる

インデックス
0.どんなもの?
1.インストール
2.設定-その1
3.設定-その2




0.どんなもの?

分散しているサーバーのログをかき集めて、一つのサーバーにかき集めることが出来るみたい
SPOFにもなっていないらしい。ログ形式は、JSONだったりするので、アプリケーションでの利用も
期待できるかと思われる。syslogdみたいなものと思えばいいかと。
ただ、受け取ったものをプラグインでごにょごにょ出来るみたい。
まぁ、やってみなきゃ分かんないんで、apacheのログをかき集めてみた
kmofs/messagepackやらを提供されいてるかたのツールだったりする


※とりあえず、備忘録代わりなので、設定は雑...


詳しくは
作成者のブログ
スライド
ドキュメント




1.インストール
sudo yum install openssl-devel.x86_64(サーバーに入ってなかった)
sudo yum install readline-devel.x86_64(サーバーに入ってなかった)
sudo rpm -ivh td-agent-1.0.3-0.el6.x86_64.rpm(rpm)

設定ファイルは、 /etc/td-agent/td-agent.conf ここに入る
起動方法は、/etc/init.d/td-agent start


設定ファイルの考え方が分かれば作りはめっちゃしんぷる

どのデータを受信して...<source>のディレクティブに書き込む
そのデータをどうするか...<match>のディレクティブに書き込む




2.設定-その1
とりあえず、wwwサーバのログをローカルに出力してみる

/etc/td-agent/td-agent.confをいじればいい


apacheのアクセスログをtailした情報に対して、tag(apache.access)をつける
そのデータをファイルに出力する<match>ディレクティブ

<source>
type tail
format apache
path /etc/httpd/logs/access_log # apacheのログがはき出されるファイル
tag apache.access
</source>

<match apache.access>
type file
path /tmp/%Y-%m-%d-%H.log
</match>

アパッチのログ出力をcombineに設定
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

ログの出力方法は、いろんな種類でも対応できるから、それは
ドキュメント見ればいい

これで、デーモン起動すればいける




3.設定-その2
wwwサーバが複数台あって、そのログを、ログ収集サーバーにかき集める


wwwサーバー側

apacheのアクセスログをtailした情報に対して、tag(apache.access)をつける
そのデータをtcp(24224)を通してhostに送る
iptablesで許可とかしてあげて、、、

<source>
type tail
format apache
path /etc/httpd/logs/access_log # apacheのログがはき出されるファイル
tag apache.access
</source>

<match apache.access>
type tcp
host XXXXX # ログ収集サーバーのホスト名
port 24224 # ログ収集サーバーがLISTENしているポート
buffer_type file
buffer_path /tmp/fluent_buf_myforward
flush_interval 10s
</match>

24224を通してきたデータを受信して、そのデータをファイルに出力する

ログ収集サーバー側
<source>
type tcp
port 24224
bind 0.0.0.0
</source>

<match apache.access>
type file
path /tmp/%Y-%m-%d-%H.log
</match>


こんなかんじ


暫くすると、ログ収集サーバの/tmp/配下にログが出力されるようになる。

設定がかなり適当な気がするが、とりあえず、またいじろう
apacheのアクセスログ以外もいろいろこの仕組みが利用できるから
かき集めてDBに書き出すような処理をやってみると色々幸せになるかも

SPOFになってなさそうなので、その試験もやろう


あとは、現サービスで実現できなかったことがこれを通して実現可能になるかだね
そこまで考えないとだめ。そこまで考えられるから楽しい・・・ってもんだ

pssh はどんくらい早い?

2011-08-16 | linux_other

pssh はどんくらい早い?

試してみる

-pオプションでパラレル数を指定するのと指定しないので、効果測定

 

▼time pssh -h ~/work/dat/g2host.dat -p 1 -i uptime

real    0m3.036s
user    0m0.274s
sys     0m0.172s
今度は、pオプションを付けない
▼ time pssh -h ~/work/dat/g2host.dat -i uptime
real    0m0.414s
user    0m0.310s
sys     0m0.186s
パラレルで走ってるから、はやいなぁ!!
こりゃべんり

 

 

 

 

 

 


psshについて

2011-08-16 | linux_other

 

psshについて

http://code.google.com/p/parallel-ssh/

pssh

 -h ホスト名一覧の入ったファイル

 -H ホスト名直接指定

 -l 実行ユーザ

 -p parallelの同時実行数

 -o 出力結果のディレクトリ指定

 -i コマンド直接指定

 -I コマンドインライン指定

 -P -Iオプション指定時は使うと良いよ

 

例:)

▼host1をls(-i)

 pssh -H host1 -i ls

 

▼host1をls(-I)

 pssh -H host1 -I -P

 ls

 ctrl+d

 

▼host1とhost2のuptimeとlsをファイルに書き込む

hostfileの中は

host1

host2

 

 pssh -H hostfile -I -P -o /tmp/result/

 ls

 ctrl+d

 

結果は、

/tmp/result/host1

/tmp/result/host2

 

この中にデータが入っている