このページではJavaScriptを使用しています。

9-7.Mecab/CaboChaインターフェース

9-7-1.概要

AZ-Prolog から日本語処理解析エンジン、Mecab・CaboChaを利用するインターフェースを提供します。
2014年3月現在、OSによって提供範囲が次のようになっています。

  Windows 32bit Windows 64bit Linux 32bit Linux 64bit Mac 64bit
Mecab
CaboCha × × × ×

* AZ-Prolog Windows64bit版には mecabの64bit用ライブラリが付属しています(mecabのインストールは必要です)。
* これは、LGPLライセンス規約にのっとって弊社がコンパイルし再配布するものです。
* <参照URL>
* "http://www.ipentec.com/document/document.aspx?page=mecab-compile-for-x64-windows-use-x64-windows"


AZ-Prolog とのインターフェースプログラムとMakefileは、AZPrologインストールDIR¥system¥ext¥mecab にあり、ユーザが修正、再コンパイルして.so .dll を生成することができます。
AZ-Prologからの利用サンプルは、AZPrologインストールDIR下にありますので、使い方の参考にしてください。
mecab.pl
cabocha.pl


★MeCab

MeCabは京都大学情報学研究科日本電信電話株式会社コミュニケーション科学基礎研究所共同研究ユニットプロジェクトを通じて開発された、オープンソース形態素解析エンジンです。
MecabHP:http://taku910.github.io/mecab/


★CaboCha

CaboChaは、奈良先端科学技術大学院大学および工藤拓氏によって開発された、オープンソースの日本語係り受け解析器です。
CaboChaHP:http://taku910.github.io/cabocha/

9-7-2.ライブラリのインストールと動作確認

[Windows]

1) mecab (と cabocha)を前記URLからダウンロードし、インストールします。
2) 環境変数のシステムパスにインストールされた mecab¥bin cabocha¥binを追加します。
3) 64ビットWindowsの場合のみ、AZ-Prolog パッケージで提供している64bit用dllとlibを(1)のmecabインストール先にコピーします。AZPrologインストールDIR¥mecab64¥ にコピーバッチ "install.bat" がありますのでインストール先を確認し、必要なら書き換えて管理者として実行してください。
4) AZ-Prolog を立ち上げて拡張ライブラリを読み込み、テストプログラムを走らせてみます。
テストプログラムは AZPrologインストールDIRのsample¥ext¥mecab.pl,cabocha.plです。

> prolog
| ?- dlib_require(mecab).
yes 
| ?- [-'C:¥azprolog.962¥sample¥ext¥mecab.pl'].
yes
| ?- t.
<テストプログラムの結果が出力されます>
yes 
| ?- [-'C:¥azprolog.962¥sample¥ext¥cabocha.pl'].
yes 
| ?- t.
<テストプログラムの結果が出力されます>
yes
[Linux]

1) mecab をインストールします。

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

2) AZ-Prolog を立ち上げて拡張ライブラリを読み込み、テストプログラムを走らせてみます。
テストプログラムは インストールDIRのsample/ext/mecab.plです。

$ prolog
| ?- dlib_require(mecab).
yes
| ?- [-'/usr/share/azprolog/sample/ext/mecab.pl'].
yes
| ?- t.
<テストプログラムの結果が出力されます>
yes 
[MAC]

1) mecab をインストールします。

$ sudo port install mecab

2) AZ-Prolog を立ち上げて拡張ライブラリを読み込み、テストプログラムを走らせてみます。
テストプログラムは インストールDIRのsample/ext/mecab.plです。

$ prolog
| ?- dlib_require(mecab).
yes
| ?- [-'/Applications/azprolog.app/Contents/az_home/share/azprolog/sample/ext/mecab.pl'].
yes
| ?- t.
<テストプログラムの結果が出力されます>
yes

9-7-3.Mecabインターフェース

(1)インターフェース述語

用意している組込述語は、MeCabが提供しているC言語用のインターフェースに対応しているものが存在します。ただしmecab_nbest_end/0」は対応するものは存在しません。
MeCabのC言語用のインターフェースについては、MeCabのドキュメントの中の「doc/libmecab.html」ファイルに説明があります。

mecab_new(-MECAB, +ARGS)
MeCabインスタンスを作成して、それをMECABに返す。
ARGSには、mecabコマンドの引数と同様の値を指定する。 (型は、アトムのリスト)
mecab_strerror(+MECAB, -ERR)
他のMeCab述語を実行中にエラーが発生したとき、エラー内容を示す文字列をアトムにした値を返す。
mecab_destroy(+MECAB)
MeCabインスタンスを破棄/開放する。
mecab_sparse_tonode(+MECAB,+STATEMENT,+NODE_FORM_NUM,-NODE_LIST)
あたえられた文(STATEMENT)を解析する。 結果をMeCabノードのリストとして返す(NODE_LIST)。ノード一個が一個の形態素に関する情報をもつ。 ただし、MeCabの特徴として、最初のノードは必ずBOSノードであり、最後は必ずEOSノードになる。
NODE_FORM_NUMはノードの中の情報量を指定するためのものである。 0から12までの整数を指定する。 ノードの値は複数の属性をもつので、それ自身がリストになっている。
(例外は、NODE_FORM_NUMを0に指定した場合のみ)
<NODE_FORM_NUM>>
態素の表層文字列(アトム)のみを返す。
情報が一個だけなので、リストにしない。
(1を指定した場合にはリストになる)
1 - 12: 指定した個数分の情報をリストにして返す。
12なら、全ての情報を返すことになる。

<ノード内の各情報の位置>
①: surface: 表層文字列 (アトム)
②: stat: 形態素の種類を表すアトム
('MECAB_NOR'/'MECAB_UNK'/'MECAB_BOS'/'MECAB_EOS')
③: feature: 素性情報 (リスト) -- 後述
④: char_type: 文字種情報 (整数)
⑤: isbest: ベスト解: 1, それ以外: 0
⑥: wcost: 単語生起コスト (Float)
⑦: cost: 累積コスト (Float)
⑧: alpha: forward backward の foward log 確率 (Float)
⑨: beta: forward backward の backward log 確率 (Float)
⑩: prob: 周辺確率 (Float)
⑪: rcAttr: 右文脈 id (整数)
⑫: lcAttr: 左文脈 id (整数)

(* alpha, beta, prob は -l 2 オプションを指定した時に定義される)
上記の順番で、リストが作成される。
例えば、NODE_FORM_NUMを4に指定すると、[SURFACE, STAT, FEATURE, CHAR_TYPE]のリストが、個々のノード毎に作成される。

<素性情報>
素性情報は要素を9個もつリストである。 以下の要素をもつ。

[品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音]

各要素は全てアトムである。
名詞なので活用がないなど、要素として値を持っていない部分には、'*'が 値として入る。

しかし、これはMeCab用のIPA辞書を使用した場合であって、これとはまったく異なる 内容を持った辞書を使用した場合には、数も意味も違う内容になると思われる。
mecab_nbest_end/0
 mecab_nbest_init/2 の終了処理。
必ず一回呼び出す必要がある。
(これは、Prologインターフェースの内部処理上必要なものである)
(2)注意点など
・ kanji mode offで実行してください。
:- kanji_mode(_,off).

・ 解析可能な文の最大バイト長は、2048です。
(AZMECAB_MAX_PARSE_STRING_LEN/azmecab.c)

9-7-4.CaboChaインターフェース

(1)インターフェース述語

用意している組込述語は、CaboChaが提供しているC言語用のインターフェースに、対応しているものが存在します。ただし「cabocha_tree_get_chunk_list/2」は対応するものは存在しません。
CaboChaのC言語用のインターフェースについては、CaboChaのドキュメントの中の「doc/libcabocha.html」ファイルに説明があります。

cabocha_strerror(+CABOCHA, -ERR)
他のCaboCha述語を実行中にエラーが発生したとき、エラー内容を示す文字列をアトムにした値を返す。
cabocha_new(-CABOCHA, +ARGS)
CaboChaインスタンスを作成して、それをCABOCHAに返す。
ARGSには、cabochaコマンドの引数と同様の値を指定する。 (型は、アトムのリスト)
cabocha_destroy(+CABOCHA)
CaboChaインスタンスを破棄/開放する。
cabocha_sparse_tonode(+CABOCHA, +STATEMENT, -RESULT)
あたえられた文(STATEMENT)を解析する。
STATEMENTは、アトムかリストである。
結果を文字列として返す(RESULT)。
cabocha_sparse_totree(+CABOCHA, +STATEMENT, -RESULT_TREE)
あたえられた文(STATEMENT)を解析する。
STATEMENTは、アトムかリストである。
結果を木構造のオブジェクト(整数)として返す(RESULT_TREE)。
cabocha_tree_size(+RESULT_TREE, -SIZE)
木構造オブジェクトの要素数を返す。
要素数とは、文節数ではなく、形態素要素数である。
cabocha_tree_get_token(+RESULT_TREE, +AT, -TOKEN)
木構造オブジェクトのAT番目(0から要素数-1まで)の要素の情報をリスト(TOKEN)で返す。


1: surface: 表層文字列 (アトム)
2: base 基本形 (アトム)
3: read 読み (アトム)
4: pos_list  品詞情報 アトムリスト (最大8個まで)
5: cform 活用形 (アトム)
6: ctype 活用型 (アトム)
7: ne ? 名詞に関する何かの情報 (B-ORGNIZATIONなど)
8: optional 付加情報 (アトム)
9: status ? (整数)

上記の順番で、リストが作成される。
cform, ctype, ne, optionalについては、値がないときには、'*'が値として入る。
cabocha_tree_get_chunk_list(+RESULT_TREE, -CHUNK_LIST)
木構造オブジェクトから、文節情報/文節係り受け情報のリスト(CHUNK_LIST)を返す。
CHUNK_LISTの各要素はそれぞれ一個の文節に関する情報である。
文節の順序は、元の文に現れた順序のままである。

各文節情報は、以下の要素を持つリストである。
<文節情報>
1: link 係り先文節番号 (0から)
2: head 主辞形態素番号 (文節内、0から)
3: func 機能形態素番号 (文節内、0から)
4: rel 係り種別 ('D': 依存)
5: score ?
6: feature_list 解析中、文節に付加された特性(アトム)のリスト
7: token_list 文節に含まれる形態素の情報のリスト
(個々の形態素情報は、cabocha_tree_get_token/3で返されるものと同じ)
(2)注意点など

・ kanji mode offで実行してください。
:- kanji_mode(_,off).

・ 解析可能な文の最大バイト長は、2048である。
(AZCABOCHA_MAX_PARSE_STRING_LEN/azcabocha.c)