hapter 1 機能拡張パッケージ() MeCab,Cabocha インタフェース

 

1 概要

 

AZ-Prolog から日本語処理解析エンジン、Mecab,Cabochaを利用するインタフェースを提供します。

注:2010年3月現在Mecab,Cabochaのダウンロードライブラリが32ビット版のみのため、AZ-Prolog32ビット版のみで利用可能です。

 

おのおののエンジンの詳細、および最新版ライブラリのダウンロードサイトについては、下記をご参照ください。

また、AZ-Prologからの利用サンプルはソースの含まれるディレクトリのTEST_PL以下にありますので、使い方の参考にしてください。

  Mecabtest.pl  Cabochatest.pl

 

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

 

MecabHP:  http://mecab.sourceforge.jp/

 

CaboCha , 奈良先端科学技術大学院大学および工藤拓氏によって開発されたオープンソースの日本語係り受け解析器です。

 

CabochaHP: http://chasen.org/~taku/software/cabocha/

 

2 Mecab インタフェース

 

2.1 インタフェース述語ソースファイル

 

azmecab.c

aze_api.h

aze_api.c

aze_cenc.c

 

コンパイルリンクでは /lib  MeCabインストールDIR\sdk\libmecab.libを指定します。

 

ユーザプログラムと同時コンパイル、リンクする詳細はAZ-Prologインストールディレクトリのsystem\Mecab_Cabocha\Makefile およびsystem\make\prolog_exe.txtを参考にしてください。

 

2.2 MeCabインストール

 

Windows版をダウンロードして、そのexeを実行する。

IPA辞書もインストールされる。

・ 環境変数のシステムパスにインストールされたMecab\binを追加します。

   

2.3 インタフェース述語

 

用意している組込み述語は、MeCabが提供しているC言語用のインターフェースに対応しているものが存在する。(ただし、mecab_nbest_end/0は対応するものは存在しない)

 

MeCabC言語用のインターフェースについては、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_NUM0に指定した場合のみ)

 

  <NODE_FORM_NUM>

  0: 形態素の表層文字列(アトム)のみを返す。

     情報が一個だけなので、リストにしない。

(1を指定した場合にはリストになる)

  1 - 12: 指定した個数分の情報をリストにして返す。

          12なら、全ての情報を返すことになる。

 

  <ノード内の各情報の位置>

  @: surface:   表層文字列 (アトム)

  A: stat:      形態素の種類を表すアトム

                 ('MECAB_NOR'/'MECAB_UNK'/'MECAB_BOS'/'MECAB_EOS')

  B: feature:   素性情報 (リスト) -- 後述

  C: char_type: 文字種情報 (整数)

  D: isbest:    ベスト解: 1, それ以外: 0

  E: wcost:     単語生起コスト (Float)

  F: cost:      累積コスト     (Float)

  G: alpha:     forward backward foward log 確率   (Float)

  H: beta:      forward backward backward log 確率 (Float)

  I: prob:      周辺確率 (Float)

  J: rcAttr:    右文脈 id  (整数)

  K: lcAttr:    左文脈 id  (整数)

 

  (* alpha, beta, prob -l 2 オプションを指定した時に定義される)

  上記の順番で、リストが作成される。

  例えば、NODE_FORM_NUM4に指定すると、[SURFACE, STAT, FEATURE, CHAR_TYPE]のリストが、個々のノード毎に作成される。

 

  <素性情報>

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

 

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

 

  各要素は全てアトムである。

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

 

  しかし、これはMeCab用のIPA辞書を使用した場合であって、これとはまったく異なる  内容を持った辞書を使用した場合には、数も意味も違う内容になると思われる。

 

mecab_nbest_init(+MECAB, +STATEMENT)

 

  あたえられた文(STATEMENT)を解析する。

  解析結果は、mecab_nbest_next_tonode/3によって、良い結果から順番に一個づつ返される。実際にNベスト解を動作させるには、-N-lオプションを指定しなければならない。(: -N10 -l1)

 

mecab_nbest_next_tonode(+MECAB, +NODE_FORM_NUM, -NODE_LIST)

 

  mecab_nbest_init/2の実行後、一個づつ、順番に良い解を返す。

  引数の内容は、mecab_sparse_tonode/4と同様。

  解がなくなった時点で、failする。

 

mecab_nbest_end/0

  mecab_nbest_init/2の終了処理。

  必ず一回呼び出す必要がある。

(これは、Prologインターフェースの内部処理上必要なものである)

 

2.4 注意点など

 

   kanji mode offで実行すること。

     :- kanji_mode(_,off).

 

   ・ 解析可能な文の最大バイト長は、2048である。

     (AZMECAB_MAX_PARSE_STRING_LEN/azmecab.c)

 

 

 

3 Cabocha インタフェース

 

3.1      インタフェース述語ソースファイル

 

azcabocha.c

aze_api.h    (Mecab IFソースと同じ)

aze_api.c  (同上。Mecabも同時リンクする場合、二重にリンクする必要はない)

aze_cenc.c  (同上。Mecabも同時リンクする場合、二重にリンクする必要はない)

 

コンパイルリンクでは /lib   CaboChaインストールDIR\sdk\libCaboCha.libを指定します。

 

ユーザプログラムと同時コンパイル、リンクする詳細はAZ-Prologインストールディレクトリのsystem\Mecab_Cabocha\Makefile およびsystem\make\prolog_exe.txtを参考にしてください。

 

3.2      Cabochaインストール

 

Windows版をダウンロードして、CaboChaINSTALLファイルの記述通りに行う

・環境変数のシステムパスに インストールされた cabocha\binを追加する。

 

3.3      インタフェース述語

 

用意している組込み述語は、CaboChaが提供しているC言語用のインターフェースに、対応しているものが存在する。(ただし、cabocha_tree_get_chunk_list/2は対応するものは存在しない)

 

CaboChaC言語用のインターフェースについては、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)で返す。

 

  <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で返されるものと同じ)

 

3.4 注意点など

 

   kanji mode offで実行すること。

     :- kanji_mode(_,off).

 

   解析可能な文の最大バイト長は、2048である。

     (AZCABOCHA_MAX_PARSE_STRING_LEN/azcabocha.c)