特定のひらがなのみを含む単語を大量に用意する(1)辞書を用意して単語リストを作る

特定のひらがなのみからなる単語を大量に用意することについて考えていく。

動機

初学者のタイピングの指導の方法として、まず「a, i, u, e, o」を覚えさせてから、あとは適当に日本語を打たせるという方法がある。しかし、記憶力の低い生徒にこの方法を取らせるのは難しい。

全部のキーを一度に覚えさせるのは無理として、スモールステップで指導することに決めたとする。まず、a, i, u, e, oのみをランダムに練習させれば5文字を確実に覚えさせればこれぐらいはなんとかなるのではないか?と普通は考える。しかし、そんなに話は簡単ではない。5文字をランダムに繰り返す練習の単調さに耐えらない生徒がいるからである。このような生徒は、練習に耐えきれず5文字すら覚えきれないということが起こりうる。

5文字では退屈、でも、全部のひらがなを使って練習させるのも複雑すぎて無理。そこで、その中間段階の練習をいくつか用意しておきたい。例えば、「a,i,u,e,o」と「k, s」を覚えさせて、「あ行・か行・さ行」の単語をひたすら打たせる、といった練習を用意したいということである。

このような練習を行うためには、「ある特定のひらがなのみから構成される単語」を大量に用意しておく必要がある。実は、タイピング練習帳にはこの手の単語が用意されている。ただし、単語数が少なく自分の思うようにも調整ができない。よって、この不満を解消しようと考えたのが以下の話である。

辞書の用意

単語がずらずらと並んでいるcsvファイルをまずは作る。MeCabについている辞書を使うことにした。もっと良い辞書がありそうだが、よくわからないのでこれにした。

MeCabについているipa辞書のファイル

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で列を切り出してたわけなのですが・・・

それなりの入力速度がないと作文にPCという選択は消されやすい

PCを作文に使うことを前提にしたとき、どの程度の入力技能が身についていればストレスなく使うことができるのだろうか?

情報の人間のはしくれとしては、生徒の「手書きを好むからPCが合わないからいかなる場合も使わない」という言は「自分のキーボード入力の技能がPCを作文に使える水準まで達してない」をオブラートに包んで表現しているようにしか見えない。では、どれぐらいのキーボードの習熟度があれば、特性に関わらず(例えば、整った字が書けないのなら、PCの習熟度に関わらず消去法でPCが選択される)PCを作文に使うことが検討に上がってくるのだろうかを考えたい。それに関連した数値をだらだらと書いていく。

手書きと同等の速度は最低線(1分40文字)

PCの入力については、手書きととんとんになるのが1分で40文字(漢字変換もして)と考えておけば良い。経験則ではあるが、ソースもいくつかはある(ただし、少し根拠としては薄い)。もっとも、これは手元で実験すれば良いだけの話である。そして、その結果、そう大きな誤差はないだろうと思っている。よって、どんなにコンピュータが苦手でも1分40文字のラインは目指すように指導することが多い。

PCを作文に使う場合は、書かれている文字を清書する形で入力する場合より条件が良い。よって、清書で計測される速度は少し少なくても良いという考え方はありえる。以下、条件が良いと考えられる理由2つ。

  1. 入力速度の計測は、通常他人が書いた文字を目で見て入力することによって計測する。しかし、作文の場合は自分の中にあるものを書けばよいので、見るという動作が省略できる。よって、早く打てる。
  2. 入力速度の計測は通常5分や10分のまとまった時間で行われる。しかし、作文の場合は思いついた文を打つのはせいぜい30秒ぐらいの連続した時間である。よって、5分もコンスタントに速度をキープできる必要はない。

ただし、タッチタイピングが無意識でできるようにしておくということについては厳しく追求しなければならない。考えながら打とうと思うと、タイピング動作に気を取られていると、考えが頭から消えるからである。

多くの場合、タッチタイピングを習得すべきとする理由はタイピングを早くするためである。しかし、私の場合は、それよりもタッチタイピングでないと「考える道具」としてPCを使えないという側面の方を重視している。よって、少々入力が遅くてもタッチタイピングの習得を優先して指導している。

理想を言えば(音声は1分300文字・・・)

1分40字だと手書きとPCの入力速度が釣り合うというだけである。手書きとPCの速度が同等の状態でストレスを感じずに書けるかは個人差があると思う。少なくとも私はこの程度の速度ではストレスを感じる。

私はローマ字では1分で90文字程度(日検のワープロ検定1級で測定)入力できる。しかし、ローマ字で作文をしてはストレスがたまる。JISかなだと1分100文字程度であるが、それでもストレスがたまる。加えてローマ字やかなだと手がからむのでストレスで仕方がない。

親指シフトであれば1分で140文字程度である。これでやっとストレスがたまらずに文章が書ける。アナウンサーが話す速度が1分300文字と言われている。その半分ぐらいになる。他人の文章なので遅いので、実際は1分180程度は瞬間で出ているとして、話す速度の6割である。

PCの作文を叩くなら条件を整えた状態で比較してからにしてほしい

生徒にPCを使わせたくない側の言い分として、手書きより遅いとかキーボードに思考を取られるからうまく書けなくなるから手で書かせたくないというものがある。情報側の人間からすると、遅いのを早くするように鍛えるのも教育とか、遅いことを痛感させて必然性を心からわからせるのも教育と言いたい。しかし、そういうことが通る世界でもない。

このような状況なので、情報を教える人間の端くれとしては、他教科の「PCで文字が打てなのでPCは使わせにくい」という言い訳はびしっと消しておきたい。少なくとも私が指導する場合は、そのように心がけて指導をしている。現在の情報教育の趨勢の中でそれを貫くのはストレスがかかるが。

だいたい、キーボードは冷遇されすぎである。手書きは国語で時間をとって小学校から鍛えている。キーボードだって文字を表現する手段としては同等である。だったら、国語でそれなりに時間を取って鍛えろという主張もしたくなる。

そもそも論に帰れば、ローマ字入力は国語科で小学校で身につけさせることになっているのである。なお、実は情報ワーキングにはしれっと間接的にそんなことも書かれている(基本操作はそもそも他教科で道具として使っているはずなんだから、高校段階でつまづいてたとした場合、情報科以外でも指導しろ。)。

なお、手書きが創造的な文章を作るなどという研究も承知はしている。しかし、だからといって、この世の中でPCで何も書かずに渡っていけるとは思えない。よって、PCを選択できない状態にするのは無責任であると考えているだけである。少なくとも、PCでの作文を放棄するのはPCでの作文をそこそこできるようになってからで良いのではないかと思う。

表(tablar)のセルにtcolorboxを使って問題と解答を切り替える

TeXで分割表の中の数値を埋めさせる問題の解答欄を作ることを考える。

外側の表自体はtabularで作るとして、その中の要素に問題と解答の切り替えの可能な箱を埋め込む。以下の画像のようなイメージ。

f:id:baruku07:20180121212410p:plain

今まで、この手の表中の数値はemathのhako.styの\maskHakoで作成していた。しかし、emathの箱型の解答の表示・非表示の切り替えはtcolorboxのオプションの切り替え(visible, invisible)とは別に、maskhakotrueとmaskhakofalseを切り替えないとならない。できればtcolorboxに一本化したいのでtcolorboxに置き換えることにした。

まず、箱はインラインボックスの形に見える。サンプルを眺めているとインラインボックスは\tcboxを使うのが適切に見える。しかし、tcboxは幅を指定できない(2/1修正・force centerなどのオプションを指定しない限り)。このようなときには、tcolorboxのnobeforeafterオプションを使う(と気づくのに15分かかった)。

\newtcolorbox{hyounum}{nobeforeafter,baseline=3mm,colback=white, colframe=black,width=4eM,height=1.8pc,boxrule=0.4pt, halign=center, valign=center}

{
 \renewcommand{\arraystretch}{1.4}
 \begin{center}
 \begin{tabular}{ccc}
 \hline
                   && ねこ  \\
 \hline
  男子       &\begin{hyounum} 1 \end{hyounum}   &\begin{hyounum} 9 \end{hyounum}   \\[0.5pc]
  女子       &\begin{hyounum} 8 \end{hyounum} &\begin{hyounum} 2 \end{hyounum}   \\[0.3pc]
 \hline
 \end{tabular}
 \end{center}
 }

ポイントはbaseline=3mmである。arraystretchでいろいろとずらしているので、box align = centerやbox align = baseではきれいにそろわない。そのため、baseline=で手動での調整が必要となる。

2/1追記

tcboxの制限はマニュアルをよく読まないとわからない。tcbox widthの部分を読んだ感じでは、tcbox width = auto以外を指定すれば幅を指定可能だと思われる。

現状は、とりあえず思った通りに動けばそれで良しとしている。なんとなくではあるが、インラインで埋め込むときには、tcboxでできることはtcboxで埋め込んだほうが良さそうな感覚もある。

作文で生徒がキーボードを「選べる」だけ恵まれている

最近、一部で見かけた議論に、作文は手書きで行うべきかPCで行うべきかというのがある。

穏当な結論は「手書きとキーボードのどちらが良いかは書き手に使い分けさせれば良い」になる。このような結論を出される方は平和な生徒しか見ていないのだなと思ってしまう。

しかし、それが通用しない恐ろしいレベルの場もある。「手書きで長文を書かすと遅くて読めない字が生産される。」「キーボード入力もできない」。これらをみていると、文字を記述できるというのも一つな立派な能力なのであると痛感させられる。

それなりの高校の生徒の場合、学校教育において手書きで文字を記述する力が訓練されていて、かつ、それなりに身につけられている。そうでない生徒は入試で選別している。文章を書かせる筆記試験というのは、暗黙に手書きの文字の記述能力も試験しているのである。その選別に耐えた生徒のみを集めた状況では、手書きを選ぶことができる。

これに対して、キーボードは誰もどこでも訓練させていない(建前は学校でやることになっているが)し、入試で選別される能力の対象ともなっていない。よって、キーボードで書ける能力がない。この状況で「自由に選ぶ」ことなどできるのだろうか?

キーボード入力をわざとできないような状態にしておいて、自由に選ばせて、「誰も選ばないのだから手書きのままで何ら問題はない」とするのは、PCに対する嫌がらせとしか思えない。

では、仮に「手書きを学校で訓練するのと同様に、キーボードが選択できる余地になる程度の訓練機会を与えよう」ということになったとしよう。しかし、これも「誰が」「どの時間で」訓練するのかということになる。だいたい、作文の議論をするのは多くは国語の教師と英語の教師である。そういった人々は、自分の教科の専門性とは関係ないので自分がやることではないと逃げる。

情報以外の先生の多くの先生の感覚は、情報に丸投げしておけば良いと思っている。確かに、情報A時代なら、情報でやればということでもよかった(それでも問題はあるが)かもしれない。しかし、高校情報では情報Aから社会と情報に移行したときに、単純操作には責任を一切持たなくて良いという風潮ができた。「単純操作は情報の専門の人が教えるべきことではない」という感覚である。となると、生徒にキーボードを打てるようにするのはどこの誰の専門?本来教えるべきとされている小学校?

さらに問題なのは、どの程度の時間をかければ手書きと同等の速度でキーボード入力ができるようになるのかという定量的なデータが不足していることである。5時間程度の訓練でそれが可能であれば、やらせれば済むということになる。しかし、50時間かかるのであればそれなりに制度そのものをやりくりしないといけない。また、キーボードの初期学習は単純暗記なので、これを50分・週2時間という枠組みで扱う(情報の授業)が適切なのかも議論が必要である。

キーボードの文字入力の習得について良く言われているのは「使っているうちに慣れる」である。半径3m以内の観測では、このアプローチで状況の悪化を引き起こしているケースをしばしばみかける。

最近、業務に関連してキーボードの習熟時間や入力速度分布の日本語で書かれたあれこれを収集した。しかし、私の情報収集能力では習熟に関する十分な量の定量的データを得ることはできなかった。特に習熟時間については、習熟時間の「平均値」以外があまりないような気がする。この手のデータは「最小値」「四分位数」がもっとも欲しいデータである。授業をするほうとしては、一斉授業は遅い生徒に引きずられるので、遅い生徒にどのぐらい時間をかければ手当ができるのかというデータが欲しいのである。

下位のキーボード入力の習熟に目を向けていくようになると、世間でいうタッチタイピング習得について書かれていること(習得までの時間の見積もりを含めて)は理想にしか見えなくなる。最初は、こっちの指導法の問題かと思って色々考えていたが、最近は「ネットに書かれている情報はある一定以上の学力の人向け」と割り切ることにしている。

ここ2年で、キーボード入力について様々なつまづきのケースが私の中に蓄積されてきた。対処もいくつか確立されてきた。ただ、症状の診断や対処の効果が出るまでの時間などが定量化されていないため、適切診断と対処がみつかるまでの時間ロスや、その対処で間に合うのか?という不安といつも戦っている。

仕方がないので、最近は自分でデータを取って色々考えられるような準備をしているところである。データの取れる環境にい続けられるかわからない不安定な身分ではあるが。

sedでファイル内のvisibleとinvisibleを切り替え

TeXのtcolorboxで解答を埋め込むプリントを作ったとき、ファイルの数が多くなると手作業でまとめて解答ファイルを作るのは手間。1個1個エディタで開いてinvisibleをvisibleに書き換えるのは人間的な作業ではない。

それが嫌で、解答ファイルをコンパイルする作業を先送りにする癖があって困っていた。しかし、この程度のことならsedで終わることに気づいた。

まず、マクロでvisibleのパラメーターを切り替えられるようにしておく。

\newcommand{\visible}{invisible}
\tcbset{いろいろ, \visible}

\tcbsetの中にvisibleを直接書かないのは、置換したときの意図しない挙動を防ぐため。

\tcbset{いろいろ,invisible}

とすると、どこかのファイルにinvisibleがある状態でvisibleをinvisibleに置換すると

  • visible -> invisible
  • invisible -> ininvisible

となって面倒になる。マクロで{visible}とか{invisible}とし、{}ごと検索にひっかければ、invisible中のvisibleにヒットすることはなくなる。

さて、他の部分に{invisible}などの記述はないものとする(あるならば、以下の置換の部分をrenewcommandから書いてやれば良い。)。

同一ディレクトリ中に、visibleをinvisibleに書き換えたいファイルのみを全部突っ込んでおいて、次のようにする。

 ls *.tex | xargs  gsed -i  's/{invisible}/{visible}/g'

(ファイルの上書き注意)

gsedでないと(macの場合)、-iが無いらしいのでgsedを(brewで入れて)使う。lsの検索条件も場合場合で適当に書き換えて使う。

あとは、ダブルクリックでTeXShopコンパイル。エディタで手で書き換えることに比べれば大した手間ではない。

ちまちまコンパイルするのが面倒なら

 ls *.tex | xargs ptex2pdf -u -l

とかで一括でコンパイルできるはず。

tcolorboxでテストの解答を埋め込んだファイルを作る

高校の数学のプリントやテストでは、問題用紙と解答用紙が一体になっているものが多い。このタイプのプリントやテストの解答は、問題用紙と同じレイアウトに解答を埋め込んだ形で作りたい。

このとき、問題ファイルと解答のファイルが別々になっていると不便である。基本的には、同一ファイル内で管理したい。

Studyaidは嫌い(Macでそもそも動かないし)なのでTeXで作るものとする。

TeXで作る場合は、emathのemathAeで提供されているKaitou環境やemathのhakoの\maskHako(解答が箱型の形状になっている場合)を使えば簡単に実現できる。

参考: emathのwikiの考査用雛形

しかし、

  1. emathを使いたくない
  2. 高さを簡単に調整したい(vfillなどで調整する必要がある)

というときにはやや使いにくい。

tcolorboxパッケージ(これはTeX Liveならデフォルトで入っているはず)のvisibleオプションを使うとこれが解決できる(2015/01/06の新機能)。

\begin{tcolorbox}[invisible]
かいとう
\end{tcolorbox}

とすると、解答が表示されない。invisibleの部分をvisibleにすると解答が表示される。

解答を埋め込むべき部分は、当然何箇所もあるので、

\newcommand{\visible}{invisible}

とプリアンプルでマクロを定義して、上のinvisibleの代わりに\visibleとしておく。すると、プリアンプルの部分だけ書き換えて解答の表示・非表示が切り替えられる。

tcolorboxを解答埋め込みにしか使わないのであれば、tcolorboxのパラメーター一括セットの機能を使う。

\tcbset{invisible}

として、全てのボックスにinvisibleの値をセットしておく。解答を表示したいときにはvisibleに切り替える。

tcolorboxはデフォルトの背景色が灰色で枠線も表示されるので、通常はこれらを消す設定も同時にしておく。tcolorboxを使う前(\begin{document}の直後とか)に

\tcbset{colframe=white, colback=white, invisible}

としておけば、

\begin{tcolorbox}
かいとう
\end{tcolorbox}

とすれば解答が消える。tcolorboxなので幅や高さの指定なども容易で

\begin{tcolorbox}[height=10pc]
かいとう
\end{tcolorbox}

などとすれば良い。なお、幅や高さを目視で微調整するときには、tcbsetの部分のcolframe=whiteの指定を一時的に切って調整すると楽。

なお、tcolorboxには環境を定義する機能があるので、その機能を使えばemathのkaitouのように違う名前をつけて解答の箱を作ることができる。(これはまた気が向いたら書く)

また、解答中にtikzで図を描く場合は、tikzの設定が優先されて図が描かれてしまうので工夫する。私はtikzの文字色を\kaicolなどとしておいて、問題のときにはwhiteにして解答のときにはblackなどに切り替えている。座標軸など一部の図のみは問題に残したいが解答のみを消したいというときも一工夫がいるがこれも気が向いたらまた書く。