特定のひらがなのみを含む単語を大量に用意する(1)辞書を用意して単語リストを作る
特定のひらがなのみからなる単語を大量に用意することについて考えていく。
動機
初学者のタイピングの指導の方法として、まず「a, i, u, e, o」を覚えさせてから、あとは適当に日本語を打たせるという方法がある。しかし、記憶力の低い生徒にこの方法を取らせるのは難しい。
全部のキーを一度に覚えさせるのは無理として、スモールステップで指導することに決めたとする。まず、a, i, u, e, oのみをランダムに練習させれば5文字を確実に覚えさせればこれぐらいはなんとかなるのではないか?と普通は考える。しかし、そんなに話は簡単ではない。5文字をランダムに繰り返す練習の単調さに耐えらない生徒がいるからである。このような生徒は、練習に耐えきれず5文字すら覚えきれないということが起こりうる。
5文字では退屈、でも、全部のひらがなを使って練習させるのも複雑すぎて無理。そこで、その中間段階の練習をいくつか用意しておきたい。例えば、「a,i,u,e,o」と「k, s」を覚えさせて、「あ行・か行・さ行」の単語をひたすら打たせる、といった練習を用意したいということである。
このような練習を行うためには、「ある特定のひらがなのみから構成される単語」を大量に用意しておく必要がある。実は、タイピング練習帳にはこの手の単語が用意されている。ただし、単語数が少なく自分の思うようにも調整ができない。よって、この不満を解消しようと考えたのが以下の話である。
辞書の用意
単語がずらずらと並んでいるcsvファイルをまずは作る。MeCabについている辞書を使うことにした。もっと良い辞書がありそうだが、よくわからないのでこれにした。
https://sourceforge.net/projects/mecab/files/mecab-ipadic/
mecab-ipadic-2.7.0... をダウンロードして解凍すると、いろんなcsvがでてくる。
品詞ごとに単語が分類されている。たとえば、Noun.csvは名詞の一般名詞のみを集めたファイルとなっている。
以下、Noun.csvを例に考えていく。複数ファイルに同じ処理をするときは適当にワイルドカードなどを組み合わせて一括処理することにする。
このcsvファイルの文字コードはEUCとなっている。このままでは使い勝手が悪いので、nkfでutf8に変換してしまう。
nkf -w --overwrite Noun.csv
1行目を見ると
仕舞い,1285,1285,5543,名詞,一般,,,,,仕舞い,シマイ,シマイ
となっている。これが何を意味しているのかはよくわからない。ヘッダの説明のようなファイルもみつけられない。いろいろgoogleに聞いてみると、MeCabの辞書追加方法でみつけたのがこれ。
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
(MeCabの単語の追加方法http://taku910.github.io/mecab/dic.html より)
名詞を考えるときは、読みの列のみを取り出してしまえば良さそうである。(品詞によっては活用形などの考慮も必要なのでもっと丁寧に処理しないとだめ)
一部の列を切り出す方法はいろいろとありそうだが、ここではawkで切り出しておく。
awk -F , '{print $12}' Noun.csv > Noun_yomi.csv
CSVファイルなので-Fでファイルセパレーターにカンマを指定しておく必要があることに注意しておく。作成したNoun_yomi.csvの最初の数行を見ると
シマイ
アヤギヌ
ヨウサイ
クミウチ
キナイ
などとなっている。カタカナのままでも良いが、ひらがなにしておくことにする。
nkf --hiragana --overwrite Noun_yomi.csv
また、同じ読みの単語は一回のみあれば良い。よって、それも整理しておく。
cat Noun_yomi.csv | sort | uniq > Noun_yomi_a.csv
これで単語がずらずらと並んだファイルができた。あとはこれから条件を満たす単語を抜いていくだけである。
1/26追記
awkで列を切り出すのは筋が悪い。cutで切り出すのが普通みたい。
cut -d , -f 12 Noun.csv
-d , でセパレーターをカンマとして、-f 12で12列目を指定する。
もっとも、最初は使い慣れてるRで列を切り出してたわけなのですが・・・