タイピング練習用ワードジェネレータver0.0.1公開
タッチタイピングを短時間で効率よく習得するためにはランダムに選択された文字列を打っていくよりもある程度性質の似通った単語を集めて,段階的に練習していく方が良いと考えます.このソフトはそういった「ある性質を持った文字列」を辞書の中から手軽に収集することができます.
- ダウンロード
- ワードジェネレータのダウンロード
- 動作環境
- Windows 2000/XP/Vista
- 実行に必要なもの
- 特になし
例によってエラー処理とかほとんどしてないので,ちょっと記述を間違えると問答無用で落ちたりすると思いますが,基本的な使い方は単純なので軽くいじってもらえればと思います.プログラムが落ちたらたいてい,直前に編集した設定ファイルが原因だと思いますので,もとに戻してみてください.
(いつもいつも投げやりですいません)
詳しい開発モチベーションは前の記事を参照のこと
練習用ワードジェネレータ - tomoemonの日記
ワードジェネレータの仕様が大体固まった - tomoemonの日記
このソフトでやりたいこと
上のリンクにも書いていますが,あるキーボード配列を使ったときに「右手だけで打てる単語」「ホームポジションだけで打てる単語」「右手と左手の交互で打てる単語」といった単語を辞書から抽出してリストアップすることです.抽出した単語は出題ワードを自由に切り替えられるタイピングソフト(打トレなど)で練習に用いることができます.
正規表現について
そんなに難しい話ではないんですが,文章だけで説明すると無駄にややこしくなりそうだったので,いくつか画像を用意してみました.まず「検索」について簡単に説明します.
「検索」というのはある特定の性質を持つ文字列を見つけ出してくることです.例えば「なのは」という検索ワードを指定したら一文字目に「な」二文字目に「の」,三文字目に「は」という文字を持つ文字列を探してこいという意味になります.そのまんまですがw
ここで注意したいのは「なのは」という検索ワードは「なのは」という文字にしかヒットしません.これだと上で挙げたような曖昧な性質を持つ単語を見つけることはできません.
そこで登場するのが「正規表現」です.これを使うことで曖昧な検索ワードを指定することができます.例えば「な(の|にょ)は」は「なのは」か「なにょは」という単語を見つけることができます.縦棒|はどちらかに一致するという意味です.
このようなある種コマンドのようなものを使うことで何種類もの単語を一つの検索ワードで同時に見つけ出すことができます.
この図では「あいうえお」だけの文字で構成される単語を見つけるための検索ワード「^[あいうえお]+$」の例が書いています.^は文字の先頭,[]はその中にある文字のうちのどれか一つ,+はその繰り返し,$は文字列の最後を指します.この組み合わせによって「いあい」「おいえ」などの単語を見つけることができます.
参考:TÉàí©é³K\»üå
運指表や配列表との対応付け
正規表現にはさっきのような便利なコマンドが用意されていますが,さすがに「左手だけで打てる文字」なんて便利なものはありません.逆に言えば,そういう便利なコマンドを追加したのがこのソフトになります.
まず,「左手だけで打てる文字列」を見つける方法ですが,これは簡単に運指表と配列表を下のように対応づけるだけです.この図のようなデータを用意できれば,左手で打てる文字は簡単にわかりますよね.
実際は運指表と配列表はそれぞれ以下のようなデータになります.
# 運指表 # 左手をl,右手をrで表現する # 指につける番号は1から9まで指定できる # 出力条件で運指表の表番号を指定しない場合は一つ目の表を使う - - l5 l4 l3 l2 l2 r2 r2 r3 r4 r5 r5 r5 r5 - l5 l4 l3 l2 l2 r2 r2 r3 r4 r5 r5 r5 - l5 l4 l3 l2 l2 r2 r2 r3 r4 r5 r5 r5 - l5 l4 l3 l2 l2 r2 r2 r3 r4 r5 r5 # 実際の運指表とは関係なく使用したい文字のブロックに # 同じ指記号を割り当てると出力条件をスマートに書くことができる - - l2 l2 l2 l2 l3 l3 l3 l3 l5 l5 l5 l5 l5 - l2 l2 l2 l2 l3 l3 l3 l3 l5 l5 l5 l5 - l1 l1 l1 l1 l3 l3 l3 l3 l4 l4 l4 l4 - l1 l1 l1 l1 l3 l3 l3 l3 l4 l4 l4
# JISかなの配列表 # シフト無し - - ぬふあうえおやゆよわほへー - たていすかんなにらせ゛゜ - ちとしはきくまのりれけむ - つさそひこみもねるめろ #シフト有り #シフト無しの表と同じ文字になっているキーを「無」にするか #「同じ文字」にするかは抽出したいワードの性質や #抽出条件の書きやすさに応じて好きに変えるべき. - - ぬふぁぅぇぉゃゅょをほゑー - たてぃすヵんなにらぜ「 - ちとしゎきくまのりれヶ」 - っさそゐこみも,.・ろ
参考までにこのデータはYAMLという形式で書かれています.いじりたい場合は「-」なんかの記号はそのままにして文字だけ変えてもらえばいいので,詳細を知る必要はありませんが,気になる方は下のサイトが必要最低限のことをまとめてくれています.
参考:403 Forbidden
実際の使い方とコマンドの動き
このソフトを使ってみる際は細かい設定ファイルは気にせず,generate.ymlというファイルをメモ帳で開いて*1以下の部分を編集してからプログラムを起動してみてください.
「extract:」の右側の部分が検索ワードの指定になります.怪しい文字が並んでいますが,基本的には先ほど説明したものと同じで,それに加えて#で囲んだこのソフト独自のコマンドが入っています.
# 47行目 extract: ^(#LF5##LF2#)+$
このコマンドの意味はgenerate.ymlに詳しく書いていますが,簡単には以下の図のような感じです.
#LF5#というのは「左手小指で打てる文字」という意味で,先ほどの配列表と運指表から「ぬたちつ」であることがわかります.プログラム側でこのコマンドを実際の文字に置き換えて検索を行うことで,これらの文字で構成された単語を見つけることができます.
ちなみに#で囲まれた独自コマンドの中で正規表現を使うとかメタメタなことはできませんのでご容赦ください.ただし,例外的に否定を意味する^記号だけは#のすぐあとで指定することができます.
辞書の指定
それと,ワード抽出に関するもう一つの重要な設定に辞書ファイルの指定があります.デフォルトですべての辞書を使用する形にしても良いのですがmecab-ipadicだけで数10MBほどあって毎回時間がかかるのもあれですので,使いたいものだけ任意に選択してもらうことになります."mecab-ipadic-2.7.0-20070801"フォルダの中にあるcsvファイル名をコンマ区切りで指定してください.
# 53行目 select_dict: [Adnominal.csv, Adj.csv, Noun.csv, Noun.name.csv, Noun.place.csv, Verb.csv]
では,簡単ですが説明終わりです.ソフトの出力結果や,ソフトそのものはお好きに使ってください.タイピングソフトに組み込んでくれたりしても構いませんので,なにか面白いものができたら教えていただけると嬉しいです.
以下,できたらいいなと思ってること.
- コマンドラインオプションの指定.外部プログラムから使用する際にいちいち設定ファイルを書き出さなくてもいいように.
- 設定ファイル読み込み時のエラーチェック.むしろなぜ入れてないのだと突っ込まれそうです.
- GUIから操作できるなにか.
- WebサーバにのっけてWebAPI化.
- 単語同士を組み合わせて文章作成(ウェザタイ的な)
*1:関連づけするかメモ帳にドラッグ&ドロップ