yasuokaの日記: 旧字旧仮名の係り受け解析ツールとしてのGiNZA v4.0.2
昨日の『人文科学とコンピュータ研究会』で、旧字旧仮名の係り受け解析ツールを披露したのだが、GiNZAについてはデモをおこなわなかったので、今日の日記に書いておこうと思う。まずは最新版をインストール。
$ pip3 install -U ginza unidic2ud
インストールがうまくいったら、昨日の例文「國境の長いトンネルを拔けると雪國であつた。」を、近代文語UniDic+GiNZAで、単語間係り受け解析してみよう。
$ python3
>>> import unidic2ud.spacy
>>> nlp=unidic2ud.spacy.load("kindai","ja_ginza")
>>> doc=nlp("國境の長いトンネルを拔けると雪國であつた。")
>>> import deplacy
>>> deplacy.render(doc,Japanese=True)
國境 NOUN ═╗<══╗ nmod(体言による連体修飾語)
の ADP <╝ ║ case(格表示)
長い ADJ <══╗ ║ acl(連体修飾節)
トンネル NOUN ═╗═╝═╝<╗ obj(目的語)
を ADP <╝ ║ case(格表示)
拔け VERB ═╗═╗═══╝<╗ ccomp(節目的語)
る AUX <╝ ║ ║ aux(動詞補助成分)
と ADP <══╝ ║ case(格表示)
雪國 NOUN ═╗═╗═╗═══╝═╗ ROOT(親)
で AUX <╝ ║ ║ ║ aux(動詞補助成分)
あつ AUX <══╝ ║ ║ aux(動詞補助成分)
た AUX <════╝ ║ aux(動詞補助成分)
。 PUNCT <══════════╝ punct(句読点)
「拔け」⇐ccomp=「雪國」に関しては、ccompではなくadvcl(連用修飾節)の方が適切だと思うのだが、それ以外はほぼ読めているようだ。続いて、文節間の係り受け解析も見てみよう。
>>> import ginza
>>> bdeps=[(ginza.bunsetu_span(t),b) for b in ginza.bunsetu_spans(doc) for t in b.lefts]
>>> print(bdeps)
[(國境の, トンネルを), (長い, トンネルを), (トンネルを, 拔けると), (拔けると, 雪國であつた。)]
完璧だ、素晴らしい。旧字旧仮名がGiNZAで読めるようになると、戦前の文書など一気に応用範囲が拡がると思う。なお、旧字旧仮名のspaCy-SynChaは7月31日の日記に書いたので、そちらも較べてみてほしい。
旧字旧仮名の係り受け解析ツールとしてのGiNZA v4.0.2 More ログイン