日本語文を学習し、毒電波文を出力するソフトです。
汎用的に使えるものを目指したため、外部からDirectSSTPのコマンドを受けて動作します。
動作には.NET Framework 2.0が必要です。
こんな感じ

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