形態素解析エンジンmecabのjavaポーディングライブラリSenを使う

Senについて
>Sen は、Java で実装された形態素解析器で、工藤拓さんによりオープンソース(LGPL)で開発されている形態素解析器MecabをJavaへポーティングしたライブラリです。ChaSen?? やMecab等のC/C++で実装された形態素解析器をJavaから利用する場合、JNIを利用する必要がありますが、JNIを利用すると動作が不安定に なることがあり、また、JNIのオーバヘッドによりパフォーマスが低下します。Senは100% Javaで記述されているため、高信頼かつ高パフォーマンスを得ることができます(注:ChaSen??やMecabが安定していない、パフォーマスが低いという訳ではありません。JNIの特性上、そうなるということです)。
ということらしい。
Mecabの最終更新よりも若干古い(2006-03-28)のが気になるが、
とりあえず公式サイトのリンクからダウンロードして使ってみた。
  $ unzip sen-1.2.2.1.zip
  $ cd unzip sen-1.2.2.1
  $ ant
  $ chmod +x bin/sen.sh
  $ ./bin/sen.sh
  done.
  Please input Japanese sentence:
  [INFO] Dictionary - token file = ./dic/token.sen
  [INFO] Dictionary - time to load posInfo file = 49[ms]
  [INFO] Dictionary - double array trie dictionary = ./dic/da.sen
  [INFO] DoubleArrayTrie - loading double array trie dict = ./dic/da.sen
  [INFO] DoubleArrayTrie - loaded time = 1.952[ms]
  [INFO] Dictionary - pos info file = ./dic/posInfo.sen
  [INFO] Dictionary - time to load pos info file = 0[ms]
  [INFO] Tokenizer - connection file = ./dic/matrix.sen
  [INFO] Tokenizer - time to load connect cost file = 1431[ms]
  すもももももももものうち
  すもも  (すもも)        名詞-一般(0,3,3)        スモモ  スモモ
  も      (も)    助詞-係助詞(3,4,1)      モ      モ
  もも    (もも)  名詞-一般(4,6,2)        モモ    モモ
  も      (も)    助詞-係助詞(6,7,1)      モ      モ
  もも    (もも)  名詞-一般(7,9,2)        モモ    モモ
  の      (の)    助詞-連体化(9,10,1)     ノ      ノ
  うち    (うち)  名詞-非自立-副詞可能(10,12,2)   ウチ    ウチ
  ^C
  $ 


luceneとの連携に期待したが、lucene-jaのコードはどこだろう?
luceneはバージョン3までいってるので対応してるか不明。
とりあえず、これからもう少し詳しい使い方を調べてみる。

形態素解析エンジンmecabをjavaから使う @ Ubuntu 10.0.4

形態素解析エンジンMeCabをjavaから使ってみた。

libmecab-javaは、swigによるmecabのjava binding。
辞書はIPA。
詳しくは、 以下を参照。
http://mecab.sourceforge.net/bindings.html

動作確認のコードとコマンドは以下の通り
  $ sudo aptitude install
  $ cat TestMecab.java 
  import org.chasen.mecab.MeCab;
  import org.chasen.mecab.Tagger;
  import org.chasen.mecab.Node;
  
  public class TestMecab {
      static {
          try {
              System.loadLibrary("MeCab");
          } catch (UnsatisfiedLinkError e) {
              System.err.println("Cannot load the example native code.\nMake sure your LD_LIBRARY_PATH contains \'.\'\n" + e);
              System.exit(1);
          }
      }
     
      public static void main(String[] argv) {
          System.out.println(MeCab.VERSION);
          Tagger tagger = new Tagger();
          String str = "太郎は二郎にこの本を渡した。";
          System.out.println(tagger.parse(str));
          Node node = tagger.parseToNode(str);
          for (;node != null; node = node.getNext()) {
              System.out.println(node.getSurface() + "\t" + node.getFeature());
          }
          //System.out.println ("EOS\n");
      }
  }
  $ javac -cp /usr/share/java/MeCab.jar   TestMecab.java
  $ java  -cp /usr/share/java/MeCab.jar:. TestMecab
  0.98
  太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
  は      助詞,係助詞,*,*,*,*,は,ハ,ワ
  二郎    名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
  に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
  この    連体詞,*,*,*,*,*,この,コノ,コノ
  本      名詞,一般,*,*,*,*,本,ホン,ホン
  を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
  渡し    動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
  た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
  。      記号,句点,*,*,*,*,。,。,。
  EOS
  
          BOS/EOS,*,*,*,*,*,*,*,*


これで動作確認OK。

centosでgmailを使ったメール送信

設定で若干手間取ったので、自分用にメモ。

基本的に以下のサイトの通りの手順
» Postfix から Gmail 経由でメールを送る linux.matchy.net: 〜Linuxで遊ぼう!〜
  1. sendmailはインストールしていたら削除しておく
  2. /etc/posfix/main.cfを編集
  3. 2.で指定した場所(smtp_sasl_password_maps)にパスワードファイルを作成
  4. フォーマットは「[smtp.gmail.com]:587 ユーザ@gmail.com:パスワード」
  5. 3.のテキストファイルからpostmapコマンドでHASHファイル作成
  6. postfix再起動
/etc/postfix/main.cfの中身は以下。
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
実行したコマンドは以下の通り。
% sudo yum remove sendmail
% sudo yum install postfix cyrus-sasl-plain
% sudo vi /etc/postfix/main.cf
% sudo vi /etc/postfix/sasl_passwd
% sudo chmod 400 /etc/postfix/sasl_passwd
% sudo postmap /etc/postfix/sasl_passwd
% sudo /etc/init.d/postfix restart

というわけで、無事にメールが届きました。
携帯にも届いた。文字化けも無し。

経堂のラーメン英(ひで)で正統派豚骨ラーメンを喰らう

ラーメン 経堂

大きな地図で見る

暑い日が続いてるけど、熱いラーメンが食べたくて、
わざわざ 隣駅(経堂)までいって豚骨ラーメンを食べた。

焼豚が独特の香りでとてもうまい。
スープも正統派豚骨って感じで非常においしくいただきました。

食べ終わる頃には汗だくになってしまったけど、
帰るときに無料でソフトクリームのサービスもありました。

もうちょっと涼しくなったらまた食べにいこう。

Apache luceneで日本語ファイル(UTF-8)の検索 on MacOSX

まずは普通にIndexの作成と検索の実行をしてみたら
文字化けしてうまくHITしなかった。
/Users/satoshi/src/lucene-3.0.2% rm -rf index/
/Users/satoshi/src/lucene-3.0.2% java -cp lucene-core-3.0.2.jar:lucene-demos-3.0.2.jar org.apache.lucene.demo.IndexFiles src
Indexing to directory 'index'...
adding src/demo/org/apache/lucene/demo/DeleteFiles.java
adding src/demo/org/apache/lucene/demo/FileDocument.java
adding src/demo/org/apache/lucene/demo/html/Entities.java
adding src/demo/org/apache/lucene/demo/html/HTMLParser.java
adding src/demo/org/apache/lucene/demo/html/HTMLParser.jj
adding src/demo/org/apache/lucene/demo/html/HTMLParserConstants.java
adding src/demo/org/apache/lucene/demo/html/HTMLParserTokenManager.java
adding src/demo/org/apache/lucene/demo/html/ParseException.java
adding src/demo/org/apache/lucene/demo/html/ParserThread.java
adding src/demo/org/apache/lucene/demo/html/SimpleCharStream.java
adding src/demo/org/apache/lucene/demo/html/Tags.java
adding src/demo/org/apache/lucene/demo/html/Test.java
adding src/demo/org/apache/lucene/demo/html/Token.java
adding src/demo/org/apache/lucene/demo/html/TokenMgrError.java
adding src/demo/org/apache/lucene/demo/HTMLDocument.java
adding src/demo/org/apache/lucene/demo/IndexFiles.java
adding src/demo/org/apache/lucene/demo/IndexHTML.java
adding src/demo/org/apache/lucene/demo/README
adding src/demo/org/apache/lucene/demo/SearchFiles.java
adding src/jsp/configuration.jsp
adding src/jsp/footer.jsp
adding src/jsp/header.jsp
adding src/jsp/index.jsp
adding src/jsp/README.txt
adding src/jsp/results.jsp
adding src/jsp/WEB-INF/web.xml
Optimizing...
621 total milliseconds
/Users/satoshi/src/lucene-3.0.2% java -cp /usr/libexec/lucene/3.0.2/lucene-core-3.0.2.jar:/usr/libexec/lucene/3.0.2/lucene-demos-3.0.2.jar org.apache.lucene.demo.SearchFiles
Enter query: 
あああ
Searching for: "�� �� ��"
0 total matching documents
Press (q)uit or enter number to jump to a page.
^C%
/Users/satoshi/src/lucene-3.0.2% cat src/demo/org/apache/lucene/demo/README
dragon ash
independent
日本語
あああ
東京%

javaの文字コードがshift-jisになってるのが原因らしい。
以下のサイトを参考に_JAVA_OPTIONS=-Dfile.encoding=UTF-8を設定してみた。
Mac OS X で Java SE 6 を使う : エンコーディングを UTF-8 で使いたい - Masaki Katakai's Weblog
export _JAVA_OPTIONS="-Dfile.encoding=UTF-8"
というわけで、INDEXの作り直しして、再度検索してみると、、、
/Users/satoshi/src/lucene-3.0.2% rm -rf index/
/Users/satoshi/src/lucene-3.0.2% java -cp lucene-core-3.0.2.jar:lucene-demos-3.0.2.jar org.apache.lucene.demo.IndexFiles src
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
Indexing to directory 'index'...
adding src/demo/org/apache/lucene/demo/DeleteFiles.java
adding src/demo/org/apache/lucene/demo/FileDocument.java
adding src/demo/org/apache/lucene/demo/html/Entities.java
adding src/demo/org/apache/lucene/demo/html/HTMLParser.java
adding src/demo/org/apache/lucene/demo/html/HTMLParser.jj
adding src/demo/org/apache/lucene/demo/html/HTMLParserConstants.java
adding src/demo/org/apache/lucene/demo/html/HTMLParserTokenManager.java
adding src/demo/org/apache/lucene/demo/html/ParseException.java
adding src/demo/org/apache/lucene/demo/html/ParserThread.java
adding src/demo/org/apache/lucene/demo/html/SimpleCharStream.java
adding src/demo/org/apache/lucene/demo/html/Tags.java
adding src/demo/org/apache/lucene/demo/html/Test.java
adding src/demo/org/apache/lucene/demo/html/Token.java
adding src/demo/org/apache/lucene/demo/html/TokenMgrError.java
adding src/demo/org/apache/lucene/demo/HTMLDocument.java
adding src/demo/org/apache/lucene/demo/IndexFiles.java
adding src/demo/org/apache/lucene/demo/IndexHTML.java
adding src/demo/org/apache/lucene/demo/README
adding src/demo/org/apache/lucene/demo/SearchFiles.java
adding src/jsp/configuration.jsp
adding src/jsp/footer.jsp
adding src/jsp/header.jsp
adding src/jsp/index.jsp
adding src/jsp/README.txt
adding src/jsp/results.jsp
adding src/jsp/WEB-INF/web.xml
Optimizing...
682 total milliseconds/Users/satoshi/src/lucene-3.0.2% java -cp /usr/libexec/lucene/3.0.2/lucene-core-3.0.2.jar:/usr/libexec/lucene/3.0.2/lucene-demos-3.0.2.jar org.apache.lucene.demo.SearchFiles
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
Enter query: 
東京
Searching for: "東 京"
1 total matching documents1. src/demo/org/apache/lucene/demo/README
Press (q)uit or enter number to jump to a page.
^C%

と、文字化けせずに無事に検索できました。
ちなみに、手持ちのUbuntu環境だと、特に_JAVA_OPTIONSで文字コードを設定しなくても
日本語ファイル(UTF-8)のIndexingと検索に成功しました。
なんでMacはShitf-JISなんだろうな。。。


検索エンジンApache lucene 3.0.2をインストール+サンプルをお試し

アグレッシブエンジニア: 検索エンジンApache Luceneをインストールしてサンプルを動かしてみるを参考にして、最新版の3.0.2を動かしてみた。

参考:
Apache Lucene - Building and Installing the Basic Demo

結局のところ、いつもはまるのは、CLASSPATHのところなんだけど。
$ wget http://ftp.riken.jp/net/apache//lucene/java/lucene-3.0.2.tar.gz
$ tar xvzf lucene-3.0.2.tar.gz
$ cd lucene-3.0.2/
$ ant && ant war-demo
$ java -cp lucene-core-3.0.2.jar:lucene-demos-3.0.2.jar org.apache.lucene.demo.IndexFiles src
$ java -cp lucene-core-3.0.2.jar:lucene-demos-3.0.2.jar org.apache.lucene.demo.SearchFiles
無事に検索できました。
/home/satoshi/src/lucene-3.0.2% java -cp lucene-core-3.0.2.jar:lucene-demos-3.0.2.jar org.apache.lucene.demo.SearchFiles   
Enter query:
title
Searching for: title
7 total matching documents
1. src/jsp/header.jsp
2. src/demo/org/apache/lucene/demo/HTMLDocument.java
3. src/demo/org/apache/lucene/demo/SearchFiles.java
4. src/jsp/results.jsp
5. src/demo/org/apache/lucene/demo/html/HTMLParser.jj
6. src/demo/org/apache/lucene/demo/html/Test.java
7. src/demo/org/apache/lucene/demo/html/HTMLParser.java
Press (q)uit or enter number to jump to a page.
q
前は、日本語を含む文章の動作確認とか、カテゴリ絞り込みとかやろうとして
断念してたので、次こそはもうちょっと先に進めてみたいと思う。

今度こそ完全に満足できる zshrc に挑戦

今まで何度も挑戦して、中途半端な状態にあったbash -> zsh 移行を
今度こそ本腰を据えてやってみたので、そのログ。

結局不満なのは2点
  • 色設定
    • MacやUbuntuともに満足できる色設定
  • Tabを押しすぎて補完候補を通り過ぎてしまったイライラ解消
 まずは、以下のサイトの内容をベースに変更
【コラム】漢のzsh (22) もってけ泥棒! コピペで始めるzsh - リターンズ | エンタープライズ | マイコミジャーナル
欲しかったのは色設定部分だけだけど、遠慮なくもってけ泥棒してみた。

でも、lsしたときの青が見難いので、以下のサイトをもとに変更
Mac zshのカラー設定を変更した | goryugo, addicted to Evernote
【コラム】漢のzsh (9) 世界はモノクロからカラーへ | エンタープライズ | マイコミジャーナル
ディレクトリの青色表示はやめて、結局緑にしました
ついでに、lsに-Fオプションを追加

tab連打で候補がすぎてしまったときのイライラ解消法
Did you reboot?:zshキーバインド Shift-tabで補完候補を逆戻りするように設定 - livedoor Blog(ブログ)

だいたいこれで自分の中では満足行ける.zshrcが書けた。
今まで色々我慢してたけど、これでHappy zshライフを満喫予定。

screen で256色表示させる(Ubuntu) : Serendip - Webデザイン・プログラミング
最後に.screenrcに256色設定して終了。


結局現時点で満足のいく.zshrcはgithubに登録しておいたので
興味がある人はご自由にどうぞ。