Win機に茶筅をインストール(2) ubuntu に ChaSen

(1) からの続きです。

■ chasen のインストール

  $ cd /usr/local/src
$ sudo tar -xvzf /home/hoge/chasen-2.4.5.tar.gz
$ cd chasen-2.4.5
$ sudo ./configure
$ sudo make
( $ make check )
$ sudo make install


このあと ipadic 辞書もインストールしてから動作確認するわけだが、次のようなエラーが出た(1回目のインストールではOKだったが最初からやり直したときにこのエラー)。
/usr/local/libexec/chasen/makemat: error while loading shared libraries: 
libchasen.so.2: cannot open shared object file: No such file or directory

そこで次のようにライブラリ参照パスを更新
  $ sudo ldconfig

そうしたらエラーが出なくなった。 ( すぐ下の [続きを読む] ボタンでこの記事のすべてを表示 )

■ Text::ChaSen (茶筅のperlモジュール)のインストール

chasen-2.4.5 バージョンのダウンロードファイルには Text::ChaSen も含まれているが、chasenのインストールで一緒にインストールはされないので 別個にインストールする。

まずは、chasen-2.4.5.tar.gz を展開した先に /perl ディレクトリができているので、cd でそこに移動する。
Makefile.PL ファイル ( /usr/local/src/chasen-2.4.5/perl/Makefile.PL ) をエディタで次のように修正する(これについてこのページがわかりやすかった)。

Makefile.PL の 修正前
use ExtUtils::MakeMaker;

WriteMakefile(
'NAME' => 'Text::ChaSen',
'VERSION_FROM' => 'ChaSen.pm',
'LIBS' => ['-lchasen']
);


Makefile.PL の 修正後 ( libchasen.a が /usr/local/lib にある場合 )
use ExtUtils::MakeMaker;

WriteMakefile(
'NAME' => 'Text::ChaSen',
'VERSION_FROM' => 'ChaSen.pm',
'LIBS' => ['-L/usr/local/lib -lchasen']
);        ↑これを挿入

あとはインストール
$ sudo perl Makefile.PL
$ sudo make
$ sudo make install


■ ipadic 辞書の UTF-8 用インストール

ipadic 辞書には、文法定義ファイル、日本語切り分けのための辞書データ、chasenに辞書の場所などを判断させるための chasenrc ファイルが含まれる。ipadic をいったんインストールしたら、普通は chasenrc ファイルを変更することがある程度で、ほかはいじらなくていい。だけど、私の場合、ときどきシステム辞書に変更を加えたくてソースをいじることがある。そして再インストールする。ソースをいじるたびに、いちいち管理者権限が必要だと面倒なので、自分のホームディレクトリにソースを展開しておく。
$ cd ~    #( cd /home/hoge と同じ)
$ mkdir src
$ cd src #(または ~/src )
$ tar -zxvf /home/hoge/ipadic-2.7.0.tar.gz
$ cd ipadic-2.7.0

このように自分はソースをホームディレクトリに展開したが、インストール先のほうはデフォルトのシステムディレクトリでいい。
ユーザー辞書も、もちろんホームディレクトリ下に入れることにする。
なお、配布ファイルに含まれているシステム辞書 *.dic とユーザー辞書の *.dic ファイルを同じフォルダにおいてもかまわないそうだ。コンパイルの頻度や実行速度だけの問題らしい。

ここで、展開先にできたソースファイルの
*.dic 、*.cha 、chasenrc ファイルを UTF-8 に変換する。
*.dic 27個 *.cha 4個 chasenrc 1個 計32ファイル
文字コードはUTF-8, 改行コードは UNIX の LF に変換する。

上記 27個の *.dic ファイルのうち、半分以上は以前に自分で編集を加えて保存していた。ipadic のバージョンは以前と変わらないので、以前の編集済み *.dic ファイル (EUCだった) も UTF-8に変換し、上記ソースコードに上書きする。

~/src/ipadic-2.7.0 で以下を実行:
$ `chasen-config --mkchadic`/makemat -i w
$ `chasen-config --mkchadic`/makeda -i w chadic *.dic
$ ./configure
$ make
$ sudo make install


インストール先を指定しなければデフォルトで *.cha ファイルなどが
  /usr/local/lib/chasen/dic/ipadic/
の下に配置される。

●ipadicのutf-8インストール エラー1 自分のあほなミス
Adj.dic
1: `(品詞 (形容詞 自立))' is not defined
1: `NIL' POS is not specified
' is not list
Makefile:450: recipe for target 'chadic.da' failed
make[1]: *** [chadic.da] Error 1
make[1]: Leaving directory '/home/hoge/source/ipadic-2.7.0'
Makefile:168: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1


原因は、事前に utf-8 変換しておくべき *.cha ファイルの変換忘れだった。*.dic (27個) *.cha (4個) chasenrc (1個) をすべて漏れなく変換しておかないといけない。

●ipadicのutf-8インストール エラー2 自分のあほなミス
$ sudo make
Making all in doc
<途中略>
parsing grammar.cha
is not listibexec/chasen/makemat: grammar.cha:7:
Makefile:447: recipe for target 'matrix.cha' failed
make[1]: *** [matrix.cha] Error 1
make[1]: Leaving directory '/home/hoge/source/ipadic-2.7.0'
Makefile:168: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1


*.cha ファイルの改行コードを CR・LF でなく LF のみにしたら解決した!
ふだんから unix 系のOSを使い慣れている人は、ファイル内の改行コードを CR・LF にするなんて思いもよらないんだろうな。そもそも、unix 内のツールを使って変換すれば、自動的に LF になるんだろうけど、私は Widows の使い慣れた文字コード変換ツールを使ったし、一瞬迷ったけど改行コードなんてどっちでもいいんじゃない?って思ったのが甘かった。
ubuntu の端末窓は今じゃ デフォルトで EUC じゃなく utf-8 表示になっているが、ChaSenが開発されたのはもっと前だから、改行コードが違っているとまともに読めないのもうなづけます。はい。

■ipadicユーザー辞書のコンパイル と chasenrc の定義

●ipadicのユーザー辞書のコンパイル
$ cd ~/mycha #ここに自作の *.dic (何個でもOk)
$ `chasen-config --mkchadic`/makeda -i w chadic *.dic
# i オプション (e:EUC-JP, s:Shift JIS, w:UTF-8)
$ chasen-config --mkchadic #(これは何をするコマンドなんだろ?)


●chasenrc を定義する

chasenrc ファイルは、ipadic インストール先ディレクトリ
( デフォルトでは /usr/local/share/chasen/dic/ipadic )
に置かれ、さらにそこの chasenrc が
/usr/local/etc にコピーされるようだ。

chasen実行時にはまず ホームの .chasen2rc を読みに行き、そのファイルがなければ、/usr/local/etc/chasenrc を読みに行く。
私は ホームの .chasen2rc を使って設定している。

chasenrc (または .chasen2rc ) では多数の項目を指定できるが、とりあえずインストール時に適切に指定すべきは、辞書のインストール場所に関する2項目である。

.chasen2rc で次のように指定した:
(文法ファイル/usr/local/share/chasen/dic/ipadic)

(DADIC chadic
/home/hoge/mycha/chadic)


文法ファイル指定行の末尾 ipadic はディレクトリ名。
DADICに指定した chadic というのは、chadic ディレクトリではなく、ファイル名。chadic.* という名の3つのファイルがそこにある。

■Chasenの実行テスト
ChaSen を使用方法として次のようないくつかのパターンがある:

$ chasen -i w

とタイプしてから、続けて何か日本語文、Enter。
(最後に 私は Ctrl-C で終了するけど、それでいいのかな?)

$ echo "明日はもっと良くなる、きっと" | chasen -i w


事前に作っておいた日本語テキストファイルを ChaSen に渡して解析させる:
$ chasen -i w test-utf8.txt 

(# ファイルはUTF-8で保存しておく)
Perl スクリプトのなかで ChaSen を使用する(スクリプの書き方は下を参照):
$ perl -w ~/test_utf8.pl


==== test_utf8.pl スクリプトの中身 ====
#!/usr/bin/perl

use Text::ChaSen;

Text::ChaSen::getopt_argv('chasen-perl', '-iw');
$str = Text::ChaSen::sparse_tostr("日本語の文字列");

print "$str\n\n";

exit;
#


●動作テストのエラー Text::ChaSen側のちょっとした問題

エラーメッセージ:
chasen: /usr/local/lib/chasen/dic/ipadic/cforms.cha:9-21: no basic form


「 chasen: ~ no basic form」は正しくUTF-8化できていない場合だとのネット情報。実は、最初 perlスクリプトで chasen のオプションを渡すために次のように記述していたが、
Text::ChaSen::getopt_argv('chasen-perl', '-i w');

-i と w の間を詰めたらエラーが消えた。
-i と次の指定文字 w/s/e/a の間は、空白をあけても詰めてもコマンド行では大丈夫なのに、perlスクリプトから 呼び出すときは詰めないとうまくいかないようだ。

次の記事 (3) では、ChaSen を2種類の文字コードで使用できるよう Cygwin にインストールしたときについて。
スポンサーサイト
Comment (-)