パスワードを忘れた? アカウント作成
14042283 journal
人工知能

yasuokaの日記: UniDic2UDによるCaboChaエミュレータ

日記 by yasuoka

日本語係り受け解析エンジンUniDic2UDを改造して、CaboCha風の係り受け表示が出来るようにしてみた。まずは、最新版のUniDic2UDを、UDPipeの言語モデルjapanese-gsdと共にインストール。

% pip3 install 'unidic2ud>=1.2.7'
% python3 -m unidic2ud download.udpipe japanese-gsd

インストールできたら、CaboChaの流儀にしたがって「太郎はこの本を二郎を見た女性に渡した。」を係り受け解析してみよう。

% python3
>>> import unidic2ud.cabocha as CaboCha
>>> c=CaboCha.Parser()
>>> tree=c.parse("太郎はこの本を二郎を見た女性に渡した。")
>>> print(tree.toString(CaboCha.FORMAT_TREE_LATTICE))
太郎は-----------D
    この-D       |
      本を---D   |
      二郎を-D   |
          見た-D |
          女性に-D
          渡した。
EOS
* 0 6D 0/1 0.000000
太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,*,PROPN    1<-nsubj-13
は    助詞,係助詞,*,*,*,*,は,ハ,*,ADP    2<-case-1
* 1 2D 0/0 0.000000
この    連体詞,*,*,*,*,*,この,コノ,*,DET    3<-det-4
* 2 4D 0/1 0.000000
本    名詞,一般,*,*,*,*,本,ホン,*,NOUN    4<-obj-9
を    助詞,格助詞,一般,*,*,*,を,ヲ,*,ADP    5<-case-4
* 3 4D 1/2 0.000000
二    名詞,数,*,*,*,*,二,ニ,*,NUM    6<-compound-7
郎    名詞,一般,*,*,*,*,郎,ロウ,*,NOUN    7<-obj-9
を    助詞,格助詞,一般,*,*,*,を,ヲ,*,ADP    8<-case-7
* 4 5D 0/1 0.000000
見    動詞,自立,*,*,*,*,見る,ミ,*,VERB    9<-acl-11
た    助動詞,*,*,*,*,*,た,タ,*,AUX    10<-aux-9
* 5 6D 0/1 0.000000
女性    名詞,一般,*,*,*,*,女性,ジョセイ,*,NOUN    11<-iobj-13
に    助詞,格助詞,一般,*,*,*,に,ニ,*,ADP    12<-case-11
* 6 -1D 0/1 0.000000
渡し    動詞,自立,*,*,*,*,渡す,ワタシ,*,VERB    13<-root
た    助動詞,*,*,*,*,*,た,タ,*,AUX    14<-aux-13
。    記号,句点,*,*,*,*,。,*,*,SYM    15<-punct-13
EOS

「本を」は「渡した。」に係るべきなのだが、ここだけは解析にしくじっているようだ。ちなみに出力フォーマットは、FORMAT_TREEFORMAT_LATTICEFORMAT_TREE_LATTICEFORMAT_XMLFORMAT_CONLLの5種類を準備してあって、FORMAT_CONLLはUniversal Dependenciesをそのまま出力する。

>>> print(tree.toString(CaboCha.FORMAT_CONLL))
# text = 太郎はこの本を二郎を見た女性に渡した。
1    太郎    太郎    PROPN    名詞-固有名詞-人名-名    _    13    nsubj    _    SpaceAfter=No|Translit=タロウ
2    は    は    ADP    助詞-係助詞    _    1    case    _    SpaceAfter=No|Translit=ハ
3    この    この    DET    連体詞    _    4    det    _    SpaceAfter=No|Translit=コノ
4    本    本    NOUN    名詞-一般    _    9    obj    _    SpaceAfter=No|Translit=ホン
5    を    を    ADP    助詞-格助詞-一般    _    4    case    _    SpaceAfter=No|Translit=ヲ
6    二    二    NUM    名詞-数    _    7    compound    _    SpaceAfter=No|Translit=ニ
7    郎    郎    NOUN    名詞-一般    _    9    obj    _    SpaceAfter=No|Translit=ロウ
8    を    を    ADP    助詞-格助詞-一般    _    7    case    _    SpaceAfter=No|Translit=ヲ
9    見    見る    VERB    動詞-自立    _    11    acl    _    SpaceAfter=No|Translit=ミ
10    た    た    AUX    助動詞    _    9    aux    _    SpaceAfter=No|Translit=タ
11    女性    女性    NOUN    名詞-一般    _    13    iobj    _    SpaceAfter=No|Translit=ジョセイ
12    に    に    ADP    助詞-格助詞-一般    _    11    case    _    SpaceAfter=No|Translit=ニ
13    渡し    渡す    VERB    動詞-自立    _    0    root    _    SpaceAfter=No|Translit=ワタシ
14    た    た    AUX    助動詞    _    13    aux    _    SpaceAfter=No|Translit=タ
15    。    。    SYM    記号-句点    _    13    punct    _    SpaceAfter=No

難しいのは、そもそもUniDic2UDは単語間の係り受けを解析するのに対し、CaboChaは二文節間の係り受けを解析するものだったりする点だ。単語間の係り受けは、二文節間の係り受けとは、実は微妙に対応しない部分がある。それでも、インターフェースとしては、Treeに対するtoString(format)のみならずchunk(index)chunk_size()token(index)token_size()Chunkに対するlinkhead_posfunc_postoken_pos、あるいはTokenに対するnormalized_surfacefeatureなどを準備して、出来るだけ既存のプログラムを移行しやすくしたつもりだ。pip3とpython3があれば、簡単にインストールできるので、ぜひ使ってみてほしい。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...