言語処理学会 第26回年次大会 発表論文集 (2020年3月)

解析表現文法による CNL 日本語文法の試作
若杉 祐依 ∗秋信 有花

倉光 君郎

渡邉 遥輔

理学研究科 ∗

日本女子大学大学院

kuramitsuk@fc.jwu.ac.jp

1

はじめについて述べる．５節では，実験と評価した結果について述べる．６節では，本稿をまとめる．

構文解析は，コンパイラ構成法だけではなく，自然言語処理でも重要な要素技術である．自然言語処理分野では，曖昧さを扱うため，非決定的な形式文法が用は，最悪計算量が O(n3 ) となる．これは確率で解決される場合もあるが，根本的な解決にはならない．また，曖昧さ除去 (disambiguration) も必要となり，手軽な方法とはいえない．
一方で，プログラミング言語の世界では，文法に制約をかけることで，O(n) 処理が可能な決定的文法が開発されてきた．例えば以下のようなものが挙げられる．

解析表現文法 (PEG) とは2いられてきた．しかし，非決定的文脈自由文法の場合

解析表現文法 (Parsing Expression Grammar, PEG)
は，2004 年に Bryan Ford によって示された形式文法の一種である．軽量かつ決定的な構文解析アルゴリズ
ムとの親和性が高いため，プログラミング言語処理系で広く導入されてきた．

PEG は，A を非終端記号，e を解析表現としたとき，A ← e で表される規則の集合である．PEG の演算子を表 1 に示す．

• LR 文法
表 1: PEG の演算子

• LL 文法• 解析表現文法
Parsing Expression Grammar(PEG)[1][2]文字 (列) リテラル
文字クラス.
A

ワイルドカード
非終端記号(e)e?
e*e+!e

グループ化
オプション
0 回以上繰り返し
1 回以上繰り返し
否定先読み

e1 e 2e1 / e2

連接
優先度付き選択

これらの形式文法は，自然言語の曖昧さを扱えないため，自然言語処理には不適切であるとされてきた．
そこで，我々は「制限・制約を加えることで曖昧さをなくした自然言語ならば，決定的形式文法で扱えるのではないか」と考えるに至った．
このような制限された自然言語は，Controlled Nat-ural Language(CNL)[3] として多く開発され，有用性も知られている．しかし，CNL の設計は非形式的に行われており，既存のものでは機械処理は難しい．
本研究の目的は，決定性形式文法の制約によって，機械処理しやすい CNL 文法を形式的に定義することである．形式化する対象自然言語は日本語とし，形式化する際には PEG を用いるものとする．また，PEGの利点を活かすため，ターゲットをコードなどの記号が多用されている「ソフトウェア工学文書」に定めた．
本稿の残りは，以下の通りである．２節では，解析表現文法 (PEG) について述べる．３節では，設計方針について述べる．４節では CNL 日本語文法 (CJ) に

名前e‘abc’[abc]説明
同じ文字列とマッチする
これらの文字のひとつとマッチする
任意の一文字にマッチする
非終端記号が参照する構文規則にマッチする

e はマッチしなくてもよい
e の 0 回以上の貪欲な繰返しe の 1 回以上の貪欲な繰返し
もし e のマッチが失敗したら成功，そうでなければマッチは失敗とする
e1 と e2 を順番にマッチする
最初に e1 をマッチし，失敗したときのみ e2 をマッチする

PEG のオプションや繰り返しは正規表現と共通の動作をするが，これらの表現は貪欲であり，最長の位置でマッチする．例えば， a∗ a （ただし a は終端記号）という解析表現は，a∗ が全ての a を消費するため，後ろの a は必ず失敗する．
また，PEG の優先度付き選択 / は，バッカス・ナウア記法の選択 | のようにどちらか一方にマッチするという定義ではなく，先に e1 のマッチを試し，失敗― 1475 ―Copyright(C) 2020 The Association for Natural Language Processing.
All Rights Reserved.

• 修飾チャンク

した場合のみバックトラッキングして e2 のマッチを試す．

実際の処理結果はリスト 1 のようになる．このとき，チャンクは 3, 4, 8, 12 行目に示されている．

設計方針

3

リスト 1: 処理結果例>>> とても赤いリンゴを食べる[#S
よって複数の解釈が存在する曖昧性に関しては，係り
3[#Adverb ’とても’]受け先を判定することができない．この点は，自然言
4[#AChunk
語に制限をかけ文法定義する際に組み込む予定である． 5[#Adjective ’赤’]
6[#Base ’い’]
その一方で，PEG は意味の区切りを見つけること7]を得意としている．そのため，係り受け解析の正確さ
8[#NChunkは求めずにチャンクごとに区切って後処理できるよう
9[#Noun ’リンゴ’]にする．
10[#Object ’を’]ここでいうチャンクとは，意味のひとかたまりであ 11]るとしていて，主に名詞・動詞・形容詞・形容動詞な 12[#VChunk13[#Verb1 ’食べ’]どの直前で切り分けている．
[#Base ’’]
また，解析に使用する辞書は，大きく分けて以下の 1415]
四種類から構成される．
16 ]
PEG は「美しい水車小屋の娘」などの係り受けに

12• 名詞辞書• 動詞辞書4.2• 形容辞書CJ は，次のルールから名詞チャンクを解析する．

• 修飾辞書4CJ: CNL 日本語文法

4.1

概要

• 名詞辞書に含まれる用語• １つ以上の漢字が続く (例. 特許)• １つ以上のカタカナが続く (例. メソッド)• ５段活用連用形の辞書（例. 組み)

PEG による機械処理しやすい日本語文法として CJ• 「おにぎり」のように「」で囲まれた文字列を作成している．用途としてはソフトウェア工学文書• 上記の組み合わせ処理を考えている．ソフトウェア工学文書を選出した
理由としては，会話文・命令形などの口語的表現が含まれないことや，PEG が数式や記号の処理を得意としていることが挙げられる．

CJ は日本語の文章を意味の塊ごとに小分けすることで，機械処理の準備とする．このとき分けた塊に，四種類のチャンクの中から最適なものを振り分ける．
四種類のチャンクは以下の通りである．

• 名詞チャンク
• 動詞チャンク
• 形容詞チャンク

名詞チャンク

しかしこれでは，「段組み」や「組み込み」などの漢字とひらがなが入り混じる名詞は上記のパターンに含まれず，不十分である．そこで，CJ では「組み」な
ど 5 段活用動詞の連用形を名詞パターンの構成辞書として導入することでこの問題を解決している．
しかし，日本語では先頭の単語が名詞だとしても，後に続くものによって，動詞的な使われ方をされたりする．したがって，先頭が名詞であったとしても，名詞チャンクであると判定することができない．そこで，名詞に続き NounSuﬃx で定義されたルールによって，接辞詞からチャンクの種類を再判定する．NounSuﬃxを以下に定義する．

― 1476 ―Copyright(C) 2020 The Association for Natural Language Processing.
All Rights Reserved.

• 「のみ」や「など」など，名詞接辞が続くとき，

表 3: 接辞パターンとタグ付け
非終端記号 タグ

引き続き名詞チャンクとして続ける• 「する」などサ行変格活用が続くとき，動詞チャASuﬃx

ンクとして続ける• 「な」など形容動詞の活用が続くとき，形容詞とISuﬃx

して続ける• 「てにをは」などの助詞が続くとき，名詞チャンクの終端とする

#Not
#Make

書かされ〈る〉#Been

書かれ〈る〉#Polite

書き〈ます〉#WantTo

書きた〈い〉#EasyTo

書きやす〈い〉#HardTo

書きにく〈い〉#Likely

4.3

動詞チャンクIXSuﬃx

活用例

書か〈ない〉, 書かず

書きがち

#And

書き

#Past

書いた
書いてからる．動詞の語幹は，カ行・サ行変格活用動詞以外，あ#After#EvenIf

らかじめ準備された辞書 (表 2) を用いる．

#And

書いて

#Base

書く

動詞チャンクは，動詞の語幹で始まるチャンクであ

USuﬃx
表 2: CJ 辞書一覧

ESuﬃx

#If

書けば

内容

OSuﬃx

#Will

書こう

辞書名
名詞
動詞形容修飾書いてもNOUNXVERBVERB5KAVERB5SAVERB5TAVERB5NAVERB5MA
VERB5RAVERB5WAVERB5GAVERB5BA
VERB1
ADJ
CONJ
ADVERBUNIT
NONUNIT

名詞
動詞連用形
カ行 5 段
カ行 5 段
タ行 5 段
タ行 5 段
タ行 5 段
タ行 5 段ワ行 5 段ガ行 5 段バ行 5 段
上一段・下一段
修飾詞
接続詞
副詞
助数詞
非助数詞

例
重み, しきい値
組み, 受け書
探, 出勝
死読切笑
防遊
着, 述べ美ししかし, つまり順序よく, とても
度 , 分, 回
分野, 日本〈ない〉 #If

なければ#EvenIf

なくても#Andなく て?

#Not

なく〈ない〉

#Base

ない

#Past

なかった

「とき」(#If) として，接続情報も動詞チャンクに含めている．

4.4

形容詞チャンク

形容詞チャンクは，形容詞の語幹で始まるチャンク
語幹に続く活用形は，動詞活用ごとに定義する．語幹には活用形ごとの活用語尾が続き、さらに後ろに続く助詞や助動詞を、表 3 の ASuﬃx, ISuﬃx 等の接辞パターンとして定義する。接辞パターンは，「書かなである．全て形容詞辞書 (ADJ) により判定している．
形容動詞は，日本語特有の品詞分類で言語学的にも異説が多い．CJ では，形容動詞は「名詞」の形容詞的な活用として扱う．つまり，「正確な」のように「名〈い〉」の〈い〉のように更に活用するものがある．こ

詞＋〈な〉」のパターンは，名詞が形容詞的に活用し，のような活用は，再帰的に定義されている．

名詞節に係るチャンクと解釈する．単純にパターンと動詞は，活用において「ひらがな」が続く．CJ でして扱うため，「抽象な」のような形容動詞として相応

は，動詞語幹辞書のあと，先読みで活用形をチェックしくない組み合わせも受理するが，こちらは構文解析している．これにより，「視る (動詞)」と「視野 (名詞)」

後に名前解析で確認することで解決できる．のように品詞を区別できる．
動詞チャンクでは，動詞の連用形，連体形に続く文字列も解析している．たとえば，「書くとき」のような文字列は，「書く」で終端とせず，「書く」(#Base) +― 1477 ―Copyright(C) 2020 The Association for Natural Language Processing.
All Rights Reserved.

4.5

修飾チャンクであったことから，9 割以上の文が，CJ 中の，タグに修飾チャンクは，用言もしくは体言を修飾するチャンクであり，大別して次の種類がある．

意味を持つ構文規則によって解析できていることが分かった．
ただし，本実験で得られた構文木について，その中• 接続詞

身を 1 つ 1 つチェックすることは今回はしていない．

• 連体詞 (代名詞も含む)

それらはバグとして今後修正を行ってく予定である．

もし意図と異なる解析がされた結果が存在した場合，

• 副詞

6

• 助数詞

むすびに
我々は自然言語を機械処理するために，自然言語にこれらの品詞は，数もある程度制限されるので，基形式的に制約を加えることに辿り着いた．制約を加え本的に辞書ベースで定義される．
副詞は，「ゆっくり進む」の「ゆっくり」のように用ることで，自然言語を機械処理する際の最大の問題点

言を修飾する単語であるが，日本語の場合は，単体とである曖昧性を解決することができると考えたためでして名詞として解釈できる場合も存在する．CJ では，ある．本研究では．日本語を形式的に定義した CJ を副詞に NounSuﬃx のパターンが続くかどうかで副詞開発した．予備実験では，javadoc 文書を使用した．

が名詞節を判定する．

結果として，全ての文章を構文木に変換することがで助数詞も，「10 メートル進む」の「10 メートル」のきた．今後は，他文書の処理への挑戦，文法のバグのように副詞的に修飾する場合と，「10 メートルは長い」

発見・改善，係り受けなどの PEG でフォローしきれのように名詞として解釈できる場合も存在する．

ない部分も含め，構文木構築に取り組んで行く．

5

参考文献

予備実験と評価
我々は予備実験として，ソフトウェア工学文書であ[1] Daisuke Yamaguchi, Kimio Kuramitsu, CPEG:

る javadoc 文書 の 93484 文を対象に構文解析実験を

a typed tree construction from parsing expres-行った．解析結果は表 4 の通りであった．

sion grammars with regex-like captures, SAC

1’19 Proceedings of the 34th ACM/SIGAPPSymposium on Applied Computing

表 4: 解析の結果
割合
解析成功率

100%

エラーチャンク含有率

4.72%[2] Bryan Ford, Parsing expression grammars: arecognition-based syntactic foundation, POPL
’04 Proceedings of the 31st ACM SIGPLANSIGACT symposium on Principles of programming languages

解析の成功率は，構文解析器が構文木を返せば成功，途中で解析が止まれば失敗としている．解析率が 100%

[3] Tobias Kuhn, Volume 40, Issue 1 - March 2014,であることから，対象中の全ての文が，CJ に基づいA Survey and Classification of Controlled Nat-て構文木に変換可能であった．

ural Languages Computational Linguistics

次に，CJ では，解析中の文字がどのチャンクにもマッチしない場合に，ひらがなの連続をエラーチャンクとして構文木に変換している．エラーチャンク含有率は，そのマッチが 1 文の解析結果中に 1 回でも含まれる場合はエラー，1 回も含まれない場合はエラーでないと判断している．エラーチャンクチ含有率が 4.72%
1 https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javadoc.html― 1478 ―Copyright(C) 2020 The Association for Natural Language Processing.
All Rights Reserved.