〜目次〜
#contents

*ナンデスカこれはー。 [#o032d983]
-ちょー個人的なAIMistメモ。
-誰のためでもなく自分のため。
-AIMist配布場所 http://mistnar.hp.infoseek.co.jp/
-とりあえず、思いついたことをずらーっと。
-3.x系最終仕様の資料として残しておいてください。


*全体の処理の流れ 記憶(MarkovChain.Memorize系関数)編 [#bd7e3546]
:概説|基本的にはmist_ai.dic内に全て書かれているが、細かな関数はmist_aisupport.dicに記述されている。前者をMain、後者をSubと略すことにする。
-返り値として、キーワードを返すわけだがー…。

:使用したくない文字(記号)の削除、置換(Main MarkovChain.Memorize.SentenceFilter関数)|次のフィルタが実装されている。
-チャット特有の記号の削除、置換
-URLのキック処理
-Sakuraスクリプト、葉梨スクリプトの削除
>他のGhostからの学習を前提に。ただし、この機能は未実装に終わっている。
 サンプルスクリプト
 ・Sakuraスクリプト削除
 _talk = RE_REPLACE(_talk, "\\_?[[:alpha:]](([[:alnum:]])?|(\[(.*?)\])?)|\\!\[(.*?)\]|\\(\-|\+|_\+|[[:digit:]])", "")
 ・葉梨スクリプト削除
 _talk = RE_REPLACE(_talk, "@0?(<|>|\||\+|\-|\=|\:|a|n|o|u|e|b|w|wavout)(\[(.*?)\])?", "")

-触りたくない記号の削除
>茶筌対策
-半角英字を全角英字に変換
>茶筌対策

:茶筌による解析(Sub ChasenRequest)|フィルタにより、余計な文字を全て消した上で茶筌による解析を行う。
-出力は簡易配列の形で返すようにし、RE_SPLITすることにより、二次元配列に変化するように仕向ける。こうすると、WinChaで表示しているように取得できるので、全く苦労しない。~
出力された結果は、基本的に一つずつ判断していくことになるので、foreachにより一つの要素を抜き取り、それを簡易配列として扱えばよい。

:品詞の確認(Main MarkovChain.Memorize)|上の通り、foreachにより一つの要素を抜き取り、それを簡易配列として扱っている。
-記号は基本的にスルー。
-if文で、(感動詞)、あるいは、(数、非自立、代名詞、特殊、接続)を含まない、かつ、名詞を含む品詞、あるいは、(記号)を含まない(形容詞)が含まれること……にヒットするものを一時的にキーワードとして保存する。
-品詞が名詞-数である場合、茶筌によってばらばらにされた数字を一まとめにするため、一時的に保存していき、固めていく。

:記憶を行う(Main MarkovChain.Memorize.Pattern)|ここでマルコフ連鎖として、ばらばらにされたパーツを保存する。
-Sub SQLSearchRequestを中心に、要素を順番に5つ並べ保存していく。
>本来、人工無能で扱うマルコフ連鎖は3つずつ並べていくタイプが多い。しかし、ミストは一般ユーザー向けの人工無能として開発していかなければならず、未熟なりにでもまともな返答を行いたいという意地もある(ぉぃ)。3つずつ覚えさせて出力すると、処理の甘さから電波文になりやすい。そこで、3〜5つの要素を状態に合わせて使い分けるようにしている。


*全体の処理の流れ 文章生成(MarkovChain.Remember系関数)編 [#ja6595b1]
:概説|記憶に比べると、記憶したものにしたがって単語を並べていくだけなので、いたってシンプルである。
-返り値として、Sakuraスクリプトも何も含まない文章が返される。
-Sakuraスクリプトとかシェル指定とかどーしてるの?というのはもう少し後で。

:キーワードに感動詞がある場合、特別な処理を行う。|(おはよう、こんにちは、こんばんは、さようなら、おやすみ)がそれに当たる。スクリプト内で品詞を見ずに単語のほうを見ているのはver2.x時代の名残……ということにしてくださいお願いします(ぅぉぃ

:これ以下は作成中ー(ぉぃ|ここに書くのもどうかと思いますがw

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS