機械可読テキストの処理
−アプリケーションからツールへ−
高木 元 tgen@lit.aichi-pu.ac.jp
愛知県立大学

1993年10月01日




概 要

国文学研究に於いてパソコンは単なる事務機器の一つに過ぎない。過度な期待も極端な拒絶も同様に無意味である。但し、はなはだ未成熟な道具であるが故に、かなりの精力と相当な時間を費やして、自分自身で試行錯誤を繰り返さなければ、自在に使えるようには成れない。そして、アプリケーション・ソフトウエアから脱してツール類が自在に使えるようになると、本来の汎用的な使い方が可能に成るはずである。




1.アプリケーション

ここでは汎用で高機能を売り物にした市販のアプリケーション・ソフトウエア(単に「ソフト」と云ったら,市販のアプリケーション・ソフトウエアを指し,これと区別して機能が単純で小さなユーティリティ類を「ツール」と呼ぶことにする)について、その特徴と問題点に付いて述べたい。

また、基本的に市販されているアプリケーション・ソフトウエアの、フリーソフトウエアに対する優位性は、マニュアルが比較的整備されていてユーザーが多い点かも知れない。だが、満足に使えないユーザーが自分の不明を棚に上げて尻を持ち込む先である、ほとんど繋がることのない電話番号がマニュアルに明記されていることを除けば、基本的には何一つない。

1・1 ワープロ

ワープロソフトは文書を印刷した時の見栄えを良くするためのもの。いわば編集機能付印刷ソフトとでも呼ぶべきものである。それ故に高機能のハードを要求し、とてつもなく資源《メモリ》を喰う、プログラムは肥大化し処理は重く(遅く)、その上に高価である。

だから、文書の作成にはエディタと呼ばれる本来はプログラム記述用のソフト(印刷機能を外し編集機能に徹したワープロと考えれば当たらずと云えども遠からず.大きなファイルが軽快に扱えるのが特徴)を使うのが一般的である。そして、少し凝った印字が必要な時にだけテキストフォーマッタと呼ばれるタグを付けて整形するツール(本来は UNIX上のツールで roff と呼ばれているが,MS-DOS上で同機能を実現したものに cawf, jroff, fin, ntf, xtr, pr, prt++ などがある.これらにはプリンタの制御コードを書き込むことが可能なものもあり,基本的なワープロの整形印刷機能を備えている.また,エディタ上のマクロで同様な機能を実現したものも存在する)を用いる。時にはワープロに読み込んで印字したりもする。

これは、単にワープロの機能を分け、編集と印刷専用の別ソフトを使い分けている、と云うわけではない。作成した文書がテキストファイルとして扱われる、と云う一点に於いて本質的に違うのである。一般にワープロソフトの吐き出す文書ファイルには文字コード以外のアトリビュートが付加されたバイナリファイル(拡張子が jsw とか bun とか云う奴である)である場合が多い。これらは別のツールを使わなければ、普通のテキストファイルには成らない。ワープロ専用機の文書ディスクもツールで変換しないと他の機種やパソコンで読めないのと似ているが、データの互換性(可搬性)を損なっているのである。パソコンを使う上での最大のメリットはデータの汎用性(可搬性)である。したがって、これの障害になる環境は極力排除すべきである。

さらにワープロソフトに付いている「日本語かな漢字変換FEP」以外は使えない仕様のものなど、別の慣れたものを使いたい者には苦痛以外なにものでもない。お仕着せの最たるものであろう。斯様な仕様のものは須らく使わないに限る。

1・2 データベース

市販のデータベースソフトも、以前に比較すれば機能や操作性は向上したかに見えるが、実際に使ってみると制限が多く、満足に実用に耐えないことが分かる。基本的な仕様がビジネス向きに作られているからである。

複数のデータを三次元的に関連させて処理するリレーショナル処理を可能にするために、これもまた、高機能のハードを要求し、とてつもなく資源《メモリ》を喰う、大きく重く、そして高価なソフトなのである。

そして、データそのものが膨大になり、基本的にバイナリとして扱われるために、ワープロソフトと同様に特定のソフトに依存したデータ構造になってしまう。勿論、csvファイル(フィールド毎にデリミタ(,など)で区切ったプレーンテキストファイル.)を吐き出させることも可能ではある。しかし、後述するように、検索・並べ替えなどの諸操作はツール類で充分に可能なのである。

1・3 表計算

表計算ソフトは使う機会に恵まれないが(Cコンパイラにサンプルとして付いてきたものを悪戯した事はあるが‥‥‥)、単純化すれば家計簿だと思えば良いであろうか。一覧表にした数値の計算とグラフ化を行うもので、やはり印刷や表示と云うプレゼンテーションを目的とした仕様に成っている。取り敢えず国文学研究には用がない(計量国語学と云う国文学には馴染みの薄い分野で重宝がられているらしい.)。

しかし、これとて計算だけならば AWK や perl と云うプログラミング言語を使えば容易に処理可能である。しかし、派手な色付のグラフと成ると無理かもしれないが、幸いにして今までに必要な場面に遭遇した経験はない。

1・4 その他

1・4・1 かな漢字変換

日本語入力に必須のソフトであるが、WXP と云うフリーなものも存在している。ただ、これは比較的安価であるし、どこのソフトハウスも熱心にヴァージョンアップに努めている。

長い間の懸案であった「は行四段活用」の動詞などもサポート(「WXII+」(「上級者御用達ツール」),「松茸」など)されており、辞書の肥大化には閉口するが、利用者登録データをテキストにして交換したりして、積極的に固有名詞などを単語登録するべきである。最近は、各FEP間で辞書テキストを交換可能にするユーティリティが付属しているものが出て来た。

1・4・2 エディタ

エディタは軽快に大きなサイズの文書が作れる。編集機能に優れ、検索や置換などはこれだけで可能である。さらに、マクロが自在に使えるようになればかなりの作業が迅速に可能になる。

このマクロと云うのも結構オタクな世界で習得は厄介である。しかし、欲しい機能は誰でも似たようなもので、Vz などには既に誰かが作ったマクロが備わっていると考えて良いし、原則として公開されているものはコピーフリーである。

また、フリーなエディタ(SE3, fare, jelvis, micro-emacs など.)も高機能な物が存在するので、授業で大勢に使わせなければならない羽目に陥った場合にも、市販ソフトを不正コピーすることなく安心して使える。

1・4・3 通信

パソコンを他機と繋ぐのに必要。電話回線を通じて大型計算機にアクセスすることによって、電子メールに拠る情報交換や大規模データベースを利用できる。

この分野はフリーソフトウエアの最も得意とする分野で、市販のものより優れたものが数多く出まわっている。最近は FAX 機能を備えたものも見掛ける。

2.ツール

ここでは、ソフトに対して比較的小さくて単機能のツールについて述べたい。元来は UNIX と云う OS 上で使われているプログラムで、これらをパソコンの OS として一般的な MS-DOS に移植したものである。

小さなツールを組み合わせて使うのが UNIX 流の方法なのだが、最も大切な事は、基本的にデータはプレーンなテキストで保持すると云う思想である。

CPU の速度や資源の規模の相違から、全く同一の仕様にインプリメントできないものもあるが、386以上の CPU ではプロテクトメモリを使えるように成ったので、TeX など大量のメモリを必要とするものもパソコン上で走るようになった。

2・1 MS-DOSのコマンド

MS-DOS の command.com は UNIX の shell に比べて非常に貧弱である。そこで機能を拡張するツールがある。history, xscript, KI-Shell はキーボードからのコマンド入力など、操作性を向上させるものである。

また、 copy コマンド一つをとっても警告なしに上書きしてしまうありさまで、コマンドラインからの操作は大変に気を遣う。そこで、 cp と云う UNIX のコマンドに基づいて機能拡張されたツールが出現することになる。タイムスタンプを比較してコピーしたり、ディレクトリ毎コピーしたり、さらには、 copy と ren と del を一度にしてしまう mv などもある。

今となっては陳腐化してしまったが、ASCII の MS-DOS Software Tools Vol.1〜3 は、MS-DOSの世界にツールを広める役目を担ったソフトだったかもしれない。併せて出された書籍「MS-DOS を 256倍使うための本 Vol.1〜3」(アスキー出版局)シリーズも有用な解説書であった。ただし、現在はほとんどのツール類がフリーソフトとして流布しており、これらの方が機能的にも優れている。また、GNU(GNU's NOT UNIX の略.米国 F.S.F.(Free Software Foundation, Inc.))が行っているUNIX互換ソフトウエア開発プロダクツで,著作権を主張しつつ一切の複製を禁ずる行為を禁止したもの.ソフトウエアの自由な流通を目指した運動で,すべてが寄付によって支えられている.詳しくは THE GNU MANIFESTO (Copyright(C)1985 Richard M. Stallman)GNU GENERAL PUBLIC LICENSE (Copyright(C)1989,1991 Free Software Foundation, Inc.) 参照.)のプロダクツとして UNIX 上で公開しているプログラムの MS-DOS への移植も積極的にボランティアとして行われている。

2・2 便利なツール

grep はテキストの中から文字列を検索して、該当行を標準出力に出すツールで、実に多くの種類が在る。

cgrep は AssistantIO氏製のフリーソフトウエア。GNUプロダクツの e?grep の仕様に準拠して日本語文脈に沿った検索が使える様に機能拡張したもの。中でも改行コードを越えた検索や、ターゲットにマークを付けたりできる。また、ファジー検索では表記の揺れも吸収でき、たとえば「京伝」で検索すると「京傳」も捜してくれる。最新ヴァージョンではフィールドを指定した検索が可能になっている。

ygrep は YOT氏製のフリーソフトウエア。cgrep の機能に加えて、デリミタで区切られたブロック全体の検索が出来る。

この他にも、大変に高速な izgrep や、 LHA で圧縮アーカイヴしたファイル中をデコードせずに検索できる wgrep など様々なものが流通している。

sort はコード順に文字列を行単位に並べ替えるツールであるが、MS-DOS のおまけに付いて来る外部コマンドは、ほとんど実用にならない。

sortf と云う高速外部フィールドソートが可能なツールは、mtoyo氏製のフリーソフトウエア。大きなファイルでも高速にソート出来るし、フィールドを指定しての並べ替えや、辞書順(あいうえお順)のソート、さらにはパラグラフソートすらも可能である。パソコンのみならず、UNIX上や Macintosh や大型機でも使える。

sed は非対話型エディター。正規表現(文字列を抽象化して表記する文法で、カタカナや数字と云う文字クラスや、特定の文字列の結合等をも表現出来るので、およそ考え得る全ての条件を指定可能にする)を用いた文字列の置換や削除、整形などか高速に出来る。GNUプロダクツの一環としてserow氏の手に拠って日本語化され jsed として流通している。

なお、GNU版 jsed とは別に、ASCIIの「MS-DOS software tools vol.3」と云うパッケージにも、若干違った仕様にインプリメントされたものが入っている(書店で売っている「MS-DOS software tools 基本セット32」にも存)。このASCII版は「売物」であるから当然コピーして配ることは出来ない。

このASCII版の方の解説書として「MS-DOSを256倍使うための本 Vol.3」(アスキー出版局)があり、少しく文体に抵抗を禁じ得ないが参考には成る。また「sed & awk」(アスキー出版局)もある。

AWK は作者である A.V.エイホ / P.J.ワインバーカー / B.W.カーニハン の頭文字を採ったデータベース(テキストファイル)処理用のプログラム言語。テキスト処理ではほとんど万能で、足立高徳訳「プログラム言語AWK」(トッパン、1989)と云う教科書が備わっている。

perl は AWK をさらに拡張し、ほとんどなんでも出来るプログラミング言語である。これも serow氏によって日本語化され jperl として流布している。関連書も多く出ているが「Perlプログラミング」(ソフトバンク)が基本。

2・3 汎用性

これらのツールは基本的には機種に依存していない。MS-DOS上であれば、国産であろうと、IBM-PC互換機であろうと、環境を問わずに使える。もちろん、MAC はそのままでは駄目であるが、基本的にはソースが公開されているので、比較的容易に移植可能である。ただ、グラフック関係を使っているものは機種依存せざるを得ない部分があるようであるが、基本的にテキスト処理ツールはグラフックを使うことはない。

ツールの方に汎用性が備わっていると云うことは、扱うべきテキストの方にも汎用性が要求されると云うことである。MS-DOSの普通のテキストファイル、つまりプレーンテキストファイルであることが必要なのである。

個人使用にとどまっている場合に限れば問題ないが、機種依存文字コード(丸で囲んだ1などNECが勝手に定義したものなど)や利用者定義文字(所謂外字)は使わない様にするべきだし、1byteのカタカナや2byteの英数記号もデータの汎用性を考えると利用を避けたい。

また、NECの98シリーズが採用している JIS78(C6226-1978)情報交換用漢字符号系と、他のメーカーが導入した JIS83(C6226-1983)、JIS90(X0208-1990) では同一の字体が別のコードに割り当てられていたり、字体が変更されたりしているものがあり注意を要する(この問題は、豊島正之「「JISに無い字」をめぐって」(『しにか』1992-2 大修館)に詳説されている.なお,『しにか』のこの号は「古典とコンピュータ」と云う特集号であり,新井栄蔵「古典研究とコンピュータ」,内田保廣「古典とコンピュータの最近の関係について」なども載る.)。以上のことに留意しないと、たとえ個人使用のつもりでも TeX を使い始めた時に、過去の変なコードが混ざったテキストに泣かされることに成る。

ところで、古典作品の本文を入力したファイルの呼び方であるが、機械可読テキスト(MRT(Machine Readable Text) の直訳.)としたい。他に、テキストデータベースとか電子化テキストなどと呼ばれることもあるが、構造化されていないテキスト本文をデータベースと呼ぶのは相応しくない。こなれないが「機械可読テキスト」と云う呼称を用いるのが良いと思う。

2・4 データの構造化

さて、構造化すると云っても実に簡単なことで、1行を1つのレコードにすれば良い。たとえば、服部仁氏の作成した八犬伝登場人物初出データ(ワープロ専用機 Rupoで入力されたデータを MS-DOS に変換し,機種依存文字を直しデータを構造化した.オリジナルは『讀本研究』第6輯掲載)を例に取ると、1人の情報を1行に納め、各項目(フィールド)の区切りとして , でも入れておく。つまり、

番号,訓み,人名,備考,岩波文庫本巻-頁_行
029,あまさきじうらうてるたけ,蜑崎十郎照武,,02-256_09
030,かぶととつぺい,蕪戸訥平,安西景連12の老党,01-100_06
031,いつさく,一作,金碗八郎孝吉21の父の私卒(わかたう),01-104_04
032,こはぎ,濃萩,一作31の女児(むすめ)、金碗八郎孝吉21の男児(をのこゞ)を産む,01-104_08
033,かたみ,加多三,金碗八郎孝吉21と濃萩32の子,01-109_02
033,かなまりだいすけたかのり,金碗大輔孝徳,里見義実1が命名,01-109_08
033,かなまりにうどうちゆだいばう,金碗入道ゝ大坊,金碗大輔孝徳33の法名,01-198_08

と云う具合にすれば、既に立派に構造化したデータベースなのである。これで、データベースソフトに読み込むことも可能であるが、ツールを使って処理してみよう。

2・5 ソート

sortf を使えば、訓みのフィールドに注目して「あいうえお順」に並べ替えることは簡単である。

% sortf -t, -K +1 8name.dat

とすれば、

029,あまさきじうらうてるたけ,蜑崎十郎照武,,02-256_09
031,いつさく,一作,金碗八郎孝吉21の父の私卒(わかたう),01-104_04
033,かたみ,加多三,金碗八郎孝吉21と濃萩32の子,01-109_02
033,かなまりだいすけたかのり,金碗大輔孝徳,里見義実1が命名,01-109_08
033,かなまりにうどうちゆだいばう,金碗入道ゝ大坊,金碗大輔孝徳33の法名,01-198_08
030,かぶととつぺい,蕪戸訥平,安西景連12の老党,01-100_06
032,こはぎ,濃萩,一作31の女児(むすめ)、金碗八郎孝吉21の男児(をのこゞ)を産む,01-104_08

と云う具合になる。

2・6 検索

例えば長瀬真理氏の『源氏物語』の機械可読テキストから cocoa のタグを剥ぎとってプレーンテキストにしたものから「あはれ」を検索して見よう。ただし、底本の改行を尊重してあるので、改行コードを跨いで検索し、前後三行を表示してみる。

% cgrep -F -C -M あはれ *.*
とすると
桐壷−つしくなりゆき、もの心細げに里がちなるを、いよいよあか
桐壷:ず 《あはれ》 なるものに思ほして、人のそしりをもえ憚らせたま
桐壷−はず、世の例にもなりぬべき御もてなしなり。上達部上人な
---
(略)
---
若菜下−ふ御ありさまをすこしけ近くて見たてまつり、思ふことをも
若菜下:聞こえ知らせてば、一行の御返りなどもや見せたまふ、 《あは》
若菜下:《れ》 とや思し知る、とぞ思ひける。
若菜下−四月十余日ばかりのことなり。御禊、明日とて、斎院に奉
---
(略)
---
夢浮橋−とわづらはしかるべきことと、見たてまつり嘆きはべりしも
夢浮橋:しるく、かくいと 《あはれ》 に心苦しき御ことどものはべりける
夢浮橋−を、今なむいとかたじけなく思ひはべる。日ごろも、うちは

と云う具合にマークを付けて表示する。ついでに、「あはれ」の出現回数も調べて見よう(ついつい,単語の数を数えたくなるのが怖い.別に一番「あはれ」な巻を調べることには成らないのに‥‥‥.もちろん,単語数で割っても駄目である(笑))

% cgrep -F -c あはれ *.*
桐壷: 12
帚木: 29
空蝉: 4
夕顔: 28
若紫: 27
(略)
夢浮橋: 2
という按配である。

2・7 変形

必要に応じてフィールドの順番を入れ替えたり、必要なフィールドだけにしたりと自在に変形可能であるが、ここでは、編集がしにくい csv ファイルに見出しをつけて扱いやすくすると云う例を出して見たい。特にフィールド数が多くなると大変である。

★,,001,新板繪入・泉親衡物語,いづみのちかひらものがたり,半,5巻5冊,刊,白茶地に雲型 継空摺,(新板/繪入)・泉親衡物語,破損(林本に[螢雪堂\宇多閣]と見える、見返を備えた 他本は未見),泉親衡物語,自序/文化六のとし巳の春しるしぬ,漢字仮名混じり11行,[○]ノ[丁 付]〔ノド〕,(巻一 )、巻二、 巻三、 巻四、 巻五,泉親衡物語,跋/巳の春/鬼外,二丁 存,福内鬼外,北尾紅翠斎,文化6,読本,(信/\ワ/\州・若松屋・木曽・山口)(波屋之章・木 曽・妻篭(籠JIS90)),巻一のみ欠(林)。佐藤悟の翻刻存。,国会/早稲田(自筆稿本「泉親衡大島 軍記」)/学習院/京大/東大国文/広大/阪急池田,/中村/鈴木重三/向井/東大/
と云う書誌データを
#! jgawk -f
#  h2csv.awk  林家蔵書データ(txtをcsvに)
BEGIN { FS = CR = "\n";  OFS = ",";  RS = "";  NK = 26;}
{
    for (i = 1; i <= NF; i++) {
        if ($i ~ /^#/) i = i + (NF - NK);
        sub(/^..[::]/, "", $i);
        if(i == NF) printf("\%s",$i);
        else printf("%s,",$i);
    }
    printf("%s", CR);
}
# $Log: RCS/h2csv.awv $
# Revision 1.6  93/08/29 02:20:20  tgen

という AWK のスクリプトによって次のように変形できる。

新番:41111_Hi_001
番号:001
書名:新板繪入・泉親衡物語
よみ:いつみのちかひらものがたり
書型:半
編巻:5巻5冊
刊写:刊
表紙:白茶地に雲型継空摺
題簽:(新板/繪入)・泉親衡物語
見返:破損(林本に[螢雪堂\宇多閣]と見える、見返を備えた他本は未見)
内題:泉親衡物語・東都福内鬼外[印][印]
前付:自序/文化六のとし巳の春しるしぬ
本文:漢字仮名混じり11行
柱刻:[○]ノ[丁付]〔ノド〕
丁付:巻一[七草](一ノ一のみ)25+3、巻二、28.5 巻三、19.5 巻四、19.5 巻五14+3
尾題:泉親衡物語
後付:跋/巳の春/鬼外
刊記:「文化六己巳春王正月發兌/尾州書林/本町一丁目・風月孫助/本町七丁目・永樂堂東四 郎/本町九丁目・菱屋久兵衞/大坂書林/西口砂場前・海部屋勘兵衞/中橋南塗師街・前川六左 衞門/東都書林/三田三〓(舎+古)坂・三河屋宗兵衞/山下御門通南鍋町一丁目・宇多閣儀兵衛」(目録裏)
広告:「目録 宇多閣」(柱)二丁存
著者:福内鬼外
画工:北尾紅翠斎
成立:文化6
分類:読本
印記:(信/\ワ/\州・若松屋・木曽・山口)(波屋之章・木曽・妻篭(籠JIS90))
備考:
参考:国会/早稲田(自筆稿本)/学習院/京大/東大国文/広大/阪急池田/中村/鈴木重三/向井/東大/

これで入力や編集が大幅に楽になるはずである。もちろん、逆の変形も簡単である。


#「機械可読テキストの処理 −アプリケーションからツールへ−」(レジュメ)
# 国文学とデータベース研究集会 国文学研究資料館 1993年10月01日
# Copyright (C) 2021 TAKAGI, Gen
# この文書を、フリーソフトウェア財団発行の GNUフリー文書利用許諾契約書ヴァー
# ジョン1.3(もしくはそれ以降)が定める条件の下で複製、頒布、あるいは改変する
# ことを許可する。変更不可部分、及び、表・裏表紙テキストは指定しない。この利
# 用許諾契約書の複製物は「GNU フリー文書利用許諾契約書」という章に含まれる。
#                      高木 元  tgen@fumikura.net
# Permission is granted to copy, distribute and/or modify this document under the terms of
# the GNU Free Documentation License, Version 1.3 or any later version published by the
# Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-
# Cover Texts.
# A copy of the license is included in the section entitled "GNU Free Documentation License".

Lists Page