1. Z39.50は抽象的なデータモデルに対する検索モデルである。
そのため実装されるデータベースに対して、そのリクエストを写像しなけらばならない。この抽象モデルと実装モデルとの整合性を維持していくことが重要な問題となる。
2.検索リクエストとBIB-1アトリビュート
Z39.50では、書誌データの抽象的な検索モデルをBib-1 attributeで定義している。このBib-1 attributeの検索リクエストをもとに説明する。
[検索リクエスト1]
[タイトル](注1)というデータ属性の中から、[information]という[ワード](注2)と[等しい](注3)データを検索する場合について解説する。
(注1):[タイトル]という検索用語は、Use Attribute(Type1) で指定する。Use Attr には、US Marcのデータ構造から必要とされる検索項目が用意されている。(タイトルという属性は、対応するUS Marcのタグの標準が定義されている。 例えば、タイトルで対象となる US Marcのタグは130,21X-24X,440,490,730,740, 830,840,...となっている。) [タイトル]は Use(Type1) Attr = 4 で指定する。
(注2):ワード検索は Structure Attr(Type4) = 1で指定する。
(注3):演算子 "=" は Relation(Type2) Attr = 3で指定する。
以上の項目を検索式に展開すると以下のようになる。
find @attr 1=4 @attr 2=3 @attr 4=1 information <想定する実装モデル>
この抽象モデルを実装モデルに写像する。書誌データはMARCフォーマットとして、アクセスポイントのみを以下のようなに想定する。実装モデルとしては、繰り返しが可能なアクセスポイントのテーブルを想定し検索言語は SQL LIKEなものとする。アクセスポイント(インデックス)のテーブルWord_index_Tbl(Wordの繰り返しが可能なテーブルを想定する) id>Word(1)>Word(2)>word(3)>..... 検索式は以下のようになる。
Select * from Word_index_Tbl where word = "information"
慶應の目録データベースの検索結果では、8287件となる。
[検索リクエスト2]
この検索では検索結果が多すぎるので、Wordを掛け合わせて検索することにする。リクエスト1と同様に [タイトル]というデータ属性の中から、[science と information ](注4) という[ワード]と[等しい]データを検索する場合について解説する。
(注4):論理演算は、逆ポーランド展開で指定する。(これはType1 Queryと定義される。)
以上の項目を検索式に展開すると以下のようになる。
find @and ( @attr 1=4 @attr 2=3 @attr 4=2 information ) (@attr 1=4 @attr 2=3 @attr 4=2 science) <実装モデル>
リクエスト1と同様なWordインデックスを用いて、検索式は以下のようになる。
Select * from Word_index_Tbl where word = "infomation" And word = "science"
慶應の目録データベースではこの条件で 1355件となる。
[検索リクエスト3]
検索リクエスト2でも、検索件数が大きくて使えない場合が多い。その場合は、語の順番を意識して、"infomation science"で検索する必要が出てくる。その場合のBib1 attr、以下のようになる。このように用語の順番を意識した検索をフレーズ(phrase)検索とよぶ。このような場合は、Structure Attr(Type4) = 1(phrase)と指定する。find @attr 1=4 @attr 2=3 @attr 4=1 information science
<実装モデル>
アクセスポイントのテーブルPhrase_index_Tbl(Wordの繰り返しが可能なテーブルを想定する)
id>Phrase(1)>Phrase(2)>Phrase(3)>..... 通常フレーズ検索を行う場合は、前からの循環インデックスを作成することが多い。例えば、タイトルが [Knowledge and knowing in library and information science]の場合は、大文字小文字を統一し、不要語を削除し、循環的なアクセスポイントを作成する。knowledge/knowing/library/information/science
knowing/library/information/science
library/information/science
information/science
このようなインデックスを利用して、検索を行う。検索式は以下のようになる。
Select * from Phrase_index_Tbl where Phrase = "Information science%"
(%は前方一致のマーク)これで検索すると 慶應の目録データベースでは 744件となる。
Bib-1 Attrについて簡単に説明する
- Type 1:USE:
- この属性は、検索項目名を表す。例えば、タイトルという検索項目は Use=4で表し、その対象とするデータはMarcフォーマットでどのタグで130,21X-24X,440,490,730,740,830,840,...が対象となると説明されている。
- Type 2:Relation:
- 検索式の演算子。この属性は、検索演算子を表す。
- Type 3:Position
- 検索式の演算子。この属性は、Marc データを対象とした場合の、検索対象とするデータの位置を指定する。(例:任意一致/サブフィールドの先頭/フィールドの先頭)
- Type 4:Structure:
- この属性は、検索データの構造を表す。文字列検索の場合は、単語単位Wordで検索するように指定します (例:Phrase)
- Type 5:Truncation:
- 検索する場合の方向・加工の指定
- Type 6:Completeness:
- 完全形での検索指定。
3.日本語への拡張
これまでは、英語データにおける検索を例に、Z39.50のBib-1を解説してきた。そもそも言語検索というには、その言語の特性を無視しては、有効な結果は期待できない。ただ図書館では母国語を中心として多くの言語を扱うため、言語ごとに特殊な処理を行うことは難しい。
日本語は、分ちされていないという大きな問題がある。これを解決するために全文検索エンジンも開発されたが、Wordの完全一致を実現するには、分かち書きが必須となるために、大きなデータベースでは、Word概念を必要とすることが多い。
ここでも検索要求から解説する。
[検索リクエスト4]
[タイトル]というデータ属性の中から、[経済論] という[ワード] と[等しい]データを検索する場合について解説する。Bib-1 Attr は以下のようになる。
find @attr 1=4 @attr 2=3 @attr 4=2 経済論 <実装モデル>
実装テーブル、Word_index_Tbl を利用すると検索式は、
Select * from Word_index_Tbl where word = "経済論"
となる
逆に、国際経済論というタイトルのインデックを想定する。分かち書きは:国際 経済論(ちなみに、太宰治論の分ちは 太宰治 論 となっている。)となりWordインデックスは、以下のようになる。国際/経済論となり、この実装では国際経済論は検索できない。
それに対応するために、Bib-1 Attrの設定と実装の関係を再考しなければならない。例えば、Truncationを使うとか、日本語ように特別な拡張を行うという考え方がある。このような問題は、日本語検索にとっては古典的な問題であった。これまで、日本語検索においては、WordとPhraseを区別せず、前方一致をデフォルトして検索する手法が用いられてきている。 <実装のモデル> 実装としては、Phrase_index_Tblを用いて国際経済論/経済論というインデックスを作成し、前方一致検索を用いている。検索式で表すと、
Select * from Phrase_index_Tbl where Phrase = "経済%"
となる。
この方式を用いて Bib1を解釈するのが近道と考える。日本語の場合は、Structure(Type4) Attrで何が指定されても Phrase_index_Tblを前方一致で検索することにする。検索用語が英語かローマ字か判断できないために、当然、Word指定のInformationも
Select * from Phrase_index_Tbl where Phrase = "Infomation%"
と検索することになる。当然これではノイズが出てくることが想定されるが、現状では仕方がないだろう。ただ、前方一致を基本とするために、right truncation に近い機能が可能となるが、Wordで対応するような語尾変化等への対応ではない。