サブツリーによる文章の構造とprolog化

これまで書いた文章のprolog化では、ルートとなるべきフレーズ(句)が決まると、文章全体を表すフレーズリストから、プログラムによって一意にprolog化が実行された。

ただ、このプログラムでは接続詞がうまく取り扱われていない。「または」などの接続詞は、文章の大き化構造を作り出す大切な役割を果たしている。文章の大きな構造をどのようにして生み出すのか、そこを取り上げる。

今、0番から9番までの番号がついた10個のフレーズからなる文章があったとしよう。そして、6番目の句がルートであったとする。これを単純に次のように表す。

[0, 1, 2, 3, 4, 5, (6), 7, 8, 9]

今、このうち、2,3,4番目のフレーズをその中で相対的に自立させて、サブツリーとし、そのルートを3番とする。それは次のように書ける。

[0, 1, [2, (3), 4], 5, (6), 7, 8, 9]

一般的ルールはすぐに想像つくだろう。サブツリーの中の、サブサブツリーというのもあり得る。

重要な原則は「あるツリーのルートは、そのサブツリーの中にあってはならない」ということである。ただし、厳密に言うと、少し違う。

これまでの記事の例を見てみよう。極端に短いものだが「私はりんごまたはみかんが好きだ」(変な日本語だが)の場合、フレーズリストは次のようになる

0 私 は
1 りんご または
2 みかん が
3 好き だ

ここで、最初は、フレーズ番号、2番目は名詞または動詞の語(以下、「リーフ語」)、最後は助詞、助動詞、接続詞(以下「ノード語」と言おう)である。ルート句を2にすると、サブツリーがない状態では

[0, 1, (2), 3,]

となる。もし、1,2をサブツリーとし、1をルートとすると、

[0, [(1), (2)], 3,]

と言う書き方が許される。基本、一つのサブツリーに二つのルートはあり得ないが、サブツリーの右端のフレーズは、ルートになれるのである。

サブとメインの関係は上記のようになっている。厳密には、サブツリーの右端のノード語は、そのサブツリー全体のノード語なのである。ここがポイントである。