prolog二分木のフォーマットの改良

jumanをjuman++することによって、名詞のカテゴリ情報がより確実に組み込まれるようになり、ドメイン情報も使える。そこで、二分木のフォーマットをさらに改良することにした。それによって、会話で知識を使う道がより望ましいものになる。

変更後の二分木例を示すと次のようだ(文章はWikipediaより)

%% line = 小田を含む4名は、放送が終了したばかりのアニメ『機動戦士ガンダム』に熱中しており、まだガンプラが発売される前から同作品に登場するロボット兵器「モビルスーツ (MS)」の模型を自作していた。
%% phrases: [ r0 1 2 [ 3 4 5 r6 7 [ 8 9 10 11 12 13 14 r15 16 ] ] 17 ] 
testdoc(testline_0_0,
    node(を,
        [小田, 'S:地'],
        node([],
            [含む, 'V:含む'],
            node(は,
                [['4', 'S:数/C:数量'], [名, 'C:人']],
                node(に,
                    node([],
                        node(ばかりの,
                            node(が,
                                [放送, 'S:サ/C:抽象物/D:メディア'],
                                [[終了, 'S:サ/C:抽象物'], [した, 'V:する']]
                            ),
                            [アニメ, 'S:普/C:抽象物/D:文化・芸術']
                        ),
                        [[[機動, 'S:普/C:抽象物'], [戦士, 'S:普/C:人']], [ガンダム, 'S:固']]
                    ),
                    node([],
                        [[[熱中, 'S:サ/C:抽象物'], [して, 'V:する']], おり],
                        node(の,
                            node([],
                                node([],
                                    node(に,
                                        node(から,
                                            node([],
                                                node(が,
                                                    node([],
                                                        まだ,
                                                        [ガンプラ, 'S:普']
                                                    ),
                                                    [[[発売, 'S:サ/C:抽象物/D:ビジネス'], [さ, 'V:する']], れる]
                                                ),
                                                [前, 'S:副']
                                            ),
                                            [同, [作品, 'S:普/C:抽象物/D:文化・芸術']]
                                        ),
                                        [[登場, 'S:サ/C:抽象物'], [する, 'V:する']]
                                    ),
                                    [[ロボット, 'S:普/C:人工物-その他/D:科学・技術'], [兵器, 'S:普/C:人工物-その他/D:政治']]
                                ),
                                [[[['モビルスーツ', 'S:普'], ['(', 'S:普']], ['MS', 'S:組']], [')', 'S:普']]
                            ),
                            node(を,
                                [模型, 'S:普/C:人工物-その他'],
                                node([],
                                    [[[自作, 'S:サ/C:人工物-その他'], [して, 'V:する']], いた],
                                    [ ]
                                )
                            )
                        )
                    )
                )
            )
        )
    )
).

まず、最初の方の [小田, 'S:地']にあるように、リーフ値が名詞の場合はサブタイプをS:のヘッダをつけて、組み込むようにした。サブタイプ名は、節約のため、実際の名前の最初の1文字だけにしている。サブタイプ名は、「普通名詞, 副詞的名詞, 形式名詞, 固有名詞, 組織名, 地名, 人名, サ変名詞, 数詞, 時相名詞」だけのようなので、重なりはない。ただし、小田は地名になっているが、現実は、人名である。このように、人名か地名がわかれば、会話に利用できるのだ。

さらにカテゴリとサブタイトルが両方ある場合は、'S:サ/C:抽象物'のように/で区切って、繋げるようにした。リストにする方法も考えたが、やらた、リストがネストされるので、わかりにくくなると思い、回避した。

ドメインがある場合は、これにさらにD:のヘッダーでつなげる。[放送, 'S:サ/C:抽象物/D:メディア']あるいは[アニメ, 'S:普/C:抽象物/D:文化・芸術']という感じである。ドメインは、どういう状況の中に単語が含まれているのかがわかるので、貴重な情報である。

こうなると、二分木の中にシソーラス辞書が同時に組み込まれている感じになる。