この記事について
| 環境 | さくら共用サーバー、mecab、mecab-ipadic 2.7.0 |
|---|---|
| 目的 | 最初から入っているmecabの辞書がEUC-JPなので、UTF-8の辞書をインストールする |
| 結果 | configure –with-charset=utf8で辞書を入れる。うまくいかない場合はcsv/defをnkfでUTF-8化+dicrc書き換え後にインストール |
つまずきポイント要約
- 手順どおりでもEUC-JPで辞書がインストールされる場合がある(理由不明、バグ?)
- 解析結果が空欄ならターミナル側の文字コードがEUC-JPになっていないか確認
- 辞書情報の確認は mecab -d 辞書パス -D。charsetがutf8ならOK
(mecab本体のインストールはこちら。ただしさくら共用にはあらかじめ mecab がインストールされているので不要。php-mecab を使用する場合も不要。)
さくら共用サーバーにmecabをインストールする
さくらインターネットにはmecabが最初からインストールされている。
しかし辞書の文字コードがEUC-JPなので自分の環境では文字化けしてしまう。
これを解決するためには、UTF-8の辞書をインストールする。以下、その方法。
まず、インストール先を決める。さくら共有サーバーでインストール権限があるのは、ホームディレクトリ以下。
自分でコンパイルしたアプリケーションをインストールする場所は、ホームディレクトリ以下のlocalフォルダが一般的のよう。
0.インストールするディレクトリを作成しておく
/home/username/local/mecab-dic/ipadic-utf8 ←localディレクトリはないので新規作成
1.辞書のダウンロードと解凍を行う
(ポデローサで打ったコマンド)
cd local ←ローカルディレクトリに移動(ダウンロード先)
wget http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz ← 辞書をダウンロード
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz ←解凍
2.「configure」の実行
2-1
cd mecab-ipadic-2.7.0-20070801 ←configureファイルのあるディレクトリに移動
2-2
自前のmecabがある場合
./configure --with-charset=utf8
※「/home/username/local/lib/mecab/dic/」以下に ipadic フォルダがインストール先される
インストール先としてipadic-utf8というフォルダが作ってある場合
./configure --with-charset=utf8 --with-dicdir=~/local/mecab-dic/ipadic-utf8 ←実行。
※インストール先を、今後辞書を追加する可能性も考慮し「~/local/mecab-dic/ipadic-utf8」にする場合、フォルダはあらかじめ作っておく必要がある。
ホームディレクトリ以下に自前のmecabをインストールしている場合「––with-dicdir=~/local/mecab-dic/ipadic-utf8」を書くとmake install時にエラーになった。その場合は、インストールは指定しないことでやり過ごせる。
※「configure」というシェルスクリプトを実行することでMakefileが作成される。Makefileは、ソースファイルをコンパイルする前にインストール対象となるシステム特有の機能/情報をチェックし、チェック状況を記述したファイル。
以下の2ファイルは元々ある
Makefile.in
Makefile.am
configureを実行すると3つファイル増える
config.log
config.status
Makefile
3.インストールの実行
make ←「configure」の実施で作られた「Makefile」を元にコンパイルを実行
make install ← インストールを実行
4.動作テスト
mecab -d ~/local/mecab-dic/ipadic-utf8 ←辞書を指定
これはテストです
結果
これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
テスト 名詞,サ変接続,*,*,*,*,テスト,テスト,テスト
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
↓ターミナル経由でmecabを実行して解析結果が空欄だった場合、ターミナルの文字コードが違う可能性が考えられる。
自分の場合、辞書をUTF-8にしてもターミナルの文字列はEUC-JPに設定する必要があった。
これはテストです
これは ̾,,*,*,*,*,*
テスト ̾,,*,*,*,*,*
です ̾,,*,*,*,*,*
mecab -d ~/local/mecab-dic/ipadic-utf8 -D
これで辞書情報が確認できる。charsetがutf8であればOK
問題なく動くことを確認する。
mecabを終了するときは、「Ctrl + D」
本来ここまでの作業でUTF-8化した辞書がインストールできているはず。が、別アカウントのサクラサーバーで同じように辞書をインストールするとうまくいかない。手順どおり辞書のインストールを行うと滞りなく進むのだが、いざmecabで形態素解析を行うと、UTF-8を認識しない。EUC-JPで辞書がインストールされているようだ。
いろいろ調べたが根本的理由はわからず。バグかな?
下記の方法を行えばとりあえずUFT-8でmecabを動かせるようになります。
辞書インストール時、辞書のフォルダを解凍した後(configure実行の前)に2つのことを行う。
1.辞書フォルダ内の「csv」と「def」の拡張子のファイルをUTF-8に変換して上書きする。
テキストファイルで保存しなおしてもいいし、コマンドラインなら次のように打つ(cshellの場合)。
//まず、今の文字コードを確認
cd mecab-ipadic-2.7.0-20070801 ← 辞書フォルダ内に移動
nkf -g Noun.csv ← とりあえずひとつのファイルの文字コードを確認してみる。gオプションは文字コードを出力。この時点ではEUC-JPが返るはず。
//「csv」のファイルをUTF-8に変更
foreach f ( *csv ) ← フォルダ内のcsvファイルに対して繰り返す(fは何の文字でもいい)
nkf -w --overwrite $f ← UTF-8に変更して上書き
end ← 「foreach?」と出てるはずなので終える
//UTFになっていることを確認
foreach f ( *csv )
nkf -g $f
end
//「def」も同じようにUTF-8に変更する
foreach f ( *def )
nkf -w --overwrite $f ← UTF-8に変更して上書き
end ← 「foreach?」と出てるはずなので終える
2.dicrcファイルを書き換える
dicrcファイルは辞書フォルダ内にある
config-charset = EUC-JP ← 書き換え前
↓↓↓
config-charset = UTF-8 ← 書き換え後
この後は、configure → make → make install の順でインストールを済ませばいい。
