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

yasuokaの日記: 日本語句構造解析器としてのStanza

日記 by yasuoka

Stanza v1.4.0が、日本語向けの句構造解析をサポートしたと聞いたので、バージョンアップしつつ「全学年にわたって小学校の国語の教科書に大量の挿し絵が用いられている」を読ませてみた。

$ pip3 install -U stanza --user
$ python3
>>> import stanza
>>> stanza.download("ja")
>>> nlp=stanza.Pipeline("ja")
>>> doc=nlp("全学年にわたって小学校の国語の教科書に大量の挿し絵が用いられている")
>>> tree=doc.sentences[0].constituency
>>> print(tree)
(ROOT (S (PP (BASENP (接頭辞 全) (名詞-普通名詞-一般 学年)) (INP (助詞-格助詞 に) (動詞-非自立可能 わたっ) (助詞-接続助詞 て))) (S (PP (NP (PP (BASENP (接頭辞 小) (名詞-普通名詞-一般 学校)) (助詞-格助詞 の)) (NP (PP (BASENP (名詞-普通名詞-一般 国語)) (助詞-格助詞 の)) (BASENP (名詞-普通名詞-一般 教科) (接尾辞-名詞的-一般 書)))) (助詞-格助詞 に)) (S (PP (NP (PP (BASENP (名詞-普通名詞-形状詞可能 大量)) (助詞-格助詞 の)) (BASENP (動詞-一般 挿し) (名詞-普通名詞-一般 絵))) (助詞-格助詞 が)) (VP (VP (VP (動詞-一般 用い) (VP (助動詞 られ))) (助詞-接続助詞 て)) (VP (動詞-非自立可能 いる)))))))

まあまあ読めているようだ。pprintを使って、見やすくしてみよう。

>>> tree2list=lambda t:[t.label]+[tree2list(c) for c in t.children]
>>> import pprint
>>> pprint.pprint(tree2list(tree),width=40)
['ROOT',
['S',
  ['PP',
   ['BASENP',
    ['接頭辞', ['全']],
    ['名詞-普通名詞-一般', ['学年']]],
   ['INP',
    ['助詞-格助詞', ['に']],
    ['動詞-非自立可能', ['わたっ']],
    ['助詞-接続助詞', ['て']]]],
  ['S',
   ['PP',
    ['NP',
     ['PP',
      ['BASENP',
       ['接頭辞', ['小']],
       ['名詞-普通名詞-一般', ['学校']]],
      ['助詞-格助詞', ['の']]],
     ['NP',
      ['PP',
       ['BASENP',
        ['名詞-普通名詞-一般', ['国語']]],
       ['助詞-格助詞', ['の']]],
      ['BASENP',
       ['名詞-普通名詞-一般', ['教科']],
       ['接尾辞-名詞的-一般', ['書']]]]],
    ['助詞-格助詞', ['に']]],
   ['S',
    ['PP',
     ['NP',
      ['PP',
       ['BASENP',
        ['名詞-普通名詞-形状詞可能', ['大量']]],
       ['助詞-格助詞', ['の']]],
      ['BASENP',
       ['動詞-一般', ['挿し']],
       ['名詞-普通名詞-一般', ['絵']]]],
     ['助詞-格助詞', ['が']]],
    ['VP',
     ['VP',
      ['VP',
       ['動詞-一般', ['用い']],
       ['VP', ['助動詞', ['られ']]]],
      ['助詞-接続助詞', ['て']]],
     ['VP', ['動詞-非自立可能', ['いる']]]]]]]]

うーむ、まだ、ちょっと見にくい。できれば、もう少しコンパクトに

ROOT═S╦PP╦BASENP╦接頭辞═全
      ║  ║      ╚名詞-普通名詞-一般═学年
      ║  ╚INP╦助詞-格助詞═に
      ║      ╠動詞-非自立可能═わたっ
      ║      ╚助詞-接続助詞═て
      ╚S╦PP╦NP╦PP╦BASENP╦接頭辞═小
        ║  ║  ║  ║      ╚名詞-普通名詞-一般═学校
        ║  ║  ║  ╚助詞-格助詞═の
        ║  ║  ╚NP╦PP╦BASENP═名詞-普通名詞-一般═国語
        ║  ║     ║  ╚助詞-格助詞═の
        ║  ║     ╚BASENP╦名詞-普通名詞-一般═教科
        ║  ║            ╚接尾辞-名詞的-一般═書
        ║  ╚助詞-格助詞═に
        ╚S╦PP╦NP╦PP╦BASENP═名詞-普通名詞-形状詞可能═大量
          ║  ║  ║  ╚助詞-格助詞═の
          ║  ║  ╚BASENP╦動詞-一般═挿し
          ║  ║         ╚名詞-普通名詞-一般═絵
          ║  ╚助詞-格助詞═が
          ╚VP╦VP╦VP╦動詞-一般═用い
             ║  ║  ╚VP═助動詞═られ
             ║  ╚助詞-接続助詞═て
             ╚VP═動詞-非自立可能═いる

みたいな感じで表示できるといいのだけど、ちょっと難しいかな。

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

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

読み込み中...