全文検索用中間形式

全文検索用中間形式

[1] 全文検索円陣の検索対象に色々な形式 (特に XML 系) を使えるようにするのは面倒ですので、ある程度共通化できないかと思って中間形式を考えてみました。

暇がないのでアイデアだけ。

[2] 語彙:

要素型意味標準属性最小内容模型
s:doc根要素s:Common, must-understand = qname-but-not-ncname-list (拡張語彙)(s:Sentences | s:Sentence | s:Phrase | s:Atom | s:meta)*
xhtml2:divまとまり (自然言語)s:Common(s:Sentences | s:Sentence | s:Phrase | s:Atom | s:Particle | PCDATA)*
ss:s文 (自然言語)s:Common(s:Sentences | s:Sentence | s:Phrase | s:Atom | s:Particle | PCDATA)*
s:phrase語句 (自然言語)s:Common(s:Sentence | s:Phrase | s:Atom | s:Particle | PCDATA)*
xhtml2:code語句 (非自然言語)s:Common(s:Sentences | s:Sentence | s:Atom | s:Particle | PCDATA)*
s:related関連情報つき語句 (自然言語)s:Common(s:primary, s:AnyElement*) (孫は (s:Sentences | s:Sentence | s:Phrase | s:Atom | s:Particle | PCDATA)*)
s:atom語・形態素s:Common(s:Sentences | s:Sentence | s:Atom | s:Particle | PCDATA)*
aavocab:aaAAs:Common(s:Sentences | s:Sentence | s:Atom | s:Particle | PCDATA)*
s:particle語以下s:Common(s:Particle | PCDATA)*
s:punctuation句読点等s:Common(PCDATA)*
s:metaメタ情報s:Common, about = (""* | 絶対 URI 参照), for = IDREFRDF/XML として解釈できる
s:object物体s:Common(空)
s:charUCS 文字s:Common(空)

どれだけ細かい要素型まで使用するかは、検索円陣の索引付けのどの phase で使用するかや、原始文書からどれだけの情報が得られるかによる。 (たとえば、 XHTML 1 文書から s:atom の情報は得られない。)

内容集合:

属性集合:

?:

名前空間:

[3] 例:

<s:doc [INS[xmlns..]]>
  xmlns:ex="http://example.org/2004/10/23/search-example-ns#"
  xml:lang="ja" script:script="Japn"
  xml:base="http://example.org/2004/10/23/search-example-doc"
  must-understand="xhtml2:rt">
  <s:meta>
    <dc:title xml:lang="ja">検索対象の文書の例</dc:title>
    <dc:creator xml:lang="ja">山田太郎</dc:creator>
    <dc:date>2004-10-23T09:46:00Z</dc:date>
  </s:meta>
  <s:phrase s:importance="ex:keyword">全文検索円陣</s:phrase>
  <s:atom xml:lang="en" s:importance="ex:keyword">XML</s:atom>
  <xhtml2:div s:semantics="xhtml2:h" s:importance="high">
      s:space="ex:xhtml1-display">
    全文検索用中間形式
  </xhtml2:div>
  
  <xhtml2:div>
    xml:base="http://example.org/2004/10/23/search-example-doc#section1">
    全文検索<s:related>
      <s:primary s:semantics="xhtml2:rb">円陣</s:primary>
      <xhtml2:rt script:script="Kana">エンジン</xhtml2:rt>
    </s:related>の検索対象に色々な形式 (特に 
    <s:related s:semantics="xhtml2:abbr">
      <s:primary xml:lang="en">XML</s:primary> 
      <ex:full xml:lang="en">Extensible Markup Language</ex:full>
      <xlink:href s:type="xsd:anyURI">http://www.w3.org/TR/REC-xml</xlink:href>
    </s:related>系)
    を使えるようにするのは面倒ですので、
    ある程度共通化できないかと思って中間形式を考えてみました。
  </xhtml2:div>
  <xhtml2:div s:importance="low" s:space="ignore">
    <ss:s>
      <s:atom ex:品詞="名詞">暇</s:atom>
      <s:atom>が</s:atom>
      <s:phrase>ないので</s:phrase>
      <s:atom>アイデア</s:atom>
      <s:atom>だけ</s:atom>
      <s:punctuation>。</s:punctuation></ss:s>
  </xhtml2:div>
  <xhtml2:div>
    xml:base="http://example.org/2004/10/23/search-example-doc#element(1/3)">
    <xhtml2:code s:type="ex:sgml-doctype-subset" s:space="preserve">
      &lt;!-- <xhtml2:div>根要素。</xhtml2:div> --&gt;
      &lt;!ELEMENT s:doc (%sentences; | %sentence; | meta)*&gt;
    </xhtml2:code>
  </xhtml2:div>
</doc>

[4] この中間書式への変換は、 XSLT でもなんでも好きなものを使っていただくということで。

通常は原始文書は普通の文書でよいですが、 完全に機械的に変換できないときは補正情報を原始文書に埋め込んでおくとよいでしょう。 (サイト内の共通の navigation など。) というわけでそのための語彙:

属性集合:

CSS の特性を使うのもまたよし。

例:

@media なにか、索引付け、みたいな媒体名 {
  ex|footer {
    display: none;
  }
}

[5] リンクをたどっていく型の検索円陣用に:

[6] >>5 だと @accept とかがあっても捨ててしまうのが勿体ないかも。

<s:doc must-understand="slink:href">
  xmlns...
  xmlns:http="urn:x-suika-fam-cx:msgpm:header:http:">
  <slink:href xlink:href="http://example.org/">
    <dc:title>例の頁</dc:title>
    <http:accept>text/html; q=1</http:accept>
    <http:accept-charset>utf-8</http:accept-charset>
    <http:accept-language>ja</http:accept-language>
  </slink:href>
</s:doc>

(must-understand は、 意味を正しく理解させるとともに、 要素の内容が通常の検索対象の文章と見なされないために必要。)

[7] s:object 要素は、 文章の途中に図などがあって変換できない時に代わりに挿入しておきます。 例えば、 抵抗の図記号はです。 (は実際には抵抗記号。) を <s:s>抵抗の図記号は<s:object/>です。</s:s> に変換できます。

[8] s:char 要素は、非 UCS 文字 (UCS でまったく表現できない文字や、包摂規準文字合成の関係などで直接の対応が存在しない文字、 文字的に使われる UCS に含まれない記号など) が元文書に含まれる時に、 その代わりに使います。 >>7 の例は <s:s>抵抗の図記号は<s:char my:uri="http://example.com/R"/>です。</s:s> と表すこともできるでしょう。 (回路図記号が含まれる文書に特化した検索円陣なら、 この情報を有効に使えるでしょう。)