日本語文を学習し、毒電波文を出力するソフトです。~
汎用的に使えるものを目指したため、外部からDirectSSTPのコマンドを受けて動作します。
&color(Red){動作には.NET Framework 2.0が必要です。};
* こんな感じ [#f48361ba]
&attachref(./dokudenpa.png,nolink);
* ダウンロード [#c5b6ca75]
&color(Red){現在はβ版の為、今後コマンド等の仕様が変わる可能性があります。&br;ご注意下さい。};
&attachref(./dokudenpa_0_5_0.zip); 2006/12/02 version 0.5.0
* このプログラムを使った応用例 [#pc739e5f]
- [[./IRCBOT]]
- ゴースト
* 使い方 [#d4da82ca]
- 単語辞書はデフォルト状態では同ディレクトリの dokudenpa.db です。
- 単語辞書を消去すると起動時に再作成します。
- 設定ファイルは同ディレクトリの dokudenpa.opt です。
** 単独での使い方 [#k20e3ce2]
- 起動するとタスクトレイにアイコンが出ます。
- アイコンを右クリックするとメニューが出ます。
- このままでは何も単語を覚えていないので、何も喋れません。
- [テキストの学習]…適当なテキスト(複数行可能)を貼り付けてください。内容を読んで学習します。
- [ファイルから学習]…ファイル(複数選択可能)を選択してください。内容を読んで学習します。
- [URLから学習]…URLを入力してください。内容を読んで(略)
- ある程度学習できたら、アイコンをダブルクリックしてください。電波文を話します。
- 単語数が多くなると動作に時間がかかるようになります。再起動するとDBを整理しますが、それでも駄目な場合は、[DBの切り詰め]を行って単語を減らしてみてください。
- PCのパワーにもよりますが、大体10万単語を越えると重く感じました。
- [コマンドライン]…後述のコマンドを打ち込むことができます。
** DirectSSTP インタフェース [#pde50665]
- このプログラムはDirectSSTPのインタフェースを持っています。
- 起動中は、FMO "dokudenpa_id" に、自分のウィンドウハンドルを書き込んであります。
- id の部分は、デフォルトでは default です。起動時にコマンドライン引数として id を与えると、それがそのまま id になります。
- 例えば、dokudenpa.exe hogehoge とすると、FMO "dokudenpa_hogehoge" を持ちます。
- 同一 id のプロセスは同時起動できません。起動しようとするとそのまま終了します。
- FMOの中身は&color(Red){(現在の版では)};Hwndのみです。
- 先頭4バイトを int として読み込み、ウィンドウハンドルとして使ってください。
- SSTPは NOTIFY SSTP/1.1 のみ対応しています。
- 受け付けるEventは、OnDokudenpaCommand のみです。
- Reference0に、後述のコマンドを1行記述してください。
- SSTPを受けると、コマンドによっては以下の返信をSSTPで行います。
- 返信の Event は、OnDokudenpaDokudenpaResult、OnDokudenpaCommandResult、OnDokudenpaError のいずれかです。
- Reference0以降の値はEventによって異なります。
(SSTPの例)
#pre(){{
(受信:他プログラム→どくでんぱ。)
NOTIFY SSTP/1.1
Sender: SSTPLib1.0
Event: OnDokudenpaCommand
Reference0: dokudenpa
HWnd: 591372
Charset: UTF-8
(返信:どくでんぱ。→他プログラム)
NOTIFY SSTP/1.1
Sender: SSTPLib1.0
Event: OnDokudenpaDokudenpaResult
Reference0: さというのかと、ほとか言うのご家族のっぴとをそらした!
HWnd: 5768756
Charset: UTF-8
}}
* 仕様 [#wf3d7075]
** コマンド一覧 [#ibdbb628]
- コマンドと引数の間は半角スペース1文字で区切ってください。
|コマンド|引数|動作|返信SSTPEvent|Ref.0|Ref.1~|備考|h
|close|-|毒電波を終了します。|-|-|-|-|
|dokudenpa|キーワード|キーワードに基づいて毒電波文を生成します。|OnDokudenpaDokudenpaResult|毒電波文|-|キーワードを省略した場合は適当に単語をみつくろって反応します。|
|dokudenparandom|文章|文章から単語をランダムに選んで、それをキーワードとして毒電波文を生成します。|OnDokudenpaDokudenpaResult|毒電波文|-|-|
|gakusyu|文章|文章を学習します。|-|-|-|-|
|gakusyufromfile|-|ファイルから学習ダイアログを開きます。|-|-|-|-|
|gakusyufromurl|URL|指定したURLの内容を学習します。|-|-|-|-|
|count|-|現在の単語数を数値で返します。|OnDokudenpaCommandResult|1|単語数|-|
|option|key=value|オプションを設定します。|-|-|-|key=valueを指定しない場合、現在のオプション一覧を表示します。|
|analyze|-|DBにanalyzeをかけます。|-|-|-|-|
|compact|-|DBの切り詰めを行います。|-|-|-|-|
|@~|-|@が先頭に付いた場合、それをSQLとして解釈し結果を返します。|OnDokudenpaCommandResult|結果行数|結果(複数行)|結果は100行までしか返しません。|
- 毒電波生成時に、Ref.0が"busy"になることがあります。その場合は現在毒電波を生成中ですので、生成し終わるまで待って再実行してください。
** オプション一覧 [#h223d03f]
|コマンドでの記述|設定ファイルでの記述|形式|内容|h
|maxlength|maxlength|数値|毒電波文生成時の最大長|
|lineend|lineend|文字列|毒電波文の最後につく文字の候補|
|balloon|isBalloonHint|true/false|バルーン表示あり/なし|
|不可|databasename|文字列|データベースファイル名を指定します。|
|不可|isTraceWnd|true/false|起動時のトレースウィンドウ出力あり/なし|
** DB構造 [#h8d140f7]
- テーブルは tangotbl のみです。
|カラム名|内容|h
|main|メインとなる単語|
|pre|mainの前につく可能性のある単語、空欄の場合あり|
|post|mainの後につく可能性のある単語、空欄の場合あり|
|count|pre-main-postの組み合わせが何回出てきたか(1ずつカウントアップ)|
- DBの切り詰めを行うと、countの最小値のレコードが削除されます。
** 毒電波生成方式概要 [#dd0ce1ed]
- まず入力文から、英単語や記号を取り除き、日本語文字列のみに分解します。
- 形態素解析は、辞書を使わず、文字種(ひらがな、カタカナ、漢字、その他)の区切りや、「の」「は」「から」といった助詞によって分解しているだけです。
- 分解された単語の組み合わせを、pre-main-post の形式で(1単語ずつずらして)DBに書き込みます。すでにあればカウントアップします。
- 毒電波生成にはキーワードを用います。
- キーワードが main と合致(或いはキーワードを含む)レコードから、
- preを辿っていき、空欄になるまで文字列を合成します。
- 次にpostを辿っていき、同じことを行います。
- count の大きさが、そのレコードが選ばれる確率の大きさになります。
- 生成結果の先頭が助詞であった場合、それを取り除きます。
- 最後に、オプションのlineendから1文字選んでくっつけます。
- 生成された結果が元のキーワードと同じであった場合は何も返しません。