「は」という格助詞の前に、名詞は三つある。「なん」が数詞になっているのが少しおかしい(juman++の仕様)だが、他に、「アトム」と「もの」もある。「なんですか」というのも、「ものはなんですか」も日本語としては単独で成立する。ここでは主語は「アトム」であるべきだ。なると、名詞の主語になる優先順位というのが必要になるだろう。名詞の種類は、juman++では、次のようになっている(http://www.unixuser.org/~euske/doc/postag/)。(例)「つくね焼」「鞭打ち症」「パイ中間子」サ変名詞以外のもの。(例)「説明」「あんよ」「埋め合わせ」「発想」「~する」の形をとれるもの。順位をつけると、(1)人名(2)組織名(3)地名(4)固有名詞(5)普通名詞(6)サ変名詞(7)形式名詞(8)数詞(9)時相名詞(10)副詞的名詞、となるのではないか。この優先順位で、文章の主語をとらえることにしよう。平文に変換するprologプログラム書き忘れていたが、この間、以前も使っていた二分木を平文にするプログラムを少し改良している。AIサーバー、AIクライアントで使っているので掲載しておく。printlist(X).実行例を示しておく。prolog二分木化したwikipediaからとってきているかなり複雑な二分木がだ、綺麗に日本語の平文に直している。先の記事では、クライアント側がjavaだったが、クライアント側もprologにした。クライアントプログラムは、先の平文を二分木にするクライアントを少し変えたものだ。[force(true)]).サーバー側は、前の記事と同じで変更ない。実行結果は以下のようである。アトムはロボットです.続いて、サーバー側。アトムはロボットですこれからは、知識が多い場合の処理はもう少し後にして、単純な知識が様々に利用される状況を想定してみる。prolog二分木AI同士の対話が当面のターゲットなのだが、そのサーバー部分の作成とテストを実行した。相変わらず知識は「アトムはロボットです」しか持っていない。ネットワーク上で質問を受け取って、自らの持つ知識でそれに返答するというprologを示すと次のようになる。私は、ロボット同士のTCP-IPの通信システムは、基本、Telepathyという名前をつけている。このサーバー、立ち上げるとターミナルをブロックして、他のプロセスを実行させる余地がない感じになるが、prologは、簡単に実行をスレッド化できるので、大きな問題ではない。クライアントは、ここではjavaで書いた簡単なものを使う(次の段階でこちらもprologにする)。javaクライアント側のコンソールは次のようになる。アトムはロボットです回答は、prologサーバーから送り返されてきたものである。telepathy_server側のコンソールは次のようになる。アトムはロボットですということである。prolog二分木みずからが持っている知識にもとづき、問いに答えるシステムのプリミティブなものを作った。持っている知識は次のような「アトムはロボットです」という知識だけであるとする。現実には、日本語wikipediaの膨大な知識を持っているのだが、それを利用するのはもう少し後にする。知識は、knowledgeというfanctorで表現されているとする。%で始まる行は、prologのコメント文である。)).ここで、「アトムとはなんですか」という問いがあったとする。それに回答するprologプログラムは次のようなものである。)).プログラムの最後に、先ほどの知識が加えられている。この知識が多く、あるいは、複雑になれば、それらを調べることになる。reply()が、topレベルのclauseである。質問文(Sentence)は、平文であり、それらはサーバーに問い合わせして二分木にして返してもらっている(chat_to_server('GETTREE',Sentence,Recv),)。unificationすると失敗する。この理由がわからなくて、半日くらい無駄にした。term_string(Recv1,Recv),で、stringを文字列に変換している。Recv1,)、質問文であるかどうかをチェックし(isquestion(Tree),)、質問文であるならば、質問の主語にあたるものを取り出し、知識に問い合わせして、回答に当たる知識を得る(getreply(Sub,Out),)、という段取りである。実行結果は次のようになる。与えて、サーバーからprolog二分木を取ってくるクライアント質問文二分木の作成をやってきたが、ここで、質問を受け取って、自分の知識に基づいて解答を作成するシステムを作る。質問は、平文で受け取るので、そこから知識の二分木に結びつけなければならないのだが、一旦、質問文を二分木に変換するのがいいと思った。prologで作成しようと思ったが、いろいろ面倒なので、これまでのjavaの作成システムにサーバー機能も持たせて、そこにアクセスして単文を二分木にしようと思う。prologのクライアントを作成した。[force(true)]).prologは、utf8のバイトコードで送受信するので、その変換が必要だった。作成したシステムがあったので、簡単に済ますことができた。