mecab
さくらVPSにphp-mecabを入れたときの覚書手順
1.mecab を入れる
2.php-mecab を入れる
参考にしたサイト
phpでmecab
手順は参考サイトどおり。自分なりの捕捉を入れた。
ソースコードをインストールする場所に移動
-------------------------------------------------
cd /usr/local/src/
-------------------------------------------------
ダウンロードと解凍
-------------------------------------------------
wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz
tar xvf mecab-0.996.tar.gz
-------------------------------------------------
解凍したディレクトリに移動
-------------------------------------------------
cd mecab-0.996
-------------------------------------------------
configure で Makefile をつくる
-------------------------------------------------
sudo ./configure --enable-utf8-only
-------------------------------------------------
※「configure」というシェルスクリプトを実行することで、ソースファイルをコンパイルする前に、インストール対象となるシステム特有の機能/情報をチェックし、チェック状況を記述したMakefileが作成される。
コンパイルとインストール
-------------------------------------------------
sudo make
sudo make install
-------------------------------------------------
この時点で mecab を実行すると 辞書がないエラーが出る
-------------------------------------------------
# mecab
param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc
-------------------------------------------------
バージョン確認だけならエラーは出ない
-------------------------------------------------
# mecab -v
mecab of 0.996
-------------------------------------------------
ipa辞書のインストール
ipa辞書のダウンロード先をつくる
-------------------------------------------------
cd /usr/local/src/mecab-0.996/
mkdir library
-------------------------------------------------
ダウンロードして ipa辞書を解凍
--------------------------------------------------
tar xvf mecab-ipadic-2.7.0-20070801.tar.gz
--------------------------------------------------
configure で Makefile をつくる
--------------------------------------------------
./configure --with-charset=utf8
--------------------------------------------------
コンパイルとインストール
-------------------------------------------------
sudo make
sudo make install
-------------------------------------------------
動作確認する
-------------------------------------------------
mecab
すもももももももものうち
-------------------------------------------------
任意。
辞書「mecab-ipadic-neologd」のインストール
(ipa 辞書を先にインストールしておかないと効果は薄い?要確認)
-------------------------------------------------
cd /usr/local/src/mecab-0.996/
mkdir library
cd /usr/local/src/mecab-0.996/library
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd /usr/local/src/mecab-0.996/library/mecab-ipadic-neologd/
./bin/install-mecab-ipadic-neologd -n
-------------------------------------------------
動作確認が終了したら続いて、php-mecab のインストール
-------------------------------------------------
cd /usr/local/src/
wget https://github.com/rsky/php-mecab/archive/master.zip
unzip master.zip
cd php-mecab-master/mecab
phpize
(sudo ./configure
↑だとエラーが出た、configure: error: mecab-config not found)
sudo ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
sudo make
sudo make install
-------------------------------------------------
./configure の途中で re2c が無いみたいなエラーが出たのでインストールする
re2c をインストール
-------------------------------------------------
wget http://jaist.dl.sourceforge.net/project/re2c/re2c/0.13.7.5/re2c-0.13.7.5.tar.gz
tar zxvf re2c-0.13.6.tar.gz
cd re2c-0.13.6
./configure
make
make install
-------------------------------------------------
再び./configure からやり直し
-------------------------------------------------
sudo ./configure
sudo ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
sudo make
sudo make install
-------------------------------------------------
シンボリックリンクの作成
-------------------------------------------------
sudo ln -s /usr/lib64/php/modules/mecab.so /etc/php.d
-------------------------------------------------
php.iniの編集
-------------------------------------------------
vim /etc/php.ini
-------------------------------------------------
/etc/php.ini
-------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; If you wish to have an extension loaded automatically, use the following
; syntax:
;
; extension=modulename.extension
;
; For example, on Windows:
;
; extension=msql.dll
;
; ... or under UNIX:
;
; extension=msql.so
;
; ... or with a path:
;
; extension=/path/to/extension/msql.so
;
; If you only provide the name of the extension, PHP will look for it in its
; default extension directory.
;;;;
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.
;;;;
;php-mecab を動かす記述
extension=mecab.so
;mecab-php の辞書のパス
mecab.default_dicdir="/usr/local/lib/mecab/dic/mecab-ipadic-neologd"
-------------------------------------------------
apacheの再起動
-------------------------------------------------
service httpd restart
-------------------------------------------------
動作確認
-------------------------------------------------
php -r 'phpinfo();' | grep 'mecab' -i
-------------------------------------------------
以下のようになっていれば問題ない。
-------------------------------------------------
mecab
MeCab Support => enabled
MeCab Library => 0.996 => 0.996
mecab.default_dicdir => no value => no value
mecab.default_rcfile => no value => no value
mecab.default_userdic => no value => no value
-------------------------------------------------
test.php
辞書の読み込みをしてないとエラーになる
-------------------------------------------------
<?php
$str = 'この焼肉は焼きにくい';
$mecab = new Mecab();
$nodes = $mecab->parseToNode($str);
foreach ($nodes as $n)
{
echo $n->getSurface() . "
";
echo $n->getFeature() . "
";
}
?>
-------------------------------------------------
使用する辞書を PHP で指定する場合
-------------------------------------------------
$options = array('-d', '/usr/local/lib/mecab/dic/mecab-ipadic-neologd');
$mecab = new MeCab_Tagger($options);
-------------------------------------------------
カテゴリー:CentOS, mecab, PHP, unix
php-mecab を使用してるページがエラーしか表示されなくなった。
表示されたエラー
---------------------------------------------------
Fatal error: Class 'Mecab' not found in /home/username/www/xxxx.html on line 20
---------------------------------------------------
推測だが、さくらインターネットの PHP のバージョンが勝手に変更されたのが原因だと思う。phpinfo で mecab が表示されない。つまり、php-mecab が認識されていない。
解決用法、mecab および php-mecab を入れ直した。
入れ直し時に注意すること。
・mecab と php-mecab の古いファイルは念のため削除しておく。上書きされるかと思ったがうまくいかなかった。(これがうまくいかない原因だったかは不明)
・php-mecab のインストール時に php のバージョンを指定する箇所があるので新しいバージョンに合わせる。
・さくらにデフォルトインストールの mecab に問題があった場合解決が難しいので、自前の mecab を local 領域にいれて使用したほうが解決しやすい。(今回、デフォルト → 自前 に変更した)
カテゴリー:mecab, PHP, さくらインターネット
初期設定のmecabは半角記号がなぜか、名詞,サ変接続になる
-------------------------------
; 名詞,サ変接続,*,*,*,*,*
\ 名詞,サ変接続,*,*,*,*,*
-------------------------------
サ変接続の名詞とは、サ変動詞に繋げることができる名詞のこと。
後ろに「~される」「~した」「~する」「~せよ」などが続いても違和感の無い名詞。「後悔」する、「録画」した、「撮影」される、といった言葉。
記号は記号であって、サ変接続の名詞ではないので、これでは困る。
半角記号を「記号」と認識してしまうのは、半角記号がmecabにとって未定義の文字(未知語)で、未知語の記号を「名詞,サ変接続」に分類するように未知語用のファイルに定義されているからである。
なので、未知語用のファイルをいじれば、問題は解決する。
解決方法
1.未知語用のファイルを開く
ファイル名は、unk.def。
(unk は unknown の略。拡張子「.def」は定義ファイル。(Define))
ここにあった。(インストール前の辞書ディレクトリ内)
--------------------------------------------
/home/username/local/mecab-ipadic-2.7.0-20070801
--------------------------------------------
開くと、こんな感じで未知語の処理方法が書いてある。
--------------------------------------------
KANJI,1292,1292,12649,名詞,固有名詞,組織,*,*,*,*
KANJI,1289,1289,17340,名詞,固有名詞,人名,一般,*,*,*
KANJI,1288,1288,15295,名詞,固有名詞,一般,*,*,*,*
SYMBOL,1283,1283,17585,名詞,サ変接続,*,*,*,*,*
NUMERIC,1295,1295,27386,名詞,数,*,*,*,*,*
ALPHA,1285,1285,13398,名詞,一般,*,*,*,*,*
ALPHA,1293,1293,18706,名詞,固有名詞,地域,一般,*,*,*
ALPHA,1292,1292,13835,名詞,固有名詞,組織,*,*,*,*
--------------------------------------------
「SYMBOL」の部分を変更。
変更後
--------------------------------------------
SYMBOL,1283,1283,17585,記号,一般,*,*,*,*,*
--------------------------------------------
2.辞書を再インストール
辞書を作り直す。
mecab-dict-indexを実行して再作成。
--------------------------------------------
/home/username/local/libexec/mecab/mecab-dict-index
--------------------------------------------
辞書再作成の詳細はこちらの真ん中より下らへんを参照。
参考ページ
こちら1 こちら2
カテゴリー:mecab
テキストファイルのpythonスクリプトでcabochaがエラーになったときの対処法。
ターミナルではpythonでcabochaが動かせるが、テキストファイルに記述したpythonスクリプトからcabochaを実行するとエラーになった。
【環境と前提】
・さくらスタンダードプラン
・/home/username/localに自前のpython2.7がインストール済み
・/home/username/localにcabochaがインストール済み
・テキストファイルのpythonスクリプトでのみ問題発生。
エラー内容(Apacheのエラーログ)
------------------------------------------------------
Traceback (most recent call last):
File "python_test2.cgi", line 5, in
import CaboCha
File "/home/username/local/lib/python2.7/site-packages/CaboCha.py", line 26, in
CaboCha = swig_import_helper()
File "/home/username/local/lib/python2.7/site-packages/CaboCha.py", line 22, in swig_import_helper
mod = imp.load_module('_CaboCha', fp, pathname, description)
ImportError: Shared object "libcabocha.so.4" not found, required by "_CaboCha.so"
------------------------------------------------------
テキストのpythonスクリプトだと、共有オブジェクトが見つからないよう。パスが通ってないということだろう。
解決方法
スクリプトの先頭の記述を次のように変更した。
------------------------------------------------------
#!/home/username/local/bin/python
------------------------------------------------------
↓↓↓
------------------------------------------------------
#! /usr/bin/env -S LD_LIBRARY_PATH=/home/workroom/local/lib /home/workroom/local/bin/python
------------------------------------------------------
参考:こちらのページの最後ら辺
カテゴリー:mecab, Python, さくらインターネット
さくら共用サーバーにcabochaをインストールした際の覚書。
cabochaのインストールや利用方法についてはこちら
前提として、mecab0.97が入っている。
インストール場所は、/home/username/local とする。
1.CRF++をインストールする
----------------------------------------------------
//ダウンロード。「https」だとエラーが出る。
wget http://crfpp.googlecode.com/files/CRF%2B%2B-0.58.tar.gz
tar xzvf CRF++-0.58.tar.gz //解凍
//「$HOME」が「~(チルダ)」だとエラーが出る。
./configure --prefix=$HOME/local
make install //インストール。
----------------------------------------------------
2.cabochaをインストールする
最新版であった「cabocha-0.67」をダウンロードした。
MeCab (0.993以降)が必要と記述されていたが、構わず進めた。
----------------------------------------------------
wget http://cabocha.googlecode.com/files/cabocha-0.67.tar.bz2
----------------------------------------------------
続けて、以下のコマンド。
----------------------------------------------------
tar xzvf cabocha-0.67.tar.bz2
cd cabocha-0.67
./configure --prefix=$HOME/local --with-charset=utf8 --enable-utf8-only LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" --with-mecab-config=$HOME/local/bin/mecab-config
make
make install
----------------------------------------------------
すると、make installのところでエラー発生!
エラー内容
----------------------------------------------------
morph.cpp: In member function 'virtual bool CaboCha::MorphAnalyzer::parse(CaboCha::Tree*) const':
morph.cpp:197: error: 'mecab_lattice_new' was not declared in this scope
morph.cpp:203: error: 'MECAB_ALLOCATE_SENTENCE' was not declared in this scope
morph.cpp:203: error: 'mecab_lattice_add_request_type' was not declared in this scope
morph.cpp:207: error: 'mecab_lattice_set_sentence2' was not declared in this scope
morph.cpp:209: error: 'mecab_parse_lattice' was not declared in this scope
morph.cpp:211: error: 'mecab_lattice_strerror' was not declared in this scope
morph.cpp:214: error: 'mecab_lattice_get_bos_node' was not declared in this scope
morph.cpp: In static member function 'static void CaboCha::MorphAnalyzer::clearMeCabLattice(mecab_lattice_t*)':
morph.cpp:223: error: 'mecab_lattice_clear' was not declared in this scope
morph.cpp: In static member function 'static void CaboCha::MorphAnalyzer::deleteMeCabLattice(mecab_lattice_t*)':
morph.cpp:228: error: 'mecab_lattice_destroy' was not declared in this scope
*** [morph.lo] Error code 1
Stop in /home/username/local/cabocha-0.67/src.
*** [all-recursive] Error code 1
Stop in /home/username/local/cabocha-0.67.
*** [all] Error code 1
Stop in /home/username/local/cabocha-0.67.
%
----------------------------------------------------
エラー内容の詳細は不明だが、mecabとcabochaのバージョンが合ってないことがエラー原因と当たりをつけて、cabochaのバージョンを下げてリトライ。
(後日、新しい最新のmecab入りにcabocha-0.67を試みたところ、エラーも出ずインストールできた)
cabocha0.60のインストール
----------------------------------------------------
wget http://cabocha.googlecode.com/files/cabocha-0.60.tar.gz
tar xzvf cabocha-0.60.tar.gz
cd cabocha-0.60
./configure --prefix=$HOME/local --with-charset=utf8 --enable-utf8-only LDFLAGS="-L$HOME/local/lib" CPPFLAGS="-I$HOME/local/include" --with-mecab-config=$HOME/local/bin/mecab-config
(make) ← 実行コマンドを読み返したが抜けていた・・・
make install
----------------------------------------------------
あっさりインストールできた。
cabochaを実行
----------------------------------------------------
/home/username/local/bin/cabocha
----------------------------------------------------
※パスも通しておく。パスが通っているにもかかわらずcabochaが実行できない場合は、サーバーに再ログインする。
テキストファイルに書いたpythonスクリプトからcabochaをimportを試みるとエラーになる場合は、こちら
mecabをインストールしたら、これもやる。
----------------------------------------------------
mecabで半角記号が名詞,サ変接続になるのを解決する
----------------------------------------------------
カテゴリー:mecab
windows版mecabにシステム辞書を追加する。(unix版はこちら)
unicodeの文字も扱いたいので、辞書の文字コードはutf-8とする。
環境: windows 7 (64bit)
windows版のmecab(辞書の文字コードutf-8)が既にインストールされていることが前提。
1.utf-8で書かれた辞書を用意する
こちらのページの1~3を参考
2.インストール済みmecabの辞書をutf-8に保存し直す
windowsにインストールされたmecabの辞書データはsjisで保存されている(インストール時にutf-8を選んだとしても)。拡張子がCSVとdefのファイルが辞書データなのですべてutf-8に保存し直す。(ディレクトリ全体に対してutf-8変換してもいい) ←ダメだった
辞書CSVファイルのパス
---------------------------------------------
C:\Program Files (x86)\MeCab\dic\ipadic
---------------------------------------------
文字コード一括変換のために使用したソフト
KanjiTranslator
「UTF-8(BOM無し)」「改行=CR+LF」← この設定で行った
utf-8に変換したら、追加用の辞書も同じフォルダに放り込む
3.辞書をコンパイルし直す
mecab-dict-indexを実行するので、mecab-dict-index.exeのあるフォルダまでコマンドプロンプトで移動。
mecab-dict-indexの詳細。こちら
mecab-dict-index.exeはここにあった。
------------------------------------------
C:\Program Files (x86)\MeCab\bin
------------------------------------------
実行。
------------------------------------------
mecab-dict-index -d "C:\Program Files (x86)\MeCab\dic\ipadic" -f utf-8 -t utf-8
------------------------------------------
パスの途中の半角スペースが区切りと誤認されないようにパス全体をダブルクォートでくくる。
「アクセスできない」等のエラーが出たら、フォルダを右クリックしてアクセス権を与えておく。
成功すると、4つのファイルができる
ファイルができる場所
------------------------------------------
C:\Program Files (x86)\MeCab\bin
------------------------------------------
ファイル名
------------------------------------------
char.bin
sys.dic
unk.dic
matrix.bin
------------------------------------------
4.できたファイルを正しい場所に移動させる
移動場所。元あるファイルと置換となる。
------------------------------------------
C:\Program Files (x86)\MeCab\dic\ipadic
------------------------------------------
ファイル移動の際アクセス権限がないとエラーが出たら、フォルダに権限を与えて、一度デスクトップにコピーして、目的のフォルダへ移動。(フォルダからフォルダへの移動ができなかった)
mecabは終了させておく。起動してると元ファイルが削除できない。
以上。
カテゴリー:mecab
mecabに新しい辞書を追加した際の手順の記録。
1.辞書の元になるデータをダウンロードする
データとしてよく利用されているものに、wikipediaのタイトルリストやはてなキーワード、人名事典などがある。今回はwikipediaのタイトルリストを利用した。(はてなキーワードも追加した。このページの下のほう)
ダウンロード先URL
-------------------------------------
http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
-------------------------------------
人名事典ならこちらのページからダウンロードできる
(個人的には人名事典は使わない。人名が普通名詞と結構かぶって、名詞の読みが人名なったり、長めの普通名詞が人名と区切られたりと不都合が起こる)
-------------------------------------
http://www.mwsoft.jp/programming/munou/ime_dictionary_link.html#person
-------------------------------------
2.不要なタイトルは削除する
ここからタイトルリストをCSVファイルに加工していく。保存名はwikipedia.csvとした。
まず秀丸エディタで開き、置換の繰り返しで不要タイトルを削除した。
個人的に削除したタイトルの条件
・数字だけのもの
・「(曖昧さ回避)」を含むもの
・3文字以下のもの
・次の言葉で始まるタイトル
-------------------------------------
「日本の~」「日本に~」「日本と~」「日本で~」
「中国に~」「中国の~」
「アメリカに~」「アメリカの~」
「ヨーロッパに~」「ヨーロッパの~」
「.(ドット)~」
-------------------------------------
次の文字を含むタイトル
-------------------------------------
「,(カンマ)」←あるとフォーマットエラーになる。カンマを残すならエスケープが必要。
-------------------------------------
・次の言葉で終わるタイトル
-------------------------------------
「_(何か)」「一覧」「の登場人物」
-------------------------------------
秀丸エディタのマクロで置換するファイル: 右クリックしてダウンロード
3.辞典に登録できる状態に整形する
辞書に登録されている単語は通常CSVファイルでこのようになっている
-------------------------------------
工藤,1223,1223,6058,名詞,固有名詞,人名,名,*,*,くどう,クドウ,クドウ
-------------------------------------
値の意味は左から
-------------------------------------
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
-------------------------------------
なので一旦こうした。(スコア)は後で数字に置き換える。
-------------------------------------
日清どん兵衛
-------------------------------------
↓↓↓
-------------------------------------
日清どん兵衛,0,0,(スコア),名詞,固有名詞,*,*,*,*,日清どん兵衛,*,*,ウィキペディア
-------------------------------------
<20150814 追記>
固有名詞のスコアは1でいいと思う。
-------------------------------------
日清どん兵衛,0,0,1,名詞,固有名詞,*,*,*,*,日清どん兵衛,*,*,ウィキペディア
-------------------------------------
このとき利用した秀丸エディタの正規表現
検索:^(.+)$
置換:¥1,0,0,(スコア),名詞,固有名詞,*,*,*,*,\1,*,*,ウィキペディア
<20150814 追記>
スコア1の場合
-------------------------------------
置換:¥1,0,0,1,名詞,固有名詞,*,*,*,*,\1,*,*,ウィキペディア
-------------------------------------
次にスコアを登録する。
コストは、その単語がどれだけ出現しやすいかを示していて、小さいほど出現しやすいという意味になるらしい。
長いキーワードが優先されるよう設定したいので、文字数に比例してコストが小さくなるように設定した。こちらのサイトにある式を参考にコスト値を求める。
コストを求める式
-----------------------------------------
コスト値 = -400 * (文字の長さの1.5乗)の整数
但し、最小で-36000
-----------------------------------------
スコアの登録はUWSCでファイルから一行ずつ読み込んで置換。(秀丸エディタでの計算がよくわからなかったので)
//UWSCファイルの一部抜粋
///////////////////////////////////////////////////////
//タイトルの文字数
moji_suu = POS(",0,0,(スコア)",Line_data) - 1
cost = 0 //初期化
//文字数がマイナス(取得失敗)でべき乗するとエラーが出るようなのでIFで回避
IFB moji_suu > 0
cost = INT(-400 * POWER(moji_suu, 1.5))
IF cost < -36000 THEN cost = -36000
ENDIF
Line_data = REPLACE(Line_data,"(スコア)", cost)
///////////////////////////////////////////////////////
最初からすべてUWSCでやればよかったとも思った。秀丸エディタで面倒な置換を何度も繰り返す必要なかったなと。
4.辞書のコンパイルとインストール
これ以降の作業は必要な辞書を全部そろえてからでいい。
参考サイト
辞書登録には「システム辞書」と「ユーザー辞書」があるが今回はシステム辞書に追加する。(登録に時間はかかるが解析は早い)
csvファイルをmecab-ipadic-2.7.0-20070801ディレクトリに移動する。
ここにcsvファイルも入れておく。この際、改行コードも「LF」になってることを確認した。
自分の環境のパス(cd でココに移動)
--------------------------------------------
/home/username/local/mecab-ipadic-2.7.0-20070801
--------------------------------------------
※↑おそらくこのパスは、辞典CSVファイルが入ったディレクトリならどこでもいい。既に消去してしまっていたら、一時ファイルを作ればいいと思う。そこで次のコマンドを実行する。
mecab-dict-indexを実行するので場所を確認
--------------------------------------------
/home/username/local/libexec/mecab/mecab-dict-index
--------------------------------------------
mecabが使える状態ならどこかにあるはず
コマンドを実行する。
実際のコマンド
--------------------------------------------
/home/username/local/libexec/mecab/mecab-dict-index -f utf8 -t utf8
--------------------------------------------
「-f」はCSVの文字コード、-「t」はバイナリ辞書の文字コードを指定。
(「mecab-ipadic-2.7.0-20070801」がカレントディレクトリでないとエラーが出る)
また、最初に実行した際、こんなエラーも出た
--------------------------------------------
reading ./wikipedia.csv ... dictionary.cpp(167) [n == 5] format error:
--------------------------------------------
「,」を含むタイトルが残っていて、削除することでうまくいった。
最後にインストールも忘れずに行う
--------------------------------------------
make install
--------------------------------------------
※もし、インストール前のmecabディレクトリを消してしまっていた場合、インストールはできない。そのときはインストールは諦めて、新しくできた辞書ファイルを所定の場所に移動させる(置換)で辞書を追加することができる。
移動させるファイル名
------------------------------------------
char.bin
sys.dic
unk.dic
matrix.bin
------------------------------------------
移動前(ファイルができる場所)
------------------------------------------
/home/username/local/mecab-ipadic-2.7.0-20070801
------------------------------------------
↓↓↓
移動先
------------------------------------------
/home/username/local/lib/mecab/dic/ipadic
------------------------------------------
はてなキーワードの登録もやってみた
やりかたはwikipediaのときとほぼ一緒。
1.データをダウンロード
ダウンロード元
----------------------------
•http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
----------------------------
2.CSVファイルの整形
次の条件のタイトルは削除。
・「,(カンマ)」を含むもの
・「2001-01-01」のような日付だけのもの
・数値文字参照「~」を含むもの
・「ぱーせんとぜろぜろ」のタイトル(UTF-8に文字コード変換するとタイトルの%00(?
)が半角スペースに置き換わり、インストールエラーが出る。こんなの→「empty word is found, discard this line」)
・「明日(ぬくい)」という人名。残しておくと、「明日(あした)」が「ぬくい」と解釈されて邪魔
・「???」という項目
秀丸エディタのマクロで置換するファイル: 右クリックしてダウンロード
そして、辞書用に並び替え。
-----------------------------------------------------------------
ひかりのもり(タブ)光の森
-----------------------------------------------------------------
↓↓↓
-----------------------------------------------------------------
光の森,0,0,(スコア),名詞,固有名詞,*,*,*,*,光の森,ひかりのもり,ひかりのもり,はてなキーワード
-----------------------------------------------------------------
wikipediaのタイトルリストと違い、多くのタイトルにふりがな情報がある。
実際に使った秀丸エディタの正規表現
ふりがながある項目に対して有効
-----------------------------------------------------------------
検索:^(.+)\t(.+)$
置換:\2,0,0,(スコア),名詞,固有名詞,*,*,*,*,\2,\1,\1,はてなキーワード
-----------------------------------------------------------------
ふりがながない項目用に次の置換も実行
-----------------------------------------------------------------
検索:^\t(.+)$
置換:\1,0,0,(スコア),名詞,固有名詞,*,*,*,*,\1,*,*,はてなキーワード
-----------------------------------------------------------------
上記の正規表現で置換すると、ふり仮名のないタイトルにおいて、空欄「,,(連続カンマ)」ができてしまう。空欄は「*」に置き換える「,,」→「,*,」
あとは(COST)の部分を数値に置き換えて「mecab-dict-index」を実行、そしてインストール「make install」。(もしくは、ファイル移動)
カテゴリー:mecab
さくら共用サーバーで php-mecab を使うだけならサービスに元々含まれている mecab を利用できる。自前の mecab は不要なのでこのエントリーの作業は不要。自前で mecab はインストールすべき。デフォルトの mecab は php のバージョンアップなどでフォルダが変わることがある。php-mecab は mecab のフォルダを指定してるので不具合が起こる。
さくら共用サーバーにmecabをインストールに至った経緯↓↓
=========================================
さくら共用サーバーには最初からmecabが入っている。但し辞書はEUC-JPなのでUTF-8で利用するには自前で辞書を用意しなくてはならない。で、辞書のみをインストールしたがどうもうまくいかない。UTF-8でインストールしても文字化け、EUC-JPで文字を扱ってしまう。
いろいろ調べると、当方サーバーにインストールされているmecabのバージョンは、「0.995」で、このバージョンはUTF-8の辞書をうまく使えないバグがあるらしい。
ということで別バージョンのmecabを共用サーバーにインストールした。
=========================================
↑こう書いたもののいざやってみると、v0.97でも辞書のutf-8化ができない場面に遭遇。mecab本体のインストールは問題なし。mecabのバージョンと辞書の文字コードは関係ないのかもと思い始める。ただutf-8の文字コードで動かすことはできた。詳しくは下記のリンク。
utf-8の辞書、インストール方法はこちら
インストールするmecabのバージョン
-----------------------------------------
mecab 0.97 ←別サーバーでバグがないことを確認済み
-----------------------------------------
インストール先(localは自分で作る)
-----------------------------------------
/home/username/local/
-----------------------------------------
1.ダウンロードしたファイルを解凍
-----------------------------------------
tar xzvf mecab-0.97.tar.gz
-----------------------------------------
2.「configure」実行
-----------------------------------------
cd mecab-0.97 ←フォルダ移動
./configure --prefix=$HOME/local --with-charset=utf8 --enable-utf8-only
-----------------------------------------
※「configure」というシェルスクリプトを実行することで、ソースファイルをコンパイルする前に、インストール対象となるシステム特有の機能/情報をチェックし、チェック状況を記述したMakefileが作成される。
3.コンパイルとインストール
-----------------------------------------
make ← コンパイル
make install ← インストール
-----------------------------------------
すると、インストール時にエラーが出る。
エラー内容
-----------------------------------------
%make install
.././install-sh: Permission denied
*** Error code 126
-----------------------------------------
mecab-0.97フォルダ内のinstall-shファイルにアクセス権限がないとのことで、確認してみる
-----------------------------------------
ls -l install-sh
-----------------------------------------
こう表示された
-----------------------------------------
-rw-r--r-- 1 username users 5569 Jan 29 2007 install-sh
-----------------------------------------
アクセス権限を変更(「install-sh」は「install -sh」でないよ。ハマッた)
-----------------------------------------
chmod 755 install-sh
-----------------------------------------
再びインストールを試みる
-----------------------------------------
make install
-----------------------------------------
(make cleanで不要はファイルは消せる)
インストール成功。
接続し直してバージョンを確認。binフォルダはインストールが成功するとできる。
-----------------------------------------
~/local/bin/mecab -v
-----------------------------------------
~(チルダ)は、ユーザのホームディレクトリ(home/username)のこと。$HOMEも同じ。
4.簡単に使えるようにパスを通す
現在のPATHを確認してみる
-----------------------------------------
echo $PATH
-----------------------------------------
結果
-----------------------------------------
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/home/username/bin
-----------------------------------------
「:」は区切り。
パスを書き換えるため、exportを実行するがエラーが出る
コマンド
-----------------------------------------
export PATH=~/local/bin:$PATH
-----------------------------------------
結果
-----------------------------------------
export: Command not found.
-----------------------------------------
ファイルを直接書き換えることにする。
利用しているシェルを確認してみる
コマンド
-----------------------------------------
echo $SHELL
-----------------------------------------
結果
-----------------------------------------
/bin/csh
-----------------------------------------
この場合、ホームディレクトリ直下にある.cshrcファイルを編集することになる。
パスは左から優先されるので、自前のmecabが選択されるよう、一番左にパスを追加する。
編集内容
-----------------------------------------
#set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin) ←コメントアウト
set path = ($HOME/local/bin /sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin) ←追加行
-----------------------------------------
(エックスサーバーは bash なので .bashrc に↓追記)
-----------------------------------------
export PATH=$HOME/local/bin:$PATH
-----------------------------------------
PATHが通ったことを確認
-----------------------------------------
echo $PATH
-----------------------------------------
mecabのバージョンを確認
-----------------------------------------
mecab -v
-----------------------------------------
なお辞書をインストールしていないとエラーが出る
-----------------------------------------
param.cpp(69) [ifs] no such file or directory: /home/username/local/lib/mecab/dic/ipadic/dicrc
-----------------------------------------
辞書のインストールはこちら
カテゴリー:mecab, SSH, さくらインターネット
php_mecabの簡単なサンプルコード集です。
単語ごとに区切るサンプルコード
-------------------------------------------------------------------------
<?php
$str = "MeCabを使って文章を単語ごとに区切ります。";
$result = mecab_split($str); //区切って配列に入れる。単語で分割。
foreach ($result AS $value) {
echo $value ."<br>";
}
?>
-------------------------------------------------------------------------
結果
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MeCab
を
使っ
て
文章
を
単語
ごと
に
区切り
ます
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
形態素解析を行って結果を表示するサンプルコード
-----------------------------------------------------------------------
<?php
$t = new MeCab_Tagger();
$str = 'PHPのMeCabエクステンションで形態素解析を行ってみました。';
$kekka = $t->parse($str); //解析して結果を返す。
print("<pre>");
echo $kekka;
print("</pre>");
}
?>
-----------------------------------------------------------------------
結果
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PHP 名詞,固有名詞,組織,*,*,*,*
の 助詞,連体化,*,*,*,*,の,ノ,ノ
MeCab 名詞,一般,*,*,*,*,*
エクステンション 名詞,一般,*,*,*,*,*
で 助詞,格助詞,一般,*,*,*,で,デ,デ
形態素 名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
解析 名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
行っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,行う,オコナッ,オコナッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
み 動詞,非自立,*,*,一段,連用形,みる,ミ,ミ
まし 助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
形態素の詳細情報を配列で取得するサンプルコード
-----------------------------------------------------------------------
<?php
$text = "親と健康は、失って初めてそのありがたみがわかるもの、なんてよくいわれる。";
$mecab = new Mecab();
$nodes = $mecab->parseToNode($text); //形態素の詳細情報を配列で取得
foreach ($nodes as $node) {
echo $node->surface . "<br>"; //表層形(単語そのもの)を取得
echo $node->feature . "<br>"; //形態素情報を取得
echo $node->cost . "<br>"; //形態素までのコスト
echo $node->posid . "<br><br>"; //ステータス番号を取得
}
?>
-----------------------------------------------------------------------
//バージョンを出力
-----------------------------------------------------------------------
echo mecab_version();
-----------------------------------------------------------------------
//読み方だけ表示
-----------------------------------------------------------------------
<?php
$text = "親と健康は、失って初めてそのありがたみがわかるもの、なんてよくいわれる。";
$mecab = new Mecab();
$nodes = $mecab->parseToNode($text); //形態素の詳細情報を配列で取得
$kana = "";
foreach ($nodes as $node) {
$surface = $node->surface; //表層面。単語だけ。
$feature = $node->feature; //形態素情報を取得
//ひらがなかカタカナならそのまま
if(preg_match("/^[ぁ-ゞァ-ヾー]+$/u",$surface)) {
$kana .= $surface;
//ひらがなでもカタカナでもないなら読みを取り出す
} else {
//8番目の情報だけ残す。
$kana .= preg_replace('/^.*?,.*?,.*?,.*?,.*?,.*?,.*?,(.*?),.*$/su','$1', $feature);
//$kana .= preg_split('/,/u',$feature)[7]; // ←こっちでも可。
} //if
//BOS/EOSの場所につく「*」を削除。
$kana = preg_replace('/^\*/u','',$kana);
$kana = preg_replace('/\*$/u','',$kana);
}
echo $kana;
?>
-----------------------------------------------------------------------
カテゴリー:mecab, PHP
さくら共有サーバー、php_mecabのインストール方法
前提として、mecab の辞書にアクセスする必要があるので辞書をローカルフォルダ以下にインストールしておく必要があ(さくらに最初から入っている辞書を使うこともできるが、htmlファイルが UTF-8 の場合、デフォルトの辞書が EUC なので文字化けしてしまう)。
さくら共有サーバー、UTF-8の辞書でmecabを使う方法 ←この作業を済ませておく
1.ファイルを解凍してビルド
///////////////////////////////////////////////////
tar xvfz php-mecab-0.5.0.tgz ←解凍
cd php-mecab-0.5.0 ←ディレクトリ移動
phpize ←拡張モジュールをビルド(ソースファイルから実行可能なファイルを作成。configureファイルができる)
※-ize(アイズ)・・・~化する。~で扱う。
※エックスサーバーでは phpize は使えないので php_mecab はインストールできない。yum や rpm コマンドが使えないので phpize の追加もできない。どうしても phpize が使えない環境で PHP + mecab を実行したいなら PHP の EXEC 関数でコマンドラインを操作してすることならできそう?
///////////////////////////////////////////////////
2.「configure」を実行
///////////////////////////////////////////////////
./configure --with-mecab=/usr/local/bin/mecab-config --with-php-config=/usr/local/php/5.3.27/bin/php-config
///////////////////////////////////////////////////
php-configのバージョンは必ずあわせる。現在使用しているphpのバージョンをphpinfoで確認。今回は「5.3.27」。指定しなくてデフォルトのバージョンが呼び出されるとうまくいかない。phpのバージョンはターミナルから「php -v」でも調べられるが出てきたバージョンのフォルダ名がない場合がある(php -v で「5.45」と出たが存在するフォルダは「5.4」だった)。使用しているphp のバージョンはサーバーコントロールにログインして調べるといい。
mecab-configの場所は「which mecab-config」で特定できる。自前の mecab をインストールしている場合はそちらのパスを指定する。
3.コンパイルとインストール
///////////////////////////////////////////////////
make ←コンパイル
make install ← インストール
///////////////////////////////////////////////////
インストールするとエラーメッセージが出た
----------------------------------------------------------------------
Installing shared extensions: /usr/local/php/5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
cp: /usr/local/php/5.3.27/lib/php/extensions/no-debug-non-zts-20090626/#INST@99219#: Permission denied
----------------------------------------------------------------------
権限のないところにインストールを試みているよう。
ローカルフォルダにインストールするように、Makefileをいじる。(make実行後に作成されるファイル)
Makefileの変更箇所
----------------------------------------------------------------------
#EXTENSION_DIR = /usr/local/php-5.x.x/lib/php/extensions/no-debug-non-zts-20060613 ←コメントアウト
EXTENSION_DIR = $(HOME)/local/lib/php/extensions/no-debug-non-zts-20060613 ←追記
※「20060613」とかフォルダ名は合わせるといい。
----------------------------------------------------------------------
再びmake installすると無事にインストールが完了するはず。
4.続いて、PHPの起動時に読み込まれる拡張モジュールを設置するディレクトリの設定
PHP.iniに拡張モジュールの置き場を記述する
PHP.iniに記述(追記)する内容
----------------------------------------------------------------------
extension_dir="/home/username/local/php-mecab-0.5.0/modules"
extension=mecab.so
----------------------------------------------------------------------
※拡張子 so は shared object の略。UNIX系OSの共有ライブラリのファイル形式。
最初、こう書いたら動かなかくてハマった。
----------------------------------------------------------------------
extension_dir="/home/username/local/lib/php/extensions"
extension=mecab.so
----------------------------------------------------------------------
作業時に出力されたメッセージを見てとりあえず動くところまで持ってこれた。
----------------------------------------------------------------------
Libraries have been installed in:
/home/sunsdoor/local/php-mecab-0.5.0/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
UTF-8の辞書を使いたいのでphp.iniに追記
----------------------------------------------------------------------
mecab.default_dicdir=/path/ ←辞書
mecab.default_userdic=/path/ ←ユーザ辞書
----------------------------------------------------------------------
※UTF-8 の辞書を使う場合は phpファイルの保存形式やメタタグ(headタグ内)の文字コードも UTF-8 に揃える必要がある。
自分の環境だといずれか(dicrcとかsys.dicがあるフォルダ)
----------------------------------------------------------------------
mecab.default_dicdir="/home/username/local/mecab-dic/ipadic-utf8"
mecab.default_dicdir="/home/username/local/lib/mecab/dic/ipadic"
----------------------------------------------------------------------
うまくいっていたらphpinfoにmecabの項目が表示されている。
カテゴリー:mecab, PHP, さくらインターネット