UbuntuにUTF-8版のcabochaを簡単にインストールする方法

 環境はUbuntu 9.04 Desktop-jaです.

mecabのインストール

 aptにutf8版の辞書も用意されていました.

$ sudo apt-get install mecab mecab-utils mecab-ipadic-utf8

 何故かjuman-dicも入るし,utf8ではないipadicも入る対象に入ってしまうが,気にしない.

動作確認
$ mecab
すもももももももものうち
すもも	名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も	助詞,係助詞,*,*,*,*,も,モ,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
も	助詞,係助詞,*,*,*,*,も,モ,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
うち	名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

 もちろんターミナルはUTF-8です.apt-getのみでここまで来れたのは素晴らしい.

cabochaのインストール

 http://cl.naist.jp/~eric-n/ubuntu-nlp/dists/dapper/all/ が各種NLPパッケージのリポジトリ.サイトに設定方法が書いてありますが,下記に最低限のステップを.

リポジトリの追加

 /etc/apt/source.listに以下を追記.

deb http://cl.naist.jp/~eric-n/ubuntu-nlp dapper all
署名情報の取得とパッケージリストの更新
$ wget http://cl.naist.jp/~eric-n/ubuntu-nlp/8ABD1965.gpg -O- | sudo apt-key add -
$ sudo apt-get update
パッケージの確認(オプション作業)
$ apt-cache search cabocha
cabocha-dic-utf8 - Dictionaries of Cabocha (UTF-8)
cabocha-dic - Dictionaries of Cabocha (EUC-JP)
libcabocha2 - Libraries of Cabocha
libcabocha-dev - Header files of Cabocha
cabocha - A Japanese dependency/case structure analysis system
お待ちかねのインストール
$ sudo apt-get install cabocha cabocha-dic-utf8
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  cabocha-dic crf++-doc libcabocha2 libcrf++0 libmecab1
以下のパッケージが新たにインストールされます:
  cabocha cabocha-dic cabocha-dic-utf8 crf++-doc libcabocha2 libcrf++0
以下のパッケージはアップグレードされます:
  libmecab1
アップグレード: 1 個、新規インストール: 6 個、削除: 0 個、保留: 4 個。
61.4MB のアーカイブを取得する必要があります。
この操作後に追加で 188MB のディスク容量が消費されます。
続行しますか [Y/n]?

 Yes以外の選択肢はありません.

動作確認
$ cabocha
すもももももももものうち
すももも-D    
    ももも---D
      ももの-D
          うち
EOS

 これだとNLP処理屋としては物足りないので-f1オプションをつけてみる.

$ cabocha -f1
すもももももももものうち
* 0 1D 0/1 0.886878
すもも	名詞,一般,*,*,*,*,すもも,スモモ,スモモ	O
も	助詞,係助詞,*,*,*,*,も,モ,モ	O
* 1 3D 0/1 0.000000
もも	名詞,一般,*,*,*,*,もも,モモ,モモ	O
も	助詞,係助詞,*,*,*,*,も,モ,モ	O
* 2 3D 0/1 0.000000
もも	名詞,一般,*,*,*,*,もも,モモ,モモ	O
の	助詞,連体化,*,*,*,*,の,ノ,ノ	O
* 3 -1D 0/0 0.000000
うち	名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ	O
EOS

感想?

 NAIST様様.NLPの時代がキタね.UTF-8の進出も素晴らしい.
 まさか,apt-cache search mecabUTF-8版の辞書が出てくるとは思わなかった.

 cabochaは一昔前ですと,各種関連パッケージも含め,ソースコードから入れないといけなかったわけですが.まさかdebが登場するとは……鼻血モノです.

オブジェクトのソケット通信

 オブジェクトを送受信するソケット通信のサンプルコードが見つからなかったので,ここで晒します.
 「形態素解析を高速に処理&クライアント側に形態素解析器環境不要」を実現したかったので,``ArrayList''を送受信するオブジェクトにしています.

HelloWorldMultiThreadServer.java

import java.net.ServerSocket;
import java.net.Socket;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class HelloWorldMultiThreadServer {
  public static void main(String argv[]) {
    try {
      // サーバーソケットの生成
      ServerSocket serverSocket = new ServerSocket(5555);

      // メインループ
      while(true) {
        try {
          System.out.println("クライアントからの接続をポート5555で待ちます");
          Socket s = serverSocket.accept();
          ArrayList<String> data = new ArrayList<String>();
          
          // 受信
          ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
          data = (ArrayList<String>)(ois.readObject());
          
          // データ加工(ここでは頭に0を付与
          for(int i=0; i<data.size(); i++){
            data.set(i, "0" + data.get(i));
          }
          
          // 返信
          ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
          oos.writeObject(data);
          
          // ソケット削除
          s.close();
          
        } catch (Exception ex) {
          ex.printStackTrace();
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

HelloWorldSocketClient.java

import java.net.ServerSocket;
import java.net.Socket;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class HelloWorldSocketClient {
  public static void main(String[] args){
    ArrayList<String> data = new ArrayList<String>();
    data.add("サンプルテキスト1");
    data.add("サンプルテキスト2");
    
    try{
      // ソケットを生成
      Socket socket = new Socket("localhost", 5555);
      
      // オブジェクト出力ストリーム
      ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );
      // 書き出し
      oos.writeObject(data);
      
      // オブジェクト入力ストリーム
      ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );
      data = (ArrayList<String>)( ois.readObject() );
      
      // 出力
      for(String line : data){
        System.out.println(line);
      }

      // ソケットを削除
      socket.close();
    } catch(Exception e){
      e.printStackTrace();
    }
  }
}

Windows上でJavaをUTF8で開発

 原則UTF-8でデータも保存するし,コーディングもするのですが,先日ちょっと躓いたのでメモ.

 Windows環境ではJavaは標準でSHIFT-JISで読み書きしてくれます.
 コードもSHIFT-JISで書かれていることを期待しているので,UTF-8で書いた時のコンパイルはこんな感じ.

$ javac -encoding utf8 Sample.java

 eclipseで開発・テスト実行していた時は問題なかったんですが,jar化してコマンドプロンプトから実行したら文字化け.
 どうもコンパイル時にUTF-8を指定していても,やはり読み書きはSHIFT-JISらしい.

 eclipseの起動時の引数を参考に解決できました.

$ java -Dfile.encoding=UTF-8 -jar Sample.jar

 で文字化けせずに動きます.
 いや,まぁ……テキスト読み込み処理でUTF-8を指定してあげればいいんですけど.

ZoteroでGoogle Scholarを使う方法(エラー解決)

 via.http://www.zotero.org/

 Firefox PortableにZoteroを入れました.

問題発生

 で.
 Google Scholarの検索結果から一括して登録できると知って喜び勇んでアクセスしたのですが.
 エラーが発生して取り込めない.

解決策

 Scholar設定から,「表示言語の設定」の「Google のメニューやテキストの言語」を英語にしてください.
 日本語だとエラーがでますが,英語だと大丈夫でした(日本語の検索結果もOK!).

SiMemos 0.9β公開しました

 SiNotesをインスパイアして作ったSiMemosを公開しました.
 仕様はオリジナルでも何でもないので,BSDライセンスあたりでコードを公開しようと思ったのですが,自分のプログラミングスキルに不安と恥らいがあるのでまだ公開しません.
 せめてJavadocを付与したら公開します.

 開発の動機は,SiNotesのデータディレクトリがレジストリに登録されて複数使い分けることができなかったこと(+開発一時凍結&日本語一部非対応)と,Java 1.6.10の新しいルック&フィールを使いたかったため.JavaのSwing勉強兼Linux上でも動くアプリにしたかった,と言うのもありますが.

 こちらからダウンロードできますので是非.
 http://syo.jpn.org/20081121SiMemos_0_9.html

普通のルック&フィール

Nimbusルック&フィール

NetBeansのTomcatのmanager roleのパスワード

 先日リリースされたjdk 1.6.10にアップデートした際,NetBeansも再インストールしてみた.

 が,NetBeansにバンドルされているTomcatが起動できない.
 Manager RoleのIDとパスワードを教えろ,とのこと.

 インストール先のconf/tomcat-users.xmlを見ると,全部コメントアウトされている.
 それを修正して再起動……ダメ.

 途方にくれて,自分でTomcat入れてそっちに接続するかぁ……と思った矢先に有益なページを発見.


/jakarta-tomcat-5.5.9_base/conf/tomcat-users.xml

 にあるとのこと.
 私のWindows XP環境では以下にありました.IDが"ide"で設定されています.これをNetBeans上のサーバ設定から設定すればOK.

C:/Documents and Settings//.netbeans/6.1/apache-tomcat-6.0.16_base/conf

 何気に日本語では情報が見つからなかったので書いてみました.一助となれば幸いです.

Google Docsが使えないGoogle Chrome

 私が遭遇した不具合を箇条書き.

コメントを挿入してタイプしてもコメント外になる

Docでの現象.

Ctrl+Mでコメントを挿入し,そのままコメント内容をタイプしようとすると,コメントエリアではなく地のエリアに入力されてしまう.

保存されたりされなかったり

Presentationでの現象.

スライド一覧のタイトル部分が更新されていなかったら,保存できていないと見ていいです.開きなおしたら,全部まっ白でした.
スライドショーで確認できるので,スライドショーで表示されなかったら,保存されていないと見ていいでしょう.泣く泣くFirefox3で打ち直しました.

Docでも保存されていなかったかもしれません.怖くて開いてませんが.