組み込みmecab使用例

「組み込みmecab使用例」の編集履歴(バックアップ)一覧に戻る

組み込みmecab使用例 - (2014/05/15 (木) 13:53:46) のソース

az-prologではオープンソースの形態素解析ツールMecabを簡単に使える
ライブラリがあります。
ここでは簡単にテキストデータから名詞の表層系のみを抽出するプログラムを作ってみましょう。

windowsの場合は,Babbageを使ってUTF-8形式に対応する必要があります。
.plファイルもutf8形式で保存して下さい。
 C:\prolog>prolog_c -utf8

 :-dlib_require(mecab).
 
 test:-init,
  see('Input.txt',S),
   repeat,gets(S,X,N),f(X),N=:=1,
  seen(S),told.
 
 init:-
  [-'my_mecab.pl'],
  kanji_mode(_,on),
  abolish(mecabID,2),mecab_init.
 
 f([]):-!.
 f(X):-!,name(Y,X),is_atom(Y),mecab_get(Y,B),nlist(B,C),f2(C).
 
 is_atom(Y):-var(Y),!,fail.
 is_atom(Y):-integer(Y),!,fail.
 is_atom(Y):-atom(Y),!.

 f2([]):-!.
 f2([[A,'名詞'|_]|L]):-!,tella('Output.txt'),write(A),nl,told,f2(L).
 f2([A|L]):-!,f2(L).
 
 %%util
 gets(S,L,N):-get0(S,X),gets(S,X,L,N).
 gets(S,4,[],1):-!.
 gets(S,26,[],1):-!.
 gets(S,10,[],0):-!.
 gets(S,13,[],0):-!.
 gets(S,31,[],0):-!.
 gets(S,14909570,[14909570],0):-!.
 gets(S,14909569,[14909569],0):-!.
 gets(S,X,[X|L],N):-gets(S,L,N).


 %my_mecab.pl
 /*
 %組み込みmecab述語一覧
 mecab_new
 mecab_strerror
 mecab_destroy
 mecab_sparse_tonode
 mecab_sparse_tostr
 mecab_nbest_init
 mecab_nbest_next_tonode
 mecab_nbest_end
 mecab_version
  
 */
 
 %use mecab with single dictionary
 :- extern det:mecab_sparse_tonode/4.
 :- extern det:mecab_new/2.
 :- extern det:mecab_destroy/1.
 mecab_init:-mecab_new(M,['M','-d','/dictionary']),assertz(mecabID(M,3)). %3=col size
 mecab_get(S,N):-mecabID(M,A),!,mecab_sparse_tonode(M,S,A,N).
 mecab_end:-retract(mecabID(M,S)),!,mecab_destroy(M).
 
 nativ_mecab_formattype([ %unk
  A,[ %00.被形態素単語
  B,  %01.品詞大分類                    ;pos1    
  C,  %02.品詞中分類                    ;pos2    
  D,  %03.品詞小分類                    ;pos3    
  E,  %04.品詞細分類                    ;pos4    
  F,  %05.活用型                        ;cType   
  G   %06.活用形                        ;cForm
  ]],[A,B,C,D,E,F,G,'*','*','*']) :-!.
 
 nativ_mecab_formattype([ %nativ-mecab function
  A,[ %00.被形態素単語
  B,  %01.品詞大分類                    ;pos1    
  C,  %02.品詞中分類                    ;pos2    
  D,  %03.品詞小分類                    ;pos3    
  E,  %04.品詞細分類                    ;pos4    
  F,  %05.活用型                        ;cType   
  G,  %06.活用形                        ;cForm   
  H,  %07.語彙素読み                    ;lForm   
  I,  %08.語彙素(語彙素表記+語彙素細分類);lemma   
  J,  %09.書字形出現形                  ;orth    
  K,  %10.発音形出現形                  ;pron    
  L,  %11.書字形基本形                  ;orthBase
  M,  %12.発音形基本形                  ;pronBase
  N,  %13.語種                          ;goshu   
  O,  %14.語頭変化型                    ;iType   
  P,  %15.語頭変化形                    ;iForm   
  Q,  %16.語末変化型                    ;fType   
  R,  %17.fForm                        ;fForm
  S,  %18.kana                         ;kana
  T,  %19.kanaBase                     ;kanaBase
  U,  %20.form                         ;form
  V,  %21.formBase                     ;formBase
  W,  %22.iConType                     ;iConType
  X,  %23.fConType                     ;fConType
  Y,  %24.aType                        ;aType
  Z,  %25.aConType                     ;aConType
  AA, %26.aModType                     ;aModType
  |_]],[A,B,C,D,E,F,G,H,I,J]).

Mecabのフォーマットについては以下を参照して下さい。
http://www.az-prolog.com/manual/manuals/manual_mecab-cabocha.html#mecab
9-5-3.Mecabインタフェース