KWICリストに存在する文を係り受け情報を含めて保存するために、ChaKi.NETはCabocha形式のエクスポート機能を備えています。但し、コーパスとファイルの間でインポート・エクスポートのラウンドトリップを完全に行うために、書誌情報やSegment/Link/Groupのアノテーション情報を含めるための拡張を行っています。ここでは便宜的に拡張Cabochaフォーマットと呼んでいますが、Cabochaとは無関係であり、ChaKi独自の拡張となっています。

エクスポートは、KWICリストを作成した状態でメニューの "File" - "Save As..."から行います。

Save/Exportダイアログが表示されたら、「ファイルの種類」において、"Cabocha files(*.cabocha)"を選択して、適当な場所・ファイル名で保存を実行します。これで拡張Cabochaフォーマットでの保存が行われます。

書誌情報も係り受け以外のアノテーションもない場合は、通常のCabochaファイルが生成されます。そうでない場合は、行頭が"# "で始まる拡張を加えた行を含むファイルが生成されます。この行の種類と意味は次の通りです。

コメント

##
コメントを示します。

## <Text>

名前空間(namespace)

このコーパス内に出現するTag名や属性のKey名にて使用される名称の曖昧性を除去するための名前空間宣言を示します。 Namespace宣言は、XMLにおける<xmlns>要素と同じ役割を持ちます。

#! NAMESPACE <alias> <uri>
この宣言はコーパス単位(インポート単位)で管理されるため、ドキュメントごとではなく、ファイルの先頭にまとめて置くようにします。 宣言の出現場所以降で、Tag名、属性のKey名は、alias + ":"という接頭辞によって修飾される可能性があることを示します。XMLの場合と同様、 実際の名前空間識別子はuriで与えられるuniversal resource identifierであり、aliasはその短縮文字列表現です。uriは正しいuri表現であって 他と重ならなければ任意の値を与えることが可能です。

ドキュメントタグ

#! DOC
次に現れる文からID=<id>を持つドキュメントが開始することを示します。DOCIDタグでドキュメントが先行定義されていない場合は、暗黙的な宣言があったものと扱われます。必須ではなく、本タグが現れない場合はデフォルトのドキュメントにすべての文が属しているものとして扱われます。

#! DOC <id>

#! DOCID
ID=<id>のドキュメントおよびその書誌情報(XMLフラグメント)を宣言します。必須ではありませんが、宣言なのでDOCタグよりも前に出現しなければなりません(通常はファイル先頭でまとめて宣言します)。

#! DOCID\t<id>\t<書誌情報>

#! DOCATTR
直前のドキュメントに対して書誌情報をXMLフラグメントによって付与します。後述のATTRタグと似ていますが、こちらは書誌情報をXMLで一度に与えることができます。(インポートのみ。エクスポート時にはATTRタグが使用されます。)

#! DOCATTR\t<書誌情報>

(注)

  • '\t'はタブ文字を表します。
  • idは1からアサインして下さい。id=0は、いずれのドキュメントにも属さない文(例えば、通常のMecabやCabochaデータに 含まれる文にはドキュメントに関するアノテーションがありません)を格納するための デフォルトドキュメントとして予約されます。

Segmentアノテーション

#! SEGMENT_S
この位置の文に対する文内のSEGMENTアノテーションを示します。文頭からのオフセットにて開始・終了文字位置を表します。

#! SEGMENT_S <TagName> <StartPos> <EndPos> "<Comment>"

#! SEGMENT
この位置のドキュメントに対するSEGMENTアノテーションを示します。ドキュメント先頭からのオフセットにて開始・終了文字位置を表します。

#! SEGMENT <TagName> <StartPos> <EndPos> "<Comment>"

(注)一般に、"_S" SuffixのあるアノテーションはEOS行の直前に、"_S" Suffixのないアノテーションはドキュメントの最後のEOS行の後、次の#!DOCの始まる前に置きます。なお、後者を"_D"としないのは、スキーマにおいてアノテーションはドキュメント単位で解釈するのを既定としているためです。ChaKi.NETでは、StartPos-EndPosが文をまたがるようなSEGMENT定義はエラーとなり、インポート時に無視されます。

Linkアノテーション

#! LINK_S
この位置の文に対する文内のLINKアノテーションを示します。文内にあるSEGMENT_Sのインデックス番号を<FromSegNo>と<ToSegNo>に 0ベースの整数の形で空白で区切って並べます。

#! LINK_S <TagName> <FromSegNo> <ToSegNo> "<Comment>"

#! LINK
この位置のドキュメントに対するSEGMENTアノテーションを示します。ドキュメント内にあるSEGMENTのインデックス番号を<FromSegNo>と<ToSegNo>に0ベースの整数の形で空白で区切って並べます。

#! LINK <TagName> <FromSegNo> <ToSegNo> "<Comment>"

(注)

  • 「インデックス番号」は、SEGMENTを参照するためのインデックスで、SEGMENT行の出現ごとに+1されます。SEGMENT_SとSEGMENTの出現は互いに独立にカウントされ、前者はEOSに出会う度に、後者は#!DOCに出会う度に0にリセットされます。DBにおけるSegment IDとは無関係です。
  • 参照されるSEGMENTはLINK, GROUPよりも前になければなりません。
  • 係り受けは当然ながらLINKではなくCabochaのオリジナルの形で表現されます。

Groupアノテーション

#! GROUP_S
この位置の文に対する文内のGROUPアノテーションを示します。文内にあるSEGMENT_Sのインデックス番号を<SegNo>以下に 0ベースの整数の形で空白で区切って並べます。

#! GROUP_S <TagName> <SegNo>... "<Comment>"

#! GROUP
この位置のドキュメントに対するGROUPアノテーションを示します。ドキュメント内にあるSEGMENTのインデックス番号を<SegNo>以下に 0ベースの整数の形で空白で区切って並べます。

#! GROUP <TagName> <SegNo>... "<Comment>"

Attributeアノテーション

#! ATTR
直前に出現したのアノテーション要素(Document, Segment, Link, Groupのいずれか)に対する属性を示します。属性とは、Key/Valueのペアであり、KeyおよびValueは特殊制御文字を除く文字から成る任意の文字列です。一つのKeyに対して一つのValueのみが許されます。Key名には名前空間による識別を用いることが推奨されます。

#! ATTR <Key> <Value> "<Comment>"

未定義

上記以外の#で始まる行は未定義であり無視されます。定義されるまではコメントと同じ動作ですが、将来は別の意味に扱われる可能性があります。