トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS

Windowsでしりとりシステムを作る

Last-modified: 2010-12-03 (金) 23:49:20
Top / Windowsでしりとりシステムを作る

バッチファイルを作る

Hello World をやってみる

  • ここからの転載です。以下のファイルを作ってみてください。
  • testBatch1.bat
    @echo off
    cls
    echo.
    echo Hello World, press any key to start AProgram.exe!
    pause > nul
    AProgram.exe
    echo.
    echo AProgram has finished whatever it was doing. Have fun today!
    • cls … ウインドウをクリア
    • echo … 文字をディスプレイに表示
    • pause > nul … Enterキーを押すまでウェイト
    • Aprogram.exe … 同名ファイルを実行(ここでは、まだありません)
  • ファイルをダブルクリックするか、コマンドプロンプトでファイル名を指定すると...
     batch1.png

テキスト入力

  • ここからの転載です。
  • testBatch2.bat
    DIR /W
    rem ディレクトリの内容を一覧表示
    DIR > TEST.txt
    rem ディレクトリの内容を、TEST.txt に書込み
    C:\WINDOWS\NOTEPAD.exe TEST.txt
    rem ノートパッドを起動して、TEST.txt を表示
    DEL TEST.txt
    rem TEST.txt を削除
    EXIT
    rem MS-DOS を終了
    • rem 以下の文字列は注釈になります。
  • 実行するとノードパッドが開き、ノートパッドを終了すると、続けて testBatch2.bat も終了します。

無限ループ

  • .BATリファレンスマニュアル を参考にしました。
  • testBatch3.bat
    @echo off
    cls
    echo.
    :start
    echo Enterキーを押して下さい
    pause > nul
    if errorlevel 1 goto end
    goto start
    :end

Perl の実行環境

  • ActivePerlをダウンロードする
    • 参考 : ActivePerlのインストール方法 - Windows で perl を使おう!
    • Active Perl 5.8.8.822 、 Windows (x86) 、 MSI をダウンロードする。
      • X86 : 32ビット環境、 X64 : 64ビット環境 のようです。
    • ダウンロードしたファイルをダブルクリックしてインストール開始。
    • インストールが終わったら Windows を再起動。
  • 確認
    • コマンドプロンプトで、
      perl -v

Java の実行環境

  • JDKをインストールする
  • ユーザ環境変数を設定
    変数
    JAVA_HOME(JDKフォルダのパス)
    PATH%JAVA_HOME%\bin
    CLASSPATH.;%JAVA_HOME%\lib\tools.jar
  • 確認
    • コマンドプロンプトで、
      javac

Julian 孤立単語認識を実行してみる

辞書ファイルを作る

  • とりあえず、以下のようなファイルを用意しました(詳細は julian-isoword-kit-v2.0 の HowTo.txt を参照)。Julian孤立単語認識のテキスト辞書形式です。
    • siritori.txt
      #
      # 第1フィールド:単語表記
      # 第2フィールド:よみ (ひらがな,もしくはスペースで区切られた音素列表記)
      # 
      しりとり しりとり
      りんご りんご
      ごりら ごりら
      らっぱ らっぱ
      ぱいなっぷる ぱいなっぷる
      るびー るびい
      いるか いるか
      かめ かめ
      めだか めだか
      かも かも
      もぐら もぐら
      • 文字コード問題が未解決のため、EUCで書かれたこれを使用してください。
      • Windows 環境で EUC のテキストを編集したい場合は、サクラエディタなどを使って、保存するときに EUC を指定します。
  • 認識辞書に変換しておきます。
    • siritori.txt を julian-isoword-kit-v2.0 フォルダにおき、同フォルダ内に移動して、
      perl make_dict.pl siritori.txt > siritori.dict
  • ついでに、jconf.julian の単語辞書の設定を「 -v siritori.dict 」に変えておきます。
  • 実行してみましょう。
    bin\julian -C jconf.julian

音声合成を実行してみる

#!/usr/local/bin/perl
# CmdTalkで今日の日付を読ませる
my $cmdtalk = 'CmdTalk.exe'; # CmdTalk.exeの置かれているパスを指定
# システムから現在の日付を取得
($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime(time);
# コマンドトーク用の音声記号列を生成
my $koe =
sprintf("きょ'ーわ、<NUMK VAL=%d COUNTER=がつ>;<NUMK VAL=%d COUNTER=にち>'です。", $mon +1, $day);
# コマンドトークを起動
`$cmdtalk "$koe"`;
  • ファイルをダブルクリックか、コマンドプロンプトでファイル名を指定して実行します。
  • アクセント位置は「'」記号で指定します。指定しなくても、不自然ではありますが、再生できます。
  • 表記法は、AquesTalk 音声記号列仕様 を参考にしてください。

しりとりシステムを作る

  • ここまでの内容をまとめて、ひとつのシステムにします。
    • ファイルの階層構造は以下のようになっているとして、説明を続けます。
      siritori1.png
  • 録音用Javaプログラムを作ります。
  • julian-isoword-kit-v2.0 フォルダの jconf.julian 内のパラメータ「音声入力ソース」を、「-input mic」ではなく「-input rawfile」に変えておきます(# 記号を入れ替え)。
  • しりとり加工ファイルを作ります。
    • ユーザの入力に対して、システムの応答処理を記述したプログラムと辞書です。
    • 大橋君の作ってくれた(一部プログラムを加えてあります)、Search.javadictionary をダウンロードして使ってください。
    • コンパイル
      javac Search.java
  • バッチファイルを作ります。
    • siritori.bat → ダウンロード
      @echo off
      cls
      echo.
      rem 無限ループ開始
      :start
      echo 入力待ち...
      java HelloWorldRecorder
      echo hello.wav | 
        julian-kit-v3.0-win\bin\julian -C julian-isoword-kit-v2.0\jconf.julian > output.txt
      rem ↑ここは実際には、改行しないでください。
      java Search
      answer.pl
      if errorlevel 1 goto end
      goto start
      :end
    • バッチファイルを実行してください。システムとしりとりができれば、成功です!

問題点

  • フリーの音声合成ソフトを使っているため、合成音のピッチ・発話速度などを変更できません(たぶん)。合成エンジンは Fine Speech 等で書き直す必要があります。
  • Julianの操作が良く分かっていないため、外部の録音プログラムなどを使っていて効率が悪いです。
  • 文字化け問題が未解決。そのため、ユーザの音声の認識結果の最後の文字が「??」等になってしまうことも多く、その場合しりとりが成立しません。
    • EUC テキスト行末の改行コードに、 UNIX のものと LINUX のものが混ざっているのが原因ではないか、と意見をいただきました。田中君、ありがとう!
    • Cygwin の nkf コマンドを使えば、うまくいくようです。
    • Cygwin の インストール方法と、nkf コマンドの実行方法は以下の通り。
      • ここ などを参考に、Cygwin をインストールします。
      • インストールが無事にすんでいれば、コマンドプロンプトから nkf コマンドを実行できるはず(たぶん..)なので、試してみます。例えば、Shift-JIS で書かれた test_nkf.txt を、EUC に変換してみます。
      • 上記ファイルを C:\Documents and Settings\ユーザ名 以下などに置いて、コマンドプロンプトで
        nkf -e test_nkf.txt > test_nkf_euc.txt
      • これで、EUC のファイル test_nkf_euc.txt ができました。
    • 20090212 juliusではオプションで対処可能。
      % ~~/julius -C fast.jconf -charconv euc sjis
      • julianでもうまくいくかどうかは未確認です。