はじめ | データ | しごと | ノート | ながれ


CD-ROM版「新潮文庫の100冊」テキストデータ化について

──バッチ処理──

上智大学大学院 上尾 紀子
※【 】内に 工藤浩 補記

 ジャック川崎さん作の、「exb2t.exe」を使って簡単にテキストデータ化ができるようになりましたが、ファイル数が多いので(日本語の作品の中身だけでも435ファイル)ひとつずつファイルを変換するよりも、バッチ処理で行うほうが能率的です。
 バッチ処理とは、バッチファイルを作成し、それを実行させることですが、そのバッチファイルにあたるものは、この場合、

■バッチファイル見本

exb2t_変換元のファイル1_>_変換後のファイル1
exb2t_変換元のファイル2_>_変換後のファイル2
exb2t_変換元のファイル3_>_変換後のファイル3
    "_"は半角のスペースです。

と、一行にひとつの「変換命令」を書いたファイル、のことになります。このファイルを用意し、全体を「○○.bat」という拡張子で保存し、MS-DOSプロンプト【WINDOWS XP など最近の機種では、「アクセサリ」に おさめられた「コマンド プロンプト」のこと】から実行させれば、数百回分の「変換命令」を、次々と終わりまで おこなってくれます。

 そして、このバッチファイルの能率的な作り方、というのが、awkを利用した方法です。
もとのCD-ROMでは、数字ばかりのファイルが並び、どの作品なのか、また、短編集の場合、その短編名は何なのか、全くわからない状態のため、「ファイルと作品の対照表」は必須のアイテムとなります。
 この表も、柴田雅生氏が作成してくださったもの【s100.datのこと】がありますので、それを元にして、形を整え、自分で「変換後のファイル名(略号)」を付けるなどすれば、だいぶ作業は簡略化されます。もちろん、自分なりの項目をたて、その順序などは柴田氏のものと異なっているとしても、全く差し支えはありません。
 ただ、CSV形式であること(区切り文字は , ; : など【半角なら】どれでも構いません)と、1レコードが半角250文字以内(256文字かもしれませんが、自信がないので少なめに見積もりました)、という規格に合っていればOKです。以下、この表は準備できているものとして話を進めます。
 この表から、先ほどの「バッチファイル」作成のために必要な項目のみ抜き出し、また、必要な文字列を付け加えることができれば、実に簡単にバッチファイルができあがってしまいます。そして、awkには、それができるのです(表計算ソフトを使ってもできるのかもしれませんが、awkのほうが簡単に、しかも瞬時に行ってくれます)。

 具体例を示します。私の作った対照表です。わかりやすいように短編集のあたりから抜き出しました。

■Sample.txt

tatuoOl.txt,\100402,堀辰雄『風立ちぬ.美しい村』,10040201.txt,「美しい村」
tatuoO2.txt,\100402,堀辰雄『風立ちぬ.美しい村』,10040202.txt,「風立ちぬ」
tanizaki.txt,\100501,谷崎潤一郎『痴人の愛』,10050101.txt,「痴人の愛」
ningen.txt,\100605,太宰治『人間失格』,10060501.txt,「人間失格」
mozartOl.txt,\100704,小林秀雄『モオツァルト.無常という事』,10070401.txt,「モオツァルト」
mozartO2.txt,\100704,小林秀雄『モオツアルト.無常という事』,10070402.txt,「無常という事/当麻」
mozartO3.txt,\100704,小林秀雄『モオツアルト.無常という事』,10070403.txt,「無常という事/徒然草」
mozartO4.txt,\100704,小林秀雄『モオツアルト.無常という事』,10070404.txt,「無常という事/無常という事」
mozartO5.txt,\100704,小林秀雄『モオツァルト.無常という事』,10070405.txt,「無常という事/西行」
mozartO6.txt,\100704,小林秀雄『モオツァルト.無常という事』,10070406.txt,「無常という事/実朝」
mozartO7.txt,\100704,小林秀雄『モオツァルト.無常という事』,10070407.txt,「無常という事/平家物語」
mozartO8.txt,\100704,小林秀雄『モオツアルト.無常という事』,10070408.txt,「無常という事/蘇我馬子の墓」
mozartO9.txt,\100704,小林秀雄『モオツァルト.無常という事』,10070409.txt,「無常という事/鉄斎」
mozartlO.txt,\100704,小林秀雄『モオツアルト.無常という事』,10070410.txt,「無常という事/光悦と宗達」
mozartll.txt,\100704,小林秀堆『モオツァルト.無常という事』,10070411.txt,「無常という事/雪舟」
mozart12.txt,\100704,小林秀雄『モオツァルト.無常という事』,10070412.txt,「無常という事/偶像崇拝」
mozart13.txt,\100704,小林秀雄『モオツアルト.無常という事』,10070413.txt,「無常という事/骨董」
mozart14.txt,\100704,小林秀雄『モオツアルト.無常という事』,10070414.txt,「無常という事/真贋」


「,」で区切ったCSV形式になっています。項目(フィールド)の位置をそろえるために、と、余分な空白は入れないようにしてください。あとで困ります。【半角スペースは、MS-DOSのコマンドでは、重要な意味(単語やコマンドの区切りなど)をもってしまうからです。】
 ここで、もういちど、冒頭の「バッチファイル見本」を参照して下さい。上に示した例では、「変換元のファイル名」が「$4(4番目のフィールド)」に、そして、「変換後のファイル名(自分で付けた略号)」が、「$1」にあります。その他出力したい文字列は、「exb2t」と、リダイレクトのための「>」と、必要な【半角の】空白(_で表した部分)です。それらを1行に出力するには、【メモ帳や秀丸などの】テキストエディタで、

■awkの実行ファイル(スクリプト)

BEGIN {
  FS = ","
} 
{
 print"exb2t "$4" > "$1
}


と書いて【または 上の部分をコピーして】、「適当なファイル名(たとえば slOO).awk」という拡張子で保存してください。これがawkの実行ファイル(「スクリプト」といいます)になります。
 それをメモ帳や秀丸などのテキストエディタで開き、

・2行目のFS(フィールド.セパレータ)の定義を、必要ならば変える(「,」を「:」「;」など、自分で使用した区切り文字にする)。もし、「半角のスペース」を区切りに使用している場合は、この定義自体が不必要(awkのデフォルト)なので、BEGIN以下、最初の「}」まで(つまり、3行目までを全部)削除する。
【この変更は、柴田氏のリストを利用する限り、不要というより、してはならない。】

・5行目のフィールドナンバーの$4と$1を自分の表に合うナンバーに変える【半角数字で、数字だけ書き換える】。

という作業をすれば、使えます。


 【ベクター(の「サイト検索」でヒットしたサイト)などから ダウンロードした】awkは、【メインドライブに作った】専用のフォルダに、すべてのファイル(*.exeだけでも良さそうなのですが、念のため)をコピーし、パスを通せばどこからでも使えます。そうでなければMS-DOSプロンプト【コマンド プロンプト】での作業ディレクトリ(どうもこういう場合には「フォルダ」という言い方では抵抗があります……)を、awkを入れたフォルダにしてください。その場合、同じフォルダに入れておくのは、
  ・処理対象となる「対照表」【柴田氏の「s100.dat」を あなたなりに改変したもの】
  ・スクリプト ファイル【上尾氏の「slOO.awk」を あなたなりに改変したもの】
だけでOKです。バッチファイルを作ることと、実際に変換すること【つまりバッチ処理を実行すること】とは、別の次元の作業ですので、「exb2t」などはこの時点では必要ありません。

■awkスクリプトの実行

 実行のさせ方は、MS-DOSプロンプト【コマンド プロンプト】で(しつこいようですが、パスを通していない場合はディレクトリの変更をお忘れなく)【コマンドは "CD"(change directory)。たとえば画面が「C:\WINDOWS>」となっている場合は、直後に たとえば「CD_C:\JGAWK」と入力して Enterキーを おして「C:\JGAWK>」に かえた うえで】

jgawk_−f_slOO.awk_1ist1.txt_>_1ist2.txt

とタイプして【"_"の部分は、半角スペース】、Enterキーを おすだけです。

 ここで、「slOO.awk」の「slOO」の部分はどうでも構いません。好きな名前をスクリプトファイルにおつけ下さい。ただし、拡張子は必ず「.awk」にしてください。
 「1istl」とは、処理対象となるファイル、つまり、ここでは「対照表」のことになります。ここも拡張子まできちんとつけて指定してください。そして、リダイレクトでファイルに落とす(これが待ちに待った「バッチファイル」になります!)ために、処理結果を別の名前で保存します。このとき、すぐに「1ist2.bat」とすることもできますが、お勧めはしません。「ちやんとできているかどうか見直すために開こうとしたら、実行されてしまった」という悲劇を避けるためです(安全な開き方もありますが、用心に越したことはないでしょう)。恐ろしいことに、MS-DOSでは、途中で処理を止める方法というのはないそうです……。警告を無視しての強制終了、しかないということですので、とりあえず、テキストファイルとして保存し、間違いがないことを確かめてから、拡張子を変更することをお勧めします。【ここも たいへん重要】

「Sample.txt」に対して、「slOO.awk」を試してみた結果は次のようになります。「バッチファイル見本」と見比べてみてください。

■Sample.bat

exb2t lOO40201.txt > tatuoOl.txt
exb2t lOO40202.txt > tatuoO2.txt
exb2t lOO50101.txt > tanizaki.txt
exb2t lOO60501.txt > ningen.txt
exb2t lOO70401.txt > mozartOl.txt
exb2t lOO70402.txt > mozartO2.txt
exb2t lOO70403.txt > mozartO3.txt
exb2t lOO70404.txt > mozartO4.txt
exb2t lOO70405.txt > mozartO5.txt
exb2t lOO70406.txt > mozartO6.txt
exb2t lOO70407.txt > mozartO7.txt
exb2t lOO70408.txt > mozartO8.txt
exb2t lOO70409.txt > mozartO9.txt
exb2t lOO70410.txt > mozartlO.txt
exb2t lOO70411.txt > mozartll.txt
exb2t lOO70412.txt > mozart12.txt
exb2t lOO70413.txt > mozart13.txt
exb2t lOO70414.txt > mozart14.txt

★ポイント

スクリプトの、“”で囲まれたところは、AWKにとってはただの「文字列」なのですが、バッチファイルにすることで、MS-DOSは「exb2t」や「>」を、コマンドとして【半角スペースを、区切り文字として】解釈してくれることになります。コマンドラインから一行ずつ入力するのと同じことを、自動でまとめて行ってくれる、というわけです。
これで、「ファイルと作品名の対照表からバッチファイルを作る」作業は終わりです。


■バッチ処理の実行

 あとは、やはり作業用フォルダをひとつ作り、【これは、実際には、exb2t.exeの入っている「sin100」フォルダを利用すればよいでしょう】

・CD-ROMから変換元となるファイルをコピーする。【変換元となるファイルは「隠しファイル」になっているので、「フォルダ オプション」の「表示」タブにある「すべてのファイルとフォルダを表示する」にチェックを入れて 表示できるようにする必要がある】
・exb2t.exeも同じフォルダに入れる。【これは すでに 入っている】
・作成したバッチファイルも同じフォルダに移動させる(それから拡張子を【○○.batに】変更するのが安全)。

という作業を行ったあと、MS-DOSプロンプト【コマンド プロンプト】から(何度もしつこいですが、作業用のフォルダにディレクトリを移動したうえで)、【つまり、必要なら、"CD"コマンドを使って、画面を「C:\SIN100>」に かえてあることを確認して、その">" の直後に】バッチファイル名を、
    ○○.bat【○○だけでも可】
とタイプし、Enterキーを押せば、40分〜1時間くらいの間(翻訳物を除く。マシンパワーによって若干異なると思われます)、パソコンがひとりで働いてくれて、変換後のファイルが同じフォルダにできているはずです。変換後は、もとのファイルは削除してしまって構いません。【うえの所要時間は、WINDOWS 95 時代の話ですから、現在では、30分と かからないでしょう。】


■つけたり

 田辺聖子『新源氏物語』のファイルには 11751439.txt がありません(11751438.txtの次は 11751440.txtになっています)。自分で作業をしていて、「間違ったかな」と、何度も確認してしまったので、一言付け加えておきます。


はじめ | データ | しごと | ノート | ながれ