2009年2月28日土曜日

万葉集をトークンに分ける(2)

<トークンとは>
ソフトウェアのコンパイラの技術に字句解析(Lexical Analysis)と構文解析(Syntax Analysis)という技術があります。
このなかの字句解析では,ソースプログラムをトークンという最も細かい単位に分類します。
日本語に当てはめれば,単語に分けるような作業です。
<万葉集という題名>
「万葉集(まんえふしふ)」という名前の意味については,「よろづの言の葉」「よろづの和歌」「よろづの御代」の集まりというような諸説があるようです。なぜか「よろづの和歌」という説が有力のようですが,私は題名通り素直に「よろづの言の葉」と今は考えています。
{言の葉}=単語(トークン)だとして,万葉集のリバース・エンジニアリングの最初の作業として万葉集をトークン(単語)に分けることをから始めことにしました。
その作業を今進めているのですが,単語を洗い出していくに従い,もしかしたら,
 「万葉集,実ははほぼ1万の単語(言の葉)の集まり」 …仮説①
ということが言えるのかもと考えるようになっています。
とっくにそんな研究はすでに済んでいるのかも知れません。万葉集に掲載された単語数がぴったり1万であるかを追及するのが今の作業の目的ではありません。成句や慣用句を単語に入れるかどうかにもよりますが,それらを加えると1万語位はありそうだと感じているということを伝えたいだけなのです。
そして,それが事実に近いと仮説①は結構面白いテーマかもしれません。この作業で,私の万葉集に対するロマンの一つに,この仮説の検証が加わったのです(このブログの目的ではありませんが)。

万葉集をトークンに分ける

<自己紹介>
私の生業(なりわい)は,ソフトウェアの保守開発です。
仕事では,ときどき10年,20年前に作られ,その後何人もの人により手直しが加えられ,設計書も古いままや修正差分資料しかないソフトウェアをリバース・エンジニアリング(普通のソフトウェア開発と逆の技術手順という意味)することがあります。
その作業では,コンピュータへの命令の羅列であるプログラムから,最初に設計したエンジニアの苦労や考え,スキルレベルの推定が必要になることがあります。また,最初だけでなくその後に手直しした(保守開発をした)エンジニアの苦労や考え,スキルレベルも推定が必要となることもあります。
この推定作業は,分析力,理解力,推理力などを要するものですが,何よりも今までいろいろな技能レベルのエンジニアが作ったプログラムを数多(あまた)見てきた経験を持ち,欠陥の修復だけでなく,より魅力のあるソフトウェアにする作業の経験の多さが必要不可欠な能力の一つです。
これには,箸にも棒にもかからないようなひどいプログラムも読みこなし,限られた予算の中で最適に修正する力が必要となります。「正しいプログラミング教育は最新のプログラム言語でプログラムの作り方を教えることで十分。古くてひどいプログラムを見せる必要がない。」と考えている人たちにはまったく相入れない作業なのかもしれません。
最近,プログラムのリバースエンジニアリングを支援するツールもありますが,このような設計思想や関係技術者のスキルまで推定してくれるものは知りません。
<ようやく万葉集>
さて,この仕事の経験から,学生時代少し嗜(たしな)んだ万葉集をリバース・エンジニアリングしてみよう最近考えるようになり,昨年から少しずつ作業を進めているところです。
この目的は,万葉集は何のために編集されたのかを,私的に勝手に推理することです。万葉集は数多の研究者が過去からさまざまな分析や研究を行っていますが,それらを参考にするのは自分なりの分析が済んだ後にしようと考えています。
なぜなら,この作業は先入観を極力排除することが重要だと考えているからです。まずは,自分のソフトウェア保守開発の経験を主体に万葉集をリバース・エンジニアリングをしてみる。最終的に,それが万葉集の研究定説とどれほど違いがあるのかの検証は後のお楽しみという考えでいるのです。
<お断り>
このブログでは,リバース作業途中で気づいたことを自分勝手にその都度出しますから,次のように研究として見て頂くには堪えないものです。あくまでも単なる読み物とお考えください。
・まったく体系的でない順序で投稿します。
・ごく限られた範囲による調査による想像の羅列です(前言撤回のオンパレードの可能性も)。
・単純な理解不足による間違い・勘違いも一つの作業過程(途中段階)として許容の範囲と考えます。