・PHP v4.1.0以降。日本語(マルチバイト)対応版でないとエラーが出ます。
・PostgreSQLが利用できること。
よくわからない場合はサーバ管理者に問い合わせてください。
・無断での商用利用禁止。プログラムの改造は自由ですが、再配布する場合は事前に作者の了解を得てください。辞書や話題スクリプト(後述)は自由に公開・再配布可能です。
・このプログラムが原因で生じたいかなる損害、トラブル等に対しても、作者、リンク先サイトの関係者は一切の謝罪、補償をいたしません。 このプログラムの利用は各自の自責にてお願いいたします。
人間と会話するというコンセプトのプログラムは、パソコンがまだ8ビットだった時代から多くの人によって作られ、一般的にそれらは『人工無能』と呼ばれてきました。
基本的には、あらかじめキーワードとそれに対応する返答パターンを用意しておき、人間の発言の中にそのキーワードが現れたらオウム返しのように使うという原理です。
ただのオウム返しでは会話がマンネリになってしまうので、このCGIでは次のような工夫をしています。
まず基本辞書というものを用意し、キーワード(単語)と、その返答例、そして、そのキーワードが所属するカテゴリー(話題)を定義しています。
例えばキーワードが「雨」だったら返答例は「雨の日は憂鬱だね」、カテゴリーは「天気」となります。
人間との会話の中で「雨」という言葉が出てきた時は「雨の日は憂鬱だね」と返答し、同時に、現在の話題が「天気」であることを判断します。また、人間の発言は全て要素ごとに分解してデータベースに記憶します。キーワードに定義していない言葉が出てきた時には、過去の人間の発言の中から最も近い文章、又は同じ話題の文章を探し出して返答する仕組みになっています。
さらに、『話題スクリプト』というものを用意し、簡単なクイズや心理テスト、小話などをランダムで言うようにしています。
setting.phpをエディタ等で開き、PostgreSQLを利用するためのID、パスワード、データベース名、
人工無能の名前、辞書ツール管理用パスワードなどを設定してください。
//人工知能の名前 //辞書ツール管理用パスワード (以下略) |
次にFTPソフト等を使って各ファイルをサーバにアップロードします。サーバ上での各ファイルのパーミッションは次のようになります。
|
※ dataは、チャットのログなどを保存するための空ディレクトリ
アップロードが終わったらブラウザからdic-tool.php(辞書管理ツール)を呼び出します。そして「データベースを作成」「データベースにデータを登録」の順番に実行します。データの登録には数分かかることがあります。
無事に終わったら、index.htmlを呼び出してください。
このCGIは次の3つのテーブルをデータベース上に作成します。
ai_basic_dic | ・・・ | 基本辞書 |
ai_ext_dic | ・・・ | 拡張辞書 |
ai_query_dic | ・・・ | 補助辞書 |
基本辞書と補助辞書には、設置時にコピーされる初期設定ファイルと、人間との会話を通じて学習した情報の両方が記録されます。拡張辞書は学習した情報だけが記録されます。
付属ファイルのbasic_dic.csvが基本辞書に、query_dic.csvが補助辞書に初期登録される内容を記述したものです。どちらもコンマ区切りのCSVファイルなのでエクセル等で編集できますし、テキストエディタで直接、編集しても構いません。
basic_dic.csvには"キーワード"、"カテゴリー"、そのキーワードに対する"返答例"をコンマ区切りで一行ずつ定義します。"返答例"は空欄のままでも可です。
|
query_dic.csvには"カテゴリー"と、そのカテゴリーに対する"返答例"をコンマ区切りで一行ずつ定義します。
|
<命令一覧>
:start と :end | 話題は何個でも書けますが、一つの話題は :start と :end の間に記述します。 |
// | 行頭に // を書くとコメント文と見なし、無視されます。 |
@ラベル名 | @に続けて英字の名前を書くとラベルとして認識します(if文やgoto文で使用する)。 |
:wait(n) | n秒間、待機する |
:if(キーワード) 返答文 | 人間の発言の中にキーワードが含まれていた時、返答文を出力します。 if(キーワード1|キーワード2|キーワード3|・・・) と書けば、複数のキーワードに対応できます。 返答文も 返答文1|返答文2|返答文3|・・・ と記述できます。 この場合は返答文を ランダムに選んで出力します。 |
:if() 返答文 | キーワードを指定しない場合は () と記述します。この場合、ユーザーが何を 入力しても返答文を出力します。 |
:if(キーワード) @ラベル名 | キーワードを言われたら、指定のラベルにジャンプします |
:goto @ラベル名 | 指定のラベルにジャンプします |
:exit | 話題スクリプトを終了します |
※ifの後にはwaitで待機時間を設けないと機能しません。
※テストをするには、チャット画面で :wadai番号 と打てば実行できます。( 例 :wadai8 )
|
本当を言うと、この程度のCGIなら、やろうと思えばデータファイルを直接操作して処理する事も可能だったのですが、勉強をしたかったのと、プログラム開発が楽になるのでデータベースを利用することにしました。PostgreSQLを選んだことには特に理由がありません。特殊なSQL命令は使っていないので、少し修正するだけでMySQLやオラクルでも動作するでしょう。
それと、辞書設定ファイルを見ていただけるとわかるのですが、登録単語の少ない、かなりしょぼい辞書です。
どなたか、ちゃんとした辞書と話題スクリプトを作ってください・・・ (^^;
○PHPのバージョンの確認
レンタルサーバー等では未だにv4.1.0以前の古いバージョンを使っている所がありますが、そのような場合はサーバー管理者にお願いしてバージョンアップしてもらいましょう。最新版のv4.3.0ならば標準でGDライブラリが使用できます。
PHPのバージョンは、次のスクリプトで調べることができます。適当なファイル名(test.phpなど)を付けてサーバーにアップロードし実行してください。
|
このスクリプトを実行すると、画面の一番上にPHPのバージョンが表示されます。
そして、上から3段目あたりにある 'Configure Command' という項目の中に '--with-gd'が入っていればGDライブラリを使用できます。これが'--without-gd'になっていると使用不可です。
'--with-gd'も'--without-gd'も書いてない時は、サーバー管理者に確認してみるか、とりあえずカウンターを設置して試してみる手があります。
PHPのバージョンもGDライブラリも問題が無いのに動作しない時は、各ファイル・ディレクトリのパーミッションを確認してください。
○エディタでPHPファイルを開くと文字化けする
EUCに対応しているエディタで開いてください(秀丸エディタなど)。
ちなみに、秀丸エディタの場合は設定を次のように変更してください。メニューの「その他」から「動作環境」の画面を表示して、その左側にある「編集」を選択し、「文字コードの自動認識をする」をオンにしてください。
人工無能・太郎 v1.0 CGI配布元 ぷらねっとぐりーん