組み込みmecab使用例


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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(_,off),
 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インタフェース