【頭の整理】日本での「テキストデータベース」作りのステップ6くらい

前回記事では、用途に応じたタグの付け方についてみてきた。

このようにして様々なタグの付け方があり、分野毎に異なるタグが用意されることになるのであれば、 タグの構造を設定したり使い方をレクチャーしたりする、かなり詳しい人が分野毎に必要となりそうである。 しかし、人文学分野は多岐にわたるものであり、それぞれの分野で技術レベルの高い人を用意することは なかなか難しい。そこで、分野横断で、共通化できるタグはなるべく共通化して、しかし共通化 できないものは分野にあわせてタグを設定する、というやり方が一つの選択肢として出てくる。 まさにそこを目指して作成されてきたタグ付けのルールがTEIガイドラインであり、それゆえに、 特定の分野に偏ることなく、コミュニティに参加する人文学研究者達が取り組む分野全体に対応しつつ、 個別分野にも丁寧に配慮しようとしてきたのである。

TEIガイドラインはともかくとして、ここでは、「タグ」をつけることの可能性についてもう少し検討してみよう。

前回記事でみたように、タグの名前はタグが囲まれる文字列に対してなんらかの意味を付与することになる。 人名であったり、手紙の宛先であったり、校異情報であったり、様々である。 源氏物語の校異情報マークアップの例では<app>の中に <lem><rdg>が入っていたが、そのようにして 入れ子構造を作っていくことで上位タグの意味を下位のタグに継承していくことも検討する必要がある。

これは、たとえば人名の例で考えてみると、

<人名>森鴎外</人名>

というタグの付け方があったとして、これを姓名にわけると

<人名>``<姓></姓>``<名>鴎外</名>``</人名>

という風になる。ここで、「森」という<姓>の人の名は、一つ上の階層の<人名>にあがると、その下位に<名>である「鴎外」が確認できる。 階層構造の活かし方はたとえばこのような感じになる。

ちなみに、森鴎外は、本名は森林太郎‏であり、他にも、観潮楼主人、千朶山房など、様々なペンネームを使用していたとのこと。 この場合、前回記事に示すような、複数の名称が同じ人であると示すことの有用性がより高くなる。この場合、 ペンネームと本名を示すこと、そして、それが一人の人物であること、を示したいということになる。タグを付けると 以下のようになるだろう。

f:id:digitalnagasaki:20220227020535p:plain

観潮楼主人と千朶山房については、姓名を区別できるかどうか筆者にはわからなかったので、姓名を区別するタグはつけていない。 タグの階層をそろえるために姓か名かのどちらかのタグをつけるということも処理を効率化する上では考えられるのだが、 姓か名かのタグをつけてしまうと、姓か名ではないものにいずれかであるという誤った情報を与えてしまうことになるため、 むしろ階層をそろえることを犠牲にしてこのような記述にしている。この場合、処理する際には「ペンネームの タグの下位には姓・名のタグがあって そのなかに名前の文字列が入っている場合と、姓・名のタグがなくて名前の文字列がペンネームタグのなかに直接書かれている 場合がある」という前提で処理をすることになる。

あるいは、処理上の例外を減らすために、「名前全体」というタグを作って、姓名を区別できないものも同じ階層にしておくという 方法もある。この場合、以下のようになる。

f:id:digitalnagasaki:20220227020642p:plain

この場合、階層は同じなので、「ペンネームタグの下位には姓・名・名前全体のいずれかのタグがあり、そのなかに 名前の文字列が入っている。」というルールで処理をすることになり、処理側の例外は少し減らすことができる。 しかし一方で、「姓が来たときは名があるのでもう1つ処理をすることを前提にしなければならないが、名前全体がきたときは1つだけ」 という処理が必要になる。どちらの処理の方が効率的・効果的か、というのは状況に応じて異なる。 ただ、いずれにしても、<名前全体>があるタグ付け方法とないタグ付け方法は、この段階では機械的に置き換え可能 であり、自動置き換え処理を差し挟むことができる状況であれば、いずれの方法を採っても問題ないだろう。

さて、前回記事の人名の書き方では、文章のなかに登場する人名や呼称を「属性で参照」することによって 一意に同定できるようにしていた。では、この書き方の場合、それをどのように実現するのか、少し検討してみよう。 たとえば、以下のような文章があったとしよう。

東京都文京区千駄木町には、 登録有形文化財の和風住宅がある。ここは、明治の文豪である森鷗外と夏目漱石が、相次いで住んだ ことがあり、鷗外がここで執筆した小説に『文づかひ』がある。その後に住んだ漱石は『吾輩は猫である』をここで発表した。

この文章に含まれる人名にタグ付けすべく、対象文字列の始まりを<人名>、その終了箇所を</人名>として囲んでみると以下のようになる。

f:id:digitalnagasaki:20220226212009p:plainf:id:digitalnagasaki:20220227015627p:plain

このようにしてタグをつけた場合、「人名」タグを対象とした取り出しの処理をすることで以下のようなデータを列挙できる。

f:id:digitalnagasaki:20220227015811p:plain

この場合、まったく同じ文字列ではないので、機械で処理した場合、「多分同じ人物」という情報しか得られない。 この短い文章であればそれでも大丈夫だが、大量のテキストデータのなかでこのようなことが起きると、同定はやや難しい。 そこで、タグに対して本名が何かという情報を与えてみたのが以下のものである。

f:id:digitalnagasaki:20220227020104p:plain

上記では、<人名>というタグに対して、本名という属性を与え、その値として本名の文字列を指定している。 このようにした場合、「人名タグの本名属性」を見ることで、同一人物かどうかを確実に判定できることになる。

ただし、これでは、まだ不足な面がある。この本名というのがどういう情報なのか、本名がすごく長い場合はどうするのか、 この人物の本名以外の情報はどうなっているのか、等々、もっと様々な情報を付与できた方がいい場合もある。そこで出てくるのが 人物情報を別に作り、そこにリンクするという方法である。

f:id:digitalnagasaki:20220227020822p:plain

このように、人物タグを別に作成してそこに人物に関する情報を様々に記載しつつ、人物に 対してid="PS1"のように、PS1 という値を持つidという属性を与え、それに対して本文中の文字列に付与したタグから は属性「人物」を用いて参照する、という風にすれば、属性情報のリンクをたどることで 本文と登場人物の様々な情報を確実に結びつけられる。

タグとして付与できる情報にはこれ以外にも様々なものがある。今回の文章では 年代や住所、書名などがあり、それもタグ付けしてみると以下のようになる。

f:id:digitalnagasaki:20220227021254p:plain

さらに、外部の情報とリンクすることもできる。たとえば、著書を残したことがある人の多くはVIAF (http://viaf.org/) という 国際的な人物の典拠情報においてIDが割り当てられている。今回の2名の場合、それぞれにVIAFでの登録があり、これを参照することによって 外部の豊かなデータと接続できることになる。今回は著作者の人物情報としてのVIAFとリンクすることが目的であるため、 このVIAFのIDは、<人物>タグの属性か、もしくはその下位に何らかの形でタグを付与しつつ記述することになる。たとえば 以下のようになる。

f:id:digitalnagasaki:20220227021759p:plain

また、タグをまとめるということも考えてみたい。たとえば、<本名><ペンネーム>などは 人名の一種であるにも関わらず区別する必要がある。この場合、この二つは<人名> の変種として捉えることにして、<人名>タグに対して以下のように属性「タイプ」を用いて 区別している。

f:id:digitalnagasaki:20220227021832p:plain

…今日は眠くなってしまったのでまた明日。