* 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.5)


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

動作には.NET Framework 2.0が必要です。

こんな感じ

dokudenpa.png

ダウンロード

現在はβ版の為、今後コマンド等の仕様が変わる可能性があります。
ご注意下さい。

filedokudenpa_0_5_0.zip 2006/12/02 version 0.5.0

  • 2006/12/02 version 0.5.0 新規作成
  • 2006/12/05 version 0.6.0 Mecab対応
    • 分かち書きにMecabを利用するようにしました。
    • 危険なコマンドには権限設定が可能なようにしました。
    • 入力文字列のクリーンアップ用の正規表現を、オプションで変更可能にしました。
    • オプションが大きく変わっている為、dokudenpa.optを消去し、再起動して作り直すことをお勧めします。
    • その他細かい修正を行っています。

このプログラムを使った応用例

使い方

  • 単語辞書はデフォルト状態では同ディレクトリの 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文字で区切ってください。
コマンド引数動作返信SSTPEventRef.0Ref.1~備考
close-毒電波を終了します。----
dokudenpaキーワードキーワードに基づいて毒電波文を生成します。OnDokudenpaDokudenpaResult毒電波文-キーワードを省略した場合は適当に単語をみつくろって反応します。
dokudenparandom文章文章から単語をランダムに選んで、それをキーワードとして毒電波文を生成します。OnDokudenpaDokudenpaResult毒電波文--
gakusyu文章文章を学習します。----
gakusyufromfileファイル名ファイルから学習を行います。---ファイルが指定されない場合ダイアログを開きます。
gakusyufromurlURL指定したURLの内容を学習します。---URLが指定されない場合ダイアログを開きます。
count-現在の単語数を数値で返します。OnDokudenpaCommandResult1単語数-
optionkey=valueオプションを設定します。---key=valueを指定しない場合、現在のオプション一覧を表示します。
analyze-DBにanalyzeをかけます。----
compact-DBの切り詰めを行います。----
@~-@が先頭に付いた場合、それをSQLとして解釈し結果を返します。OnDokudenpaCommandResult結果行数結果(複数行)結果は100行までしか返しません。
  • 毒電波生成時に、Ref.0が"busy"になることがあります。その場合は現在毒電波を生成中ですので、生成し終わるまで待って再実行してください。

オプション一覧

コマンドでの記述設定ファイルでの記述形式内容
maxlengthmaxlength数値毒電波文生成時の最大長
lineendlineend文字列毒電波文の最後につく文字の候補
balloonisBalloonHinttrue/falseバルーン表示あり/なし
不可databasename文字列データベースファイル名を指定します。
不可isTraceWndtrue/false起動時のトレースウィンドウ出力あり/なし

DB構造

  • テーブルは tangotbl のみです。
カラム名内容
mainメインとなる単語
premainの前につく可能性のある単語、空欄の場合あり
postmainの後につく可能性のある単語、空欄の場合あり
countpre-main-postの組み合わせが何回出てきたか(1ずつカウントアップ)
  • DBの切り詰めを行うと、countの最小値のレコードが削除されます。

毒電波生成方式概要

  • まず入力文から、英単語や記号を取り除き、日本語文字列のみに分解します。
  • 形態素解析は、辞書を使わず、文字種(ひらがな、カタカナ、漢字、その他)の区切りや、「の」「は」「から」といった助詞によって分解しているだけです。
  • 分解された単語の組み合わせを、pre-main-post の形式で(1単語ずつずらして)DBに書き込みます。すでにあればカウントアップします。
  • 毒電波生成にはキーワードを用います。
  • キーワードが main と合致(或いはキーワードを含む)レコードから、
  • preを辿っていき、空欄になるまで文字列を合成します。
  • 次にpostを辿っていき、同じことを行います。
  • count の大きさが、そのレコードが選ばれる確率の大きさになります。
  • 生成結果の先頭が助詞であった場合、それを取り除きます。
  • 最後に、オプションのlineendから1文字選んでくっつけます。
  • 生成された結果が元のキーワードと同じであった場合は何も返しません。