テキスト処理の日々

―― JGAWKのある生活 ――

野浪正隆


 Windows3.1からWindows98へと移り来て、パソコン環境が便利になってきていると感じるとともに、手作業が増えて来ているとも感じる。モニタを見ながらの手作業ができるのは、便利なようでいて、実はパソコンに向かっている時間が無意味に増えたり、目や肩や腰を疲れさせたりしていて、却って不便になっているのではないだろうか。パソコンを使っているのではなく、パソコンに時間や労力を吸い取られているのではないだろうか。

 Windows 以前の MS-DOS の環境では、batchファイル書いて、手作業を避け、出来るだけ自動実行させるようにしていた。そうしているうちに知ったのが awk という簡易言語だった。いろいろなスクリプトを書いて、便利に使ってきた。FD というファイラーがあったから、Windows3.1 を使い出したのは1994年の10月だった。(すぐに Windows95 がでて、乗り換えた)
 現在の Windows98 環境でもDos上でJGAWKを使っている。ファイルやフォルダを指定して右クリックすると「送る」メニューが出てくる。そこにいろいろなスクリプトを実行するbatchファイルのショートカットを並べていて、実行したいスクリプトを指定している。
(ショートカットはc:\windows\sendto¥のなかにコピーしておく)
窓を二つ開かなくていいので、便利である。

 以下に述べるのは、実際どのように使っているのかという話である。テキストファイルを扱うことが多くて手作業に忙殺されている方には参考になるだろう。スクリプトを書くというのは少し難しいかもしれないけれど、簡単な作業をさせるスクリプトはとても簡単である。
 そして、以下で取り上げたスクリプトとbatchファイルは、自由に使って頂きたい。


某月某日 表計算ソフトのCSVファイルをhtmlの表に変換

csv2html.awk


 国語教育MLで教えてもらった教材「ジェネシス」を国語学概論でやってみた。学生が書いた回答を表計算ソフトで、 集計した。
 横長の表になってしまい、テキストファイルにすると 見辛い物になってしまう。htmlにしようと思ったが 、使っているMS-WORKSには、表をhtmlに換える機能がない。そこでCSV形式(データをカンマで区切った形式)で保存して、前から作ってあったcsv2html.awkを使って、htmlに換えた。
 このcsv2html.awkは、<table>から</table>までを書き出すようにしている。項目が文字であれば左詰、数値であれば右詰になっているところが売りである。
 InternetExplorerで確認しながら、手直しをした。(項目名を縦長にするように、項目名の文字ごとに<BR>を書き込んだり、<title>や題名を書き込んだ。
次のようなhtmlである。
ジェネシスには誰が入るか の集計

関連


某月某日 教育実習アルバム作成

picmov.awk

 今日は教育実習の研究授業の指導に行った。デジタルカメラ(RICHO DC-3)で、授業風景を40枚ほど写した。これをフロッピーディスクにコピーして実習生にあげるのである。家にあるカラープリンターでは見栄えの良いものが印刷できないし、デジタルカメラの画像が一番綺麗に見えるのは、やはりモニタ上であるから。
 単に画像ファイルをフロッピーディスクに詰め込んでも面白くないので、BGMつきのスライドショーになるhtmlを作る。

  1. 適当なところに新しいフォルダを作る。
  2. そこに、デジタルカメラの画像ファイルをコピーする。
  3. そして、画像の雰囲気に合うmidiファイルをいくつか選んで、同じくコピーする。
  4. そのフォルダを左クリックで指定して、右クリックで送る-albumで左クリック。
  5. 2〜3秒で、そのフォルダ内に Control.htm Display.htm Main.htm が出来あがる。
    (Main.htmをダブルクリックするとBGM付スライドショーが始まる。)
  6. フォルダごとアルバム保存用フォルダにコピーする。
  7. フロッピーディスクにもコピーして、ラベルを書く。
  8. フロッピーディスクのフォルダ中のMain.htmのショートカットを作って、A:\の下にコピーしておく。
  9. そしてファイル名をStart.htmに変えておく。こうしておけば、パソコンに詳しくない人でも、扱える。
画像付きの説明
 Windows98に付属している Mplayerは、play list に対応していないから、曲を連続的に再生する機能を持っていないが、MicroSoft の WEB PAGE で公開している Mplayer2 は play list に対応しているので、なかなか良い。

関連

注意 最近のwindows98プリインストールパソコンには、Mplayer2が入っているのだけれど、MP3やplaylistに対応するためには、MicroSoft の WEB PAGE で公開している Mplayer2を再インストールしなければならないようです。

某月某日 midi ランダム再生

rand.awk

 MicroSoft の WEB PAGE で公開している MPlayer2 は play list に対応しているので、なかなか良いのだが、改善点がある。それは、ランダム再生と現在再生中のファイル名の表示である。次々再生してくれるのはうれしいのだが、今の曲は何と言う曲名だったかが分からない。それと、いつも決まった順番で(play listの順番)しか再生しないのは、つまらない。
 そこで、不充分ではあるが、rand.awkスクリプトを書くことで、それへの対応を図った。
 ランダム再生は、元のplay listをシャッフルしてやれば良いことだから、簡単である。

そして、

  1. rand.batを書いておいて、
  2. ショートカットをc:\windows\sendto¥にコピーしておく。
  3. 元の play list を、rand.bat のショートカットに送ってやると、
  4. play list を読みこんでシャッフルし、temp.m3u という play list を書き出す。
  5. Windows 付属の Notepad.exe で曲名リストを表示し、
  6. MPLAYER2.EXE がシャッフルされた play listを読みこんで演奏する。

という具合である。
 現在の曲が何と言う曲名かは充分には分からないけれども、「今さっきの曲があれだったから、今のはこれか」程度にはわかる。
しかし、次のMPLAYERでは、両方の機能を実装してもらいたいものである。

関連

注意 最近のwindows98プリインストールパソコンには、Mplayer2が入っているのだけれど、MP3やplaylistに対応するためには、MicroSoft の WEB PAGE で公開している Mplayer2を再インストールしなければならないようです。
 

某月某日 成績処理のために

sum.awk

 小專国語と国語学概論では、毎回のように「本日のお題」を課して、短い作文を書かせる。それが、出席の証である。ところが、それを記録しておくのが一苦労である。80枚の提出物を番号順に並べて、表計算ソフトに入力するのは、1回2回なら我慢できるが、毎週2回やらなければならないとなると、苦痛である。(教務手帳に手書きするという方法は、期末にまとめて入力すると言う点が嫌である)
 そこで、HP200LXという小さいパソコンに内蔵されたデータベースを使って出席の記録を取っている。そのデータベースにはインクリメントサーチと言う機能があって、一文字入力すると、それを元に検索し、次の文字を入力するとさらに検索しという具合に、検索を半自動的に行うのである。そこで、学籍番号を逆にした文字列を検索codeとして入れておいて(991011という学籍番号であれば、検索codeは110199)、提出物の学籍番号の1の位から10・100の位の順で検索をすると、当該の学生のカードが出てくる。小專国語なら最大3桁を入力すればよい。1桁でヒットする時もあって、とても嬉しい。国語学概論は単位取り忘れの3・4回生が混じるので、5桁まで入力しなければならない場合がある(学科番号2桁・名簿番号2桁が同じで、年度の1桁目が違う)、しかたない。
 ともかく、そのようにして収集した出席データをパソコンに移して、集計するのであるが、出席の数だけ合計するということなら、なにも表計算ソフトを起動して、ファイルを読みこんで、1人分の合計の式を書いて、それを人数分コピーしてという作業をすることはないのである。
 作ってあるsum.awkを使う。ファイルを指定して、右クリックで「送る-sum」で、デスクトップに合計が書き足されたファイルが出来あがる。

関連


某月某日 テキストファイルを1文ごとに切って、文番号をつける。

1bn.awk

 のなみの研究では文章を1文ごとに切って、文番号をつけたものを資料とすることが多い。手作業でやると、きっと間違えてしまう。そこで、ある程度まではパソコンにやらせる。
 会話文の中の「。」句点も1文とするのなら、「。」を「。」と改行に置換するだけで1文ごとに切れたことになるのだけれど、
  「……。……。」と彼は言った。
という文の場合は、他の文との整合性を考えた場合、会話内の文を無視して、
  ……と彼は言った
という1文であると考えたほうが良い。
そこで、「」内の句点を無視するための1bn.awkを書いて、使っている。

 ただ、これでも、
  「……」「……」
というように句点が使われていないで会話文が連続している場合は、文に切らないので、目でチェックしないといけないのであるが、そういう場合はめったにないし、処理が複雑になるばかりなのでこのまま使っている。
 文番号をつけるのは、簡単で、
  jgawk -f1bun.awk 処理対象ファイル | jgawk '{ print NR,$0}' > 処理済ファイル
と「jgawk '{ print NR,$0}'」という one liner(一行野郎)に渡してやればいいだけである。

関連


某月某日 文章中の語彙頻度を調べる

goi.awk

 文章中の語彙頻度を調べると、ただ読んでいるだけでは気づかないことに気づかされることがある。ただし、本当に語彙頻度を調べるとなると、日本語で書かれた文章の場合は単語に切ってやらなければならないので大変である。大雑把なところが分かればいいのだし、日本語の文章の中心語は漢字やカタカナで表記されることが多いので、かなで表記された部分以外を中心語として抽出してやればよい。goi.awkを書いた。
 かな文字列を「\f」に置換し、「\f」をデミリタとして使うことで、漢字文字列やカタカナ文字列を切り出している。
 そして、goi[]という連想配列に入れて、頻度をカウントし、最後にsortというソートプログラムに渡して頻度順のファイルを作っている。
梶井基次郎の「檸檬」を処理すると
5810
188
178
178
128
117
117
10檸檬7其処
107丸善
10以下略

という結果を得る。(後で整形しています)

関連


某月某日 空欄補充問題作成


br2.awk

 文章表現を教える時には、説明に使うのに適当な文章を印刷して配布する。単に配布するだけだと、学生はしっかり読まないことが多い。すると、説明の効率が落ちてしまう。
 簡単な空欄補充問題にしておくと、解答しなければという気持ちになって、文章をしっかり読みこむ学生が増える。また、その時間の説明の内容に即した空欄補充問題を作っておくと、説明の効率はアップする。例えば、「随筆文における副詞の役割」を説明する時に、文章中の副詞を空欄にしておいて選択させると、副詞どうしの比較や文脈上の副詞の役割に気がつきやすくなる。あるいは、文章中のキーワードを空欄にしておくと、そのキーワードに意識が集中して、文章全体を理解しやすくなる。

------^言葉と自己規定  鈴木 孝夫---------
 「私」や「僕」のように、話し手か自分をさして使う言葉は、考えてみると話し手が言語という一種の座標系の内部で、*自分自身*の位置を明らかにする行為であるといえる。つまり言語による*自己規定*なのだ。
 欧米の言語や、トルコ語、アラビア語などのように、話し手が自分に言及する言葉つまり自称詞が、実際問題としてはほとんど*一人称代名詞*に限られるような言語では、この一人称代名詞の働きとは、簡単にいえば自分が*話し手*であることを、言葉で明示する機能だといえよう。今しゃべっているのは、ほかでもないこのおれだということを言葉で示すこと、しかもこれ以外の情報は何ひとつ話し手に関して与えないのが、例えば、英語で I と言い、ラテン語で *ego* と言う行為の意味なのである。
 このタイプの自称行為の特徴は、話し手の言語的自己規定が、相手および周囲の情況とは*無関係*に、自発的、独立的になされることである。つまり*相手*が存在しなくてもかまわない。いやそれどころか、相手の存在を認識するに先んじて、自己の認識が言語によって行われるのだというべきであろう。
 なぜかといえば、話者が自己をこのように能動的言語行為者として言語的に確認した結果としてのIが決まって、初めてこのIに対立する対象としての、話の相手が*受動的言語行為者*として言語的に you として把握されるに至るからである。認識の順序からいえば、I → you となるわけだ。
 *ところが*日本語では、この順序がちょうど逆になっていると考えないわけにはいかない。
------言葉と自己規定  鈴木 孝夫 以下略$---------

 空欄にしたい部分を「*」でくくっておいて、
jgawk -fbr2.awk %1 > c:\wondows\デスクトップ\kuuran.txt
に渡せば、次のようなファイルが出来あがる。

------^言葉と自己規定 空欄補充問題---------
 「私」や「僕」のように、話し手か自分をさして使う言葉は、考えてみると話し手が言語という一種の座標系の内部で、【1】の位置を明らかにする行為であるといえる。つまり言語による【2】なのだ。
 欧米の言語や、トルコ語、アラビア語などのように、話し手が自分に言及する言葉つまり自称詞が、実際問題としてはほとんど【3】に限られるような言語では、この一人称代名詞の働きとは、簡単にいえば自分が【4】であることを、言葉で明示する機能だといえよう。今しゃべっているのは、ほかでもないこのおれだということを言葉で示すこと、しかもこれ以外の情報は何ひとつ話し手に関して与えないのが、例えば、英語で I と言い、ラテン語で 【5】 と言う行為の意味なのである。
 このタイプの自称行為の特徴は、話し手の言語的自己規定が、相手および周囲の情況とは【6】に、自発的、独立的になされることである。つまり【7】が存在しなくてもかまわない。いやそれどころか、相手の存在を認識するに先んじて、自己の認識が言語によって行われるのだというべきであろう。
 なぜかといえば、話者が自己をこのように能動的言語行為者として言語的に確認した結果としてのIが決まって、初めてこのIに対立する対象としての、話の相手が【8】として言語的に you として把握されるに至るからである。認識の順序からいえば、I → you となるわけだ。
 【9】日本語では、この順序がちょうど逆になっていると考えないわけにはいかない。


問 1  次の語群から、【1】〜【9】に埋める語句を選んで、記号で答えよ。
(あ)一人称代名詞(い)ところが(う)自分自身(え)無関係(お)話し手
(か)受動的言語行為者(き)自己規定(く)ego (け)相手
1 ______ 2 ______ 3 ______ 4 ______ 5 ______ 6 ______ 7 ______ 8 ______ 9 ______

(本当は、ここに、改ページコードの^Lが挿入してある)
■ 解答
1-う自分自身2-き自己規定3-あ一人称代名詞4-お話し手5-くego
6-え無関係7-け相手8-か受動的言語行為者9-いところが
以下略
------言葉と自己規定 空欄補充問題$---------

 現在のところは、選択肢グループを10個にしているが、「小問の選択肢数」snへ代入する数で加減できる。あまり多すぎるとカルタ取りのようになるし、少ないと簡単過ぎるし、難しいところである。

関連


ご感想をお寄せ下さい。

野浪正隆研ホームページに戻る。