* U K I Y A H O N P O *
Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura,
che la diritta via era smarrita.
リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
浮子屋商店もよろしく。

自作ソフト一覧/どくでんぱ。 のバックアップ差分(No.3)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
日本語文を学習し、毒電波文を出力するソフトです。~
汎用的に使えるものを目指したため、外部からDirectSSTPのコマンドを受けて動作します。

動作には.NET Framework 2.0が必要です。
&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]

- IRC-BOT [[./IRCBOT]]
- [[./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文字選んでくっつけます。

- 生成された結果が元のキーワードと同じであった場合は何も返しません。