本ブログ内で私が時々「自作Pythonプログラムを使って構文解析しました」等と言及することのある、Pythonを使った中国語句構造解析プログラムの作成方法・活用方法について説明します。なお、最初にお伝えしておきますが、私は職業エンジニア・プログラマーとしての実務経験はなく、プログラミングは独学で身につけ趣味でやっている程度ですので、記載内容に間違いが含まれていることもあるかもしれませんが、その点については責任を負えぬ点も含め予めご了承ください。
■手順1
米国スタンフォード大学が開発したPython向け自然言語処理パッケージStanzaを使用したPythonプログラムを作成し、動作させるための環境を用意します。Stanzaの概要については以下ページで確認することができます。参考
私は開発環境としてGoogle Collaboratoryを使っていますが、Googleアカウントを持っていない方はGoogleアカウントを作成する必要があります。参考
■手順2
「Colaboratory へようこそ」にアクセスし、「ノートブックを新規作成」を選択します。
■手順3
「▶」右側のコード入力欄に以下コードをコピー&ペーストします。参考
!pip install stanza import stanza
nlp = stanza.Pipeline(lang='zh', processors='tokenize,pos,constituency') doc = nlp('我去餐厅吃饭') ## ' '内に解析したい中国語文を入力します。
for sentence in doc.sentences: print(sentence.constituency) |
■手順4
実行ボタン「▶」をクリックします。
なお、2回目の実行からは「!pip install stanza」の前に”##”を入れ、「## !pip install stanza」とするとより速く実行されるようです。
また、「我去餐厅吃饭」の部分を、他の中国語文に書き換えることによって、その文の句構造を解析することが可能です。
■手順5
処理完了後、スクロールダウンしていくと、画面下部に”ROOT"で始まる句構造解析結果が表示されていますので、これをコピーし、メモ帳にペーストします。
■手順6
メモ帳の置換機能を使って、”(“を”[”に、”)”を”]”に置換し、これをコピーします。
■手順7
Syntax Tree Generatorにアクセスし、手順6でコピーした解析結果をテキスト入力欄にペーストすると、その下に文の句構造を表す樹木図が表示されます。
なお、自然言語処理における統語構造の注釈を付与するPenn Chinese Treebankでは、RBとはAdverb(副詞)を指し、JJとはAdjective(形容詞)、ADVPはAdverb Phrase(副詞句)を指す、と定義しています。また、DTはDeterminer(決定詞)、NNはNoun(名詞)、DPはDeterminer Phrase(決定詞句)、PRPはPronoun Phrase(代名詞句)、NPはNoun Phrase(名詞句)、VPはVerb Phrase(動詞句)等と定義しています。Penn Chinese Treebankの詳細についてはこちらでご確認ください。
■手順8
「我去餐厅吃饭」の部分を、他の中国語文に書き換えることによって、その文の句構造を解析することが可能です。様々な中国語文の句構造を解析し、解析結果を比較することによって、中国語文法について洞察を深めることができます。また、解析結果が誤りだった場合でも、何故そのような誤りが生じたか考察することによって、中国語文法について理解を深めることができます。
■手順9
なお、コード内「nlp = stanza.Pipeline(lang='zh', processors='tokenize,pos,constituency')」の’zh’は中国語を意味しますが、ここを変更すると他の言語の構文解析もできるようになります。例えば、英語は’en’、日本語は’ja’です。参考
上記同様の手順で、中国語文「我把花瓶放在桌子上」、英語文”I put a vase on the table”、日本語文「私は花瓶を机の上に置きました」それぞれの句構造を分析し、樹木図に示してみました。このように、複数言語の句構造を比較分析することによって、各言語固有の文法特徴や言語間に共通する普遍的な文法特徴等について理解を深めることができます。
例えば、以下の例では、目的語「花瓶」、動詞「置く」、前置詞句「机の上に」の関係が、中国語では目的語「把花瓶」→動詞「放」→介詞句「在桌子上」の順になっているのに対し、英語では動詞「put」→目的語「a vase」→前置詞句「on the table」、日本語では目的語「花瓶を」→後置詞句「机の上に」→動詞「置きました」の順になっていることがわかります。
[ROOT [IP [NP [PRP 我]] [VP [BB 把] [IP [NP [NN 花瓶]] [VP [VV 放] [PP [VV 在] [LCP [NP [NN 桌子]] [NN 上]]]]]]]]
[ROOT [S [NP [PRP I]] [VP [VBD put] [NP [DT a] [NN vase]] [PP [IN on] [NP [DT the] [NN table]]]]]]
[ROOT [S [PP [BASENP [PRON 私]] [ADP は]] [VP [PP [BASENP [NOUN 花] [NOUN 瓶]] [ADP を]] [VP [PP [NP [PP [BASENP [NOUN 机]] [ADP の]] [NOUN 上]] [ADP に]] [VP [VERB 置き] [VP [AUX まし] [VP [AUX た]]]]]]]]