(本文書は『「北方ユーラシア先住諸民族の言語文化の資料データベース作成とその類型論的研究」研究成果報告書第4分冊 北方ユーラシア言語文献論集』(文部省科学研究費補助金(基盤研究A、研究代表者:金子亨)報告書、1998年3月)所収の同名論文をHTML化したものである。書誌情報は以下のとおり。
著者:奥田 統己(おくだ おさみ)
発表年月:1998年3月
論文名:「計算機処理による語彙データベース作成のためのアイヌ語テキストデータベース」
所収:『「北方ユーラシア先住諸民族の言語文化の資料データベース作成とその類型論的研究」研究成果報告書第4分冊 北方ユーラシア言語文献論集』(文部省科学研究費補助金(基盤研究A、研究代表者:金子亨)報告書)
発行所:千葉大学外国語センター
なお本文書をダウンロードした場合、リスト中の<&lt;に、>&gt;に、&&amp;にそれぞれ置き換わっていることがある。そのため本文書のリストだけを抜き出したテキストファイルを用意した。)

[奥田統己のページに戻る]


計算機処理による語彙データベース作成のためのアイヌ語テキストデータベース

奥田 統己(札幌学院大学人文学部)

目次 1 本稿の目的
   2 計算機処理の手順の概要
   2.0. 使用言語
   2.1. 目的に合わせたテキストの作成と管理
   2.2. 索引・語彙一覧作成の手順
   2.3. 語形−意味データベースの作成、または既存のデータベースとの結合
   2.4. 前提となるアイヌ語の特徴
   3 テキストデータベースの仕様
   3.1. 文字セット
   3.2. 埋め込む情報の配列
   3.3. 区切り子
   3.4. 特定の情報
   3.5. 同音異義情報
   3.6. 音素交替情報
   3.7. アクセント情報
   3.8. トークン
   3.9. 注釈
   4 語形―意味データベース
   list1〜list30

1 本稿の目的

 アイヌ語テキストの電子化は近年着実に進んでいるとみられる。電子化したテキストから、何らかのテキスト処理言語または市販のアプリケーションによって、索引などを作ることもさほど難しくはない。しかし単純に電子化しただけのテキストをもとに作られた索引は、音韻論的・形態論的な語形の変化を十分考慮できない点、また同音異義の区別を行えない点から、語彙のデータベースとしては不満の多いものとなる。
 そこで本稿では以下の3点について、アイヌ語の音韻論的・形態論的な特徴の検討を踏まえ、提案と解説を行う。.音韻論的・形態論的・意味論的情報を考慮しながらテキストから語彙一覧や索引を生成するための計算機処理の手順、.そのために必要なアイヌ語テキストの電子化の仕様、.そのために必要となる語彙的なデータベース。
 なお本稿は1998年2月現在以下のURL でwww上に公開されている。

  http://kusur.sgu.ac.jp/jinbun/ningen/staff/okuda/ayntxt10.htm

2 計算機処理の手順の概要

2.0.使用言語

 本稿で述べるテキストの計算機処理のうち、2.1.で概要を述べで仕様を提案するテキストの管理は、sedという名称の文字列エディターを用いることを想定している。また2.2.に説明する索引・語彙一覧の作成処理は、テキストを処理するさまざまな言語、たとえばBASIC、Cなどによって行うことができる。本稿の具体例には、簡易なインタープリター型のテキスト処理言語であるawkを用いる。sedとawkのかわりにより高機能だがプログラムサイズの大きいperlを用いることもできる。sed、awk、perlはもともとUNIX上で開発されたものだが、現在ではMS-DOS、OS/2、MacOSなど多くのプラットフォームに移植され、フリーウェアとしてネットワーク上で提供されている。sedには同じ名称で日本語を処理できるものが存在し、awkとperlを日本語対応にしたものとしてjgawk、jperlがそれぞれ開発されている。

2.1.目的に合わせたテキストの作成と管理

 言語学的分析によるさまざまな情報を3以下に述べる仕様に従って埋め込んだテキストを入力する。
 最終的に作成する索引などの目的によって必要となる分析の程度は異なり、また分析の進み具合によってどれだけの情報を与えられるかも異なる。しかし、それぞれの目的ごとに分析の深さの異なるテキストを作成しておくこと、あるいはすべてのテキストの分析の深さを常に統一しておくことは、テキストの管理のうえからは現実的でない。
 この問題を解決するためには、それぞれの分析をテキストに埋め込むときに、その情報を埋め込んだ状態のテキストから埋め込まない状態のテキストへの還元が自動的に行えるようなかたちにしておけばよい。そして複数の種類の情報を一つのテキストに埋め込む場合でも、それぞれの情報をほかの情報と独立に付加・除去できるよう配慮する。
 こうすれば、テキストを入力するときも、目的に応じて必要な情報だけを当面先行して埋め込みながら作業を進めることができる。そしてそれぞれのテキストについて、より多くの情報が埋め込まれた版だけを継続的に管理し、索引などを作成するとき、目的によって一時的に不要な情報だけを取り除いたテキストを計算機に生成させることが可能になる。また分析の深さの異なる複数のテキストをあわせて処理したいときには、もっとも分析の浅いテキストにそろえるように、ほかのテキストから情報を取り除くこともできる。
 具体的にはたとえば3.1.3.2.のように、それぞれの情報を埋め込むのに用いる文字のセットとそれぞれの情報のあいだのお互いの順序とを規定しておけば、ある一つの情報だけを「ダルマ落とし方式」で取り除くことができる。2つ以上の情報を除去したいときにはそれぞれの情報に対して「ダルマ落とし」を行えばよい。
 ただし、3.3.に述べるようにトークンの区切りを段階的に埋め込み、それを変更したテキストを生成しようとする場合には、もとのテキストを与えるだけでは機械的な処理が困難な場合がある。この場合は、区切りを変更することによる付加的な情報の変化を個別にテキストに反映させなければならない。この部分の完全な機械化の方法は今後の課題である。

2.2. 索引・語彙一覧作成の手順

2.2.1. 必要な情報だけを残したテキストを生成する。異なった区切りのレベルのトークンを一つの索引のなかに含めたい場合(たとえばkamuy-nomiというテキストからkamuynomikamuynomiの3つを抽出したい場合)には、それぞれの区切りのレベルのテキストについて2.2.2.〜2.2.3.の処理を行い、その結果を2.2.4.の処理の前に連結すればよい。

2.2.2. テキストのそれぞれの行にテキスト中の位置を示す番号をつける。処理前のテキスト例をlist1、awkスクリプトの例をlist2、処理後のテキスト例をlist3に示す。テキスト中の位置についての情報を必要としない語彙一覧を作成するときにはこの手順は不要である。

2.2.3. 個々のトークンと位置番号とのペアを抽出する。list3を入力とし、list4-1のawkスクリプトを用いると、list5-1を得る。語彙一覧の場合にはlist1を直接list4-2にかければlist5-2が出力される。

2.2.4. トークン(と番号のペア)を、トークンのアルファベット順に整列する。整列にもawkを用いることは可能だが、処理速度とデータ量の限界から実用的ではないので、それぞれのプラットフォーム向けに開発されているソーターを用いるほうがよい。標準のソーターでは処理できない大量のデータをソートするプログラムとしては、mtoyo(豊島正之)氏が開発したsortfが多くのプラットフォームに移植され、ネットワーク上で入手可能である。list5-1を整列した結果がlist6である。
 トークンの前に付加されている情報を無視して整列したいときには、list5-1の段階のデータを整列の前にlist7のsedスクリプトで処理してそれらの情報をトークンの後ろに移し、整列を終えたlist6の段階のものをlist8にかけて先に後ろに移した情報を再び前に戻せばよい。

2.2.5. 整列の結果を索引のかたちに整形する。list9-1のawkスクリプトによって処理した結果がlist10である。語彙一覧の場合には、list9-2によって重複を取り除けばよい。

2.3. 語形−意味データベースの作成、または既存のデータベースとの結合

 必要に応じて、2.2.で得られた索引または語彙一覧に意味を与える。またはすでに作成した語形−意味データベースと結合し、情報の欠落している部分を補充する。
 list10の索引に意味を与えたものがlist11である。別なテキストについてすでに同様の作業を行い、list12のようなデータベースを得ている場合には、語形を照合の鍵としてlist11list12とを結合することによってlist13が得られるので、list11list12とで重なっていない語形(eharkisounほか)にのみ新たに意味を与えればよい。さらにlist12と新たに意味を補ったlist13とをマージして行くことで、処理するテキストの増加にしたがって語彙のデータベースを拡大させることができる。
 こうしたデータベースの結合処理などもawkで行うことは可能(list14)である。しかしやはり、大量のデータを処理するには、より能力の高い市販のデータベース処理アプリケーション(桐、ファイルメーカーProなど)を使用するとよい。

2.4. 前提となるアイヌ語の特徴

2.4.1. 語境界の不明確さ

 アイヌ語では、索引作成の最小単位ともなる形態素の境界は比較的はっきりしている。しかし実際には、形態素レベルでの索引が常に必要なわけではなく、むしろ語を単位とした索引の求められる場合のほうが多いであろう。
 ところが、アイヌ語で語を認定する基準は必ずしも明快ではない。たとえばcep koyki「魚・を漁る」というテキストから取り出すことが求められる語はcepkoykiの2つだけとは限らない。koykicepを抱合したとして、cepkoykiという語を認定することも可能だからである。あるいは複数の語の連続―連語―を単一の語に相当するものとして分析することが要請されることもある。
 こうした問題に対処するためには、トークンの区切り子として空白1種類だけを規定しておくのでは不十分であり、区切りの強さの順序を持った複数の区切り子を規定しておかなければならない。

2.4.2. アクセント

 アクセントのような超文節的特徴は、一般にテキストを電子化するときの扱いに工夫が必要である。しかしアイヌ語のアクセントは比較的単純であり、語頭から何音節目に核があるかだけを表記すればよい。そして実際には、開音節である第1音節に核がある場合のほかはほとんど明示的な表記の必要がない。
 ただしアクセントは、トークンの区切りを段階的に除去したときに、変わることがある。このうち「開音節である第1音節」という条件に関係するのは、この条件に当てはまる語の前に別な要素が接して核が消失する場合、1音節の名詞などのあとに別な要素が接して、核の明示が必要になる場合、の2つである。これらは一般的なルールを定めて機械的に処理し、例外があれば語彙的にチェックすることになる。
 人称接辞が接頭することで第3音節以降に核が置かれることもあるが、そのときの人称接辞の接頭のパターンは限定されており、それぞれのパターンごとに処理することで現実的に対応できる。

2.4.3. 音素交替・脱落・挿入

 アイヌ語の音素交替は、ほとんどの場合に、定まった順序の2つの音素の連続が別な2つの音素の連続に一意に交替する、という現象として捉えることができ、扱いが比較的容易である。この例外として現在筆者が知っているのは、静内方言において/nw//ww/または/mm/のどちらにも交替する、という例である。しかしこの場合も、/ww/になる場合は/n/が交替しているという情報をテキストに埋め込めばよく、/mm/になる場合は/w/が交替している(/nw/>/nm/>/mm/)とマークすればよい。
 つまり、これらの音素交替はいずれも、2つの音素の連続と最初に交替する音素とが明らかであれば、計算機に一意に処理させることが可能である。/h//y//'/などの脱落も同じ方法で処理すればよく、e-uko-itakewkoytakのような現象も同様に扱うことが可能である。
 iuと次の母音とのあいだの半母音ywの扱いは、アイヌ語の音韻論上の大きな問題の一つである。現在もなおテキストの作成者によってまた方言によって、この問題をどのような枠組みのなかでどのように解釈すべきかの考えはまちまちだとみられる。
 しかし実際のテキストのデータベース化という観点から見た場合には、多くの解釈は何らかのかたちで本来存在するywがそのまま表記されるかまたは脱落する、「何もない」位置への挿入によってまたは'などの要素が置き換わることによって、本来存在しないywが表記される、のいずれかの場合に分けられるであろう。このうちの場合は/y/などの脱落と同様に表記できる。またの場合も、脱落と区別して表記しさえすれば、音素交替と同じレベルの情報として標識付けすることが可能である。音素交替と同じレベルで処理できない解釈については今後の仕様の改訂の際に検討することとする。

3 テキストデータベースの仕様

 以上に述べた作業の手順およびアイヌ語の音韻論・形態論的特徴の考察に基づき、以下では具体的な仕様を提案する。本仕様案の名称は「アイヌ語テキストデータベース標識付け(ATDM)仕様案1版」とする。
 本仕様案がトークンについて定めるのは使用する文字セットおよび他の情報との位置関係だけであり、トークンの表記法そのものは原則として定めない。以下の例では現行の音素表記を用いるが、母音間とトークンの頭の'は原則として省略する。

3.1. 文字セット

 1バイトのASCII文字のうち、A-Za-zのアルファベット、0-9の数字、空白、!"#$%&'()*+,-./:;<=>?@[\]^_{|}~の記号を使用できるとする。それぞれの用途は以下のとおりとする。

A-Za-zおよび'#
トークンの表記用
_(アンダースコア)
音素交替情報(方式1)用(方式2では音素交替情報はトークンの一部となる)
0-9
同音異義情報用
+
アクセント情報用
空白、=-:
区切り子
!",.?
驚き、引用、発話の区切り、疑問などを必要に応じて表す。テキストの処理のときは目的に応じて単独のトークンとして扱うことも、区切り子として扱うこともできる。
;
以後その行の行末までを注釈として処理の際捨てるべきであることを示す。

 その他の文字、すなわち$%&*/<>@[\]^{|}~は将来の拡張のために予約されるが、現時点では3.4.で述べる特定の情報のマークに各自使ってよい。ただしこれらのうち$*/<>[\]^{|}~はsedなどがテキストを処理するときに使用する特殊文字なので、できれば%&@を使用したほうが面倒がない。以下の本稿中の例は、これら3つの文字だけを特定の情報のマークに用いることを前提としている。

3.2. 埋め込む情報の配列

 区切り子と区切り子とのあいだには、次の順序で情報とトークンを配置する。

(区切り子)

特定の情報

アクセント情報

音素交替情報

トークン

音素交替情報

同音異義情報

(区切り子)

(方式1)

(方式1)

 この順序と3.1.の文字セットにしたがえば、区切り子と区切り子とのあいだは次のようなsedの正規表現で表すことができ、すでに述べたとおり、それぞれの情報を「ダルマ落とし方式」でお互いに独立に付加・除去できるようになる。この原則は将来の拡張の際にも守られなければならない。

  /[ -=:][%&@]*\+*_*[a-zA-Z'#][a-zA-Z'#]*_*[0-9]*[ -=:]/

 それぞれの情報は一つのトークンに対してだけ効力を有する。ある情報をほかの情報に影響を与えずに取り除くためのsedスクリプトのlist番号を、以下のそれぞれの項目で示す。

3.3. 区切り子

 2.4.3.で述べたように、アイヌ語テキストの電子化の際には、複数のレベルの区切り子が要求される場合が少なくないとみられる。ここではもっとも強い順から空白、=-:の4種類を定義する。実際にテキスト中のどこに区切りを置くか、またそれぞれの区切りがどの程度強いかは作成者の判断に委ねざるを得ないが、それぞれの推奨される用途は以下のとおりとする。

空白
語の区切り
=
語の内部だが、索引や語彙一覧では原則的に切り離される箇所(具体的には「人称接辞」、名詞の所属形語尾hVなどの区切りが考えられる)
-
ここで区切らない形と区切った形の両方を、語の索引で取り出したい箇所(具体的には抱合による合成動詞の前部要素と後部要素の区切りが考えられる)
:
その他の語の内部の区切り(形態素の区切りなど)

 ほかの情報を埋め込まずに、それぞれのレベルで区切った例を下に示す。

  kamuy'ahunkean  kamuy'ahunke=an  kamuy-'ahunke=an  kamuy-'ahun:ke=an
 
  kutekehe        ku=teke=he                         ku=tek:e=he

 実際には筆者は現在のところ:は使用していない。また上の例で所属形語尾全体(上の例でいえばehe)と語幹とのあいだではなくhV(同じくhe)とその前とのあいだを比較的強く区切ったのは、tektekeとでは異なる意味記述を与えている、つまり索引中にそれぞれの語形を必要としているのに対し、teketekeheとには同じ意味を与えており、tekeheという語形を取り出す必要がないからである。この場合hVは、次に述べる特定の情報でマークし、索引作成の過程で一括して捨てている。
 区切り子:だけを除去するにはlist15、空白以外のすべての区切り子を取り除くにはlist16のsedスクリプトをそれぞれ用いる。

3.4. 特定の情報

 整列の際に、アルファベット順ではなく、出力の最初または最後にまとまって現れて欲しいトークンをマークするのに用いる。筆者は人称接辞をマークするものとして@、名詞の所属形語尾をマークするものとして&を、次のように用いている。

    @ku=teke=&he

ここでtekeの末尾のe(所属形語尾の最初のV)を語幹から切り離したテキストを作れば次のようになる。なおeheとに別々な記号を付してもよいが、煩雑さが増すだけで処理上のメリットはないであろう。

    @ku=tek:&e=&he

 ここからすべての&を取り除くには、list17のスクリプトを用いる。空白以外の区切り子で区切られたトークンだけから&を取り除くには、list18のようなsedスクリプトを用いることになる。

3.5. 同音異義情報

 トークン(+音素交替情報)の後ろに数字をつけ、同音異義を区別する。それぞれに対し、語形―意味データベースの側で意味記述を用意する。テキストの例はlist1であり、語形―意味データベースの一部の例はlist19に示す。
 同音異義の数が10を超えても、そのままka10ka11とする。整列するときにka1−ka10−ka11−ka2−ka3−…のように並ぶのを避けたいのならば、ka1ではなくka01と表記してもよい。後に改めて検討するが、テキストの側では品詞や語/形態素のレベルの違いを意識せずに、同音異義として扱う。同音異義のあいだの優先順序もここではなく、必要に応じて語形―意味データベースの側で定める。
 テキストからすべての同音異義情報を取り除くにはlist20、空白以外の区切り子で区切られたトークンの同音異義情報だけを取り除くにはlist21のsedスクリプトを用いればよい。
 トークンの区切りを除去することで新たな同音異義が発生する場合がある。このときには2.1.で述べたとおり個別の対応が必要になる。たとえばkem2-nu2「血・が出る」を含むテキストから区切り子-を取り除くときには、list21list16によっていったんこの箇所がkemnuと変換される。ここで、出力されたテキストからいったん語彙一覧を作成して同音異義データベースとの照合を行えば、kemnuに同音異義情報を与える必要のあることがわかる。そこで出力テキストのkemnuに同音異義情報を埋め込んでkemnu2とする。あるいはあらかじめlist22のような個別の変換情報のデータを蓄積しておき、区切り除去に先立ってこれらの箇所だけを処理することもできる。

3.6. 音素交替情報

 ここでは以下の2種類の方式を提案し、どちらに従ってもよいとする。筆者が従来非公式に提案していたのは方式1であり、この方式によるテキストもかなり蓄積されている。しかし現行の音素表記と現在知られているアイヌ語の音韻論的諸現象の範囲内では、方式2のほうがより扱いやすいはずである。両者の機械的な置き換えは可能なので、今後はできるだけ方式2を用いることを推奨する。

3.6.1. 方式1

 音素交替・脱落を起こす前の音素を表記し、交替などが起きていることを_でマークする。_だけを取り除けば交替などを起こす前の状態が復元される。交替した結果を表記するには、前後の環境を参照した規則によって_が付いている音素を置き換える。なお本仕様案が定めるのはこの情報を付された文字がなんらかの交替・脱落を起こすことだけであり、以下に示す例を含め、具体的な置換規則はテキストごとに定められなければならない。
 挿入された要素は__(アンダースコア2個)でマークする。__が付いている文字と__とを除去すれば挿入前の状態になる。__だけを取り除けば挿入の結果となる。

 直前の音素と連続した結果交替している場合には交替した音素の前に、直後の音素と連続した結果の場合には交替した音素の後に_をつける。たとえば

  soyenpa=@an _wa1 (> /soyempa'amma/)
  @an_=sapte ki1 na (> /aysaptekina/)

同音異義情報と重なる場合には、原則に従って下の例のようにつければよい。

  @a=kor_1 cise (>/akotcise/)

 方式1ではトークンの内部に音素交替を置くことができない。語の内部の音素交替をマークしたいときには、そこに区切り子を置いて下のように表記することになる。

  rorun_:so1 ka2 ta1 (> /roruysokata/)

 現在知られているアイヌ語の音素交替を_の記号を用いて示せば次のようになろう。

  r_ n > n n  r_ r > n r  r_ t > t t  r_ c > t c
  n_ s > y s  n_ y > y y  n_ w > w w  n_ r > r r
  n_ m > m m  m _w > m m  n _w > n m > m m

 hy'が脱落する現象を表記するには、同じ記号を用いて_h_y_'としたうえこれらを除去させるようにすればよい。またiuywに交替していることを示したいときには、区切り子を置いたうえで次のように表記する。この場合'の表記は必ず省略することになる。

  e4:_uko:_itak (>/'ewkoytak/)

 母音間の半母音の表記は次のようにする。
本来存在するものの脱落として考える場合:脱落する要素の前か後ろに_をつける。たとえば

  iy:oskoni('を省略しなければ 'iy:_'oskoni) (>/'iyoskoni/)
  iy_:oskoni('を省略しなければ 'iy_:'oskoni) (>/'i'oskoni/)

本来存在しないものの挿入として考える場合:挿入された要素の前か後ろに__(アンダースコア2つ)をつける。たとえば

  i:__yoskoni (/'i/+/'oskoni/>/'iyoskoni/)
  i:oskoni (>/'i'oskoni/)

 音素交替などを起こす前のかたちのまま音素交替情報だけを取り除くにはlist23、実際に音素交替などを起こしたかたちにテキストを書き換えるにはlist24のsedスクリプトを用いる。

3.6.2. 方式2

 音素交替・脱落を起こす前の音素を表記するが、交替・脱落を起こしている音素のアルファベットを大文字で置き換える。大文字を小文字に置き換えれば交替などを起こす前の状態が復元される。交替・脱落した結果を表記するには、前後の環境を参照した規則によって大文字を置き換える。方式1と同様、本仕様案が定めるのはこの情報を付された文字がなんらかの交替・脱落を起こすことだけである。
 挿入された要素は、交替・脱落とは別な大文字で表記する。それぞれの大文字ごとに、挿入前の状態と挿入結果とへの置換規則が定められる。
たとえば

  soyenpa=@an Wa1 (> /soyempa'amma/)
  @aN=sapte ki1 na (> /aysaptekina/)

同音異義情報と重なる場合には、原則に従って下の例のようにつければよい。

  @a=koR1 cise (>/akotcise/)

 この方式が方式1よりも優れているのは、以下のようなかたちでトークンの内部に音素交替を置くことができる点である。

  roruNso ka2 ta1 (> /roruysokata/)

 現在知られているアイヌ語の音素交替を方式2で表せば次のようになろう。

  R n > n n  R r > n r  R t > t t  R c > t c
  N s > y s  N y > y y  N w > w w  N r > r r
  N m > m m  m W > m m  n W > n m > m m

 脱落するhyも、それぞれ大文字で表す。'に対応する大文字はないので、代わりにXを用いる。またywが本来それぞれiuであることを示すには、次のように表記すればよい。このとき方式2では'にあたる要素を明示することもできる。

  eUkoItak または 'eXUkoXItak

 母音間の半母音の表記は次のようなかたちになる。なお方式2では区切り子を置かなくてもよい。
本来存在するものの脱落として考える場合:脱落するyY、脱落するwWで表す。たとえば

  iy:oskoni または iyoskoni('を省略しなければ'iy:Xoskoniなど) (>/'iyoskoni/)
  iY:oskoni または iYoskoni('を省略しなければ'iY:'oskoniなど) (>/'i'oskoni/)
本来存在しないものの挿入として考える場合:挿入されたyJ、挿入されたwVで表す。たとえば

  i:Joskoni または iJoskoni('を省略しなければ'i:JXoskoniなど) (/'i/+/'oskoni/>/'iyoskoni/)
  i:oskoni または ioskoni('を省略しなければ'i:'oskoniなど) (>/'i'oskoni/)

 音素交替などを起こす前のかたちのまま音素交替情報だけを取り除くにはlist25を、実際に音素交替などを起こしたかたちに書き換えるにはlist26を用いる。
 厳密に考えれば、この方式はトークンの表記法の一部を縛るものでありまた「ダルマ落とし方式」の原則の例外になる。したがって、とくにトークンの表記法が将来拡張・変更される可能性のあるテキストを扱う際には、方式1に従うべきである。

3.7. アクセント情報

 トークンの第1音節にアクセント核があれば+を、第2音節にあれば++を、第3音節にあれば+++を、第4音節にあれば++++を、第5音節にあれば+++++をつける。ただし、開音節である第1音節に核がある場合と第3音節以後に核がある場合以外には、省略してよい。開音節1音節のトークンの場合は、空白以外の区切りを挟んで後ろにほかの要素が接している場合を除き、やはり省略しても問題はない。たとえば

  +rera yupke kusu +ni-+rura @a=@eci=epakasnu ka1 eaykap

 すべてのアクセント情報を取り除くには、list27のスクリプトでよい。list28を用いれば、上の例を次のように変換することができる。

  +rera yupke kusu +ni-rura @a=@eci=epakasnu ka1 eaykap

 また同様にlist29によって以下が得られる。

  +rera yupke kusu +ni-+rura +++++aeciepakasnu ka1 eaykap

 区切りの変更によって、上のようなかたちで一般的に記述できないアクセントの移動が起こる場合には、同音異義情報と同様に個別に対応せざるを得ない。

3.8. トークン

 現在一般に用いられている音素表記が使用する文字はacehikmnoprstuwy'の17字である。本仕様案はトークンの表記法そのものを規定せず、これらのほかの小文字のアルファベット、すなわちbdfgjlqvxzをもトークンの表記のために予約する。現行の音素表記とは異なる表記法を用いる場合にはこれらの文字を使用することができる。なお音素交替を方式1で表せば、トークンの表記に大文字を用いてもよい。
 #は不完全に発話された語の不完全な部分を表す。たとえば

  yayeiso#(後半が発話されていない場合)  #yyaunpe(前半が録音されていない場合)
  yaye#itak(中間で咳こんだ場合)

この部分の復元は必要に応じ手作業で行う。
 !",.?を独立のトークンとして扱うには、テキスト作成の時点で、あるいは処理の際list30を用いて、前後に空白を置く。区切り子とする場合にはlist31で空白に置き換える。

3.9. 注釈

 ;以降改行までを注釈とする。注釈は行の途中から(テキストに続いて)置かれてもよいし、行の先頭から始まってもよい。list32は、;が行の途中にある場合はそれ以降改行までを削除してその行を出力し、行の先頭にある場合はその行を出力しないsedスクリプトである。

4 語形―意味データベース

 すでにlist12に例示したようなかたちの、語形と意味とを対応させたデータベースを作成する。2.3.で述べたように、このデータベースは処理するテキストの増加にしたがって拡大させてゆけばよい。入手できたテキストすべてをで述べた手順によって処理し終えた時点で、この語形―意味データベースも完成することになる。
 list12から同音異義情報のマークされているトークンだけを取り出したものがlist19である。テキストに同音異義情報を埋め込むときにはこのような同音異義となるトークンだけのリストを参照する。
 データベースの作成者によって同音異義情報の番号の与えかたがまちまちになることは、現時点では避けられない。動詞―名詞―副詞―連体詞―助詞―接辞―語根などといった原則をここで規定することには現実的な有効性が乏しい。単に順序を入れ替えるだけなら機械的に行うことが可能であり、むしろ問題になるのは何を同音異義とし何を多義とするかの判断である。
 語であるか形態素であるかといった形態論的レベルによる区別も設定せず、すべてのトークンを一つのデータベースのうえで管理する。そうすることで、テキスト側の区切りの深さによって変わるさまざまな形態論的レベルのトークンがこの語形―意味データベースを参照できるようになる。


list1

ip @an=kor1 sapo
@i=resu ki1 na1
tane yayramuan
pon hekaci
@an=ne1 ounno
roruyso ka2 ta1
soyenpa=@an wa1
esisoun wa1
eharkisoun
yayoterkeeciw
@a=kiki na1
 

list2

{
	printf "%04d %s\n", NR, $0;
}
 

list3

0001 ip @an=kor1 sapo
0002 @i=resu ki1 na1
0003 tane yayramuan
0004 pon hekaci
0005 @an=ne1 ounno
0006 roruyso ka2 ta1
0007 soyenpa=@an wa1
0008 esisoun wa1
0009 eharkisoun
0010 yayoterkeeciw
0011 @a=kiki na1
 

list4-1

{
	gsub( /[-=:]/, " " );
	for ( i = 2 ; i <= NF ; i++ )
		print $i, $1;
}
 

list4-2

{
	gsub( /[-=:]/, " " );
	for ( i = 1 ; i <= NF ; i++ )
		print $i;
}
 

list5-1

ip 0001
@an 0001
kor1 0001
sapo 0001
@i 0002
resu 0002
ki1 0002
na1 0002
tane 0003
yayramuan 0003
pon 0004
hekaci 0004
@an 0005
ne1 0005
ounno 0005
roruyso 0006
ka2 0006
ta1 0006
soyenpa 0007
@an 0007
wa1 0007
esisoun 0008
wa1 0008
eharkisoun 0009
yayoterkeeciw 0010
@a 0011
kiki 0011
na1 0011
 

list5-2

ip
@an
kor1
sapo
@i
resu
ki1
na1
tane
yayramuan
pon
hekaci
@an
ne1
ounno
roruyso
ka2
ta1
soyenpa
@an
wa1
esisoun
wa1
eharkisoun
yayoterkeeciw
@a
kiki
na1
 

list6

@a 0011
@an 0001
@an 0005
@an 0007
eharkisoun 0009
esisoun 0008
hekaci 0004
@i 0002
ip 0001
ka2 0006
ki1 0002
kiki 0011
kor1 0001
na1 0002
na1 0011
ne1 0005
ounno 0005
pon 0004
resu 0002
roruyso 0006
sapo 0001
soyenpa 0007
ta1 0006
tane 0003
wa1 0007
wa1 0008
yayoterkeeciw 0010
yayramuan 0003
 

list7

s/\([%&@]*\+*_*\)\([a-zA-Z'#][a-zA-Z'#]*_*[0-9]*\)/\2\1/g
 

list8

s/\([a-zA-Z'#][a-zA-Z'#]*_*[0-9]*\)\([%&@]*\+*_*\)/\2\1/g
 
 

list9-1

NR == 1 {
	token = $1;
	num  = $2;
	getline;
}
( token == $1 ) {
	num = num " " $2;
}
( token != $1 ) {
	print token, num;
	token = $1;
	num  = $2;
}
END {
	print token, num;
}
 

list9-2

NR == 1 {
	token = $1;
	getline;
}
( token != $1 ) {
	print token;
	token = $1;
}
END {
	print token;
}
 

list10

@a 0011
@an 0001 0005 0007
eharkisoun 0009
esisoun 0008
hekaci 0004
@i 0002
ip 0001
ka2 0006
ki1 0002
kiki 0011
kor1 0001
na1 0002 0011
ne1 0005
ounno 0005
pon 0004
resu 0002
roruyso 0006
sapo 0001
soyenpa 0007
ta1 0006
tane 0003
wa1 0007 0008
yayoterkeeciw 0010
yayramuan 0003
 

list11

@a 0011 私が・の
@an 0001 0005 0007 私が・の
eharkisoun 0009 左座のほうへ
esisoun 0008 右座のほうへ
hekaci 0004 男の子
@i 0002 私を・に
ip 0001 虚辞
ka2 0006 〜の上
ki1 0002 〜をする
kiki 0011 〜をする
kor1 0001 〜を持つ
na1 0002 0011 〜ぞ
ne1 0005 〜である
ounno 0005 〜して以後
pon 0004 小さい
resu 0002 〜を育てる
roruyso 0006 横座
sapo 0001 姉さん
soyenpa 0007 外へ出る
ta1 0006 〜に
tane 0003 今、もう
wa1 0007 0008 〜して
yayoterkeeciw 0010 一人で跳ね回る
yayramuan 0003 物心つく
 

list12

@a	【人称接辞】私が・の
@an	【人称接辞】私が・の
@e	【人称接辞】お前が・を・の
@eci	【人称接辞】お前たちが・を・の
ek	【動詞】来る
ekasi	【名詞】お爺さん
harkiso	【名詞】左座
hekaci	【名詞】男の子
huci	【名詞】お婆さん
@i	【人称接辞】私を・に
ka1	【副助詞】〜も、(疑問詞の直後で)〜か
ka2	【位置名詞】上
ka3	【名詞】糸、動物を捕る罠
ka4	【動詞接尾辞】(使役動詞を作る)〜させる
ki1	【動詞】〜をする
ki2	【名詞】カヤ
ki3	【名詞】すだれ
ki4	【名詞】シラミ
kor1	【動詞】〜を持つ
matkaci	【名詞】女の子
na1	【終助詞】〜ぞ
ne1	【動詞】〜である
ne1	【動詞】〜である
ne2	【連体詞】その
ne3	【格助詞】〜として
pon	【動詞】小さい
poro	【動詞】大きい
resu	【動詞】〜を育てる
roruyso	【名詞】横座
sapo	【名詞】姉さん
ta1	【格助詞】〜で、〜に
ta2	【副助詞】(疑問詞疑問文のなかで)〜なのか
ta3	【動詞】〜を掘る、(水)を汲む
un1	【格助詞】〜へ
un2	【動詞】〜につく・〜に住む
wa1	【接続助詞】〜して
wa2	【格助詞】(場所)から
wa3	【終助詞】〜よ
yupo	【名詞】兄さん
 

list13

@a 0011 【人称接辞】私が・の
@an 0001 0005 0007 【人称接辞】私が・の
eharkisoun 0009 
esisoun 0008 
hekaci 0004 【名詞】男の子
@i 0002 【人称接辞】私を・に
ip 0001 
ka2 0006 
ki1 0002 【動詞】〜をする
kiki 0011 
kor1 0001 【動詞】〜を持つ
na1 0002 0011 【終助詞】〜ぞ
ne1 0005 【動詞】〜である
ounno 0005 
pon 0004 【動詞】小さい
resu 0002 【動詞】〜を育てる
roruyso 0006 横座
sapo 0001 【名詞】姉さん
soyenpa 0007 
ta1 0006 【格助詞】〜で、〜に
tane 0003 
wa1 0007 0008 【接続助詞】〜して
yayoterkeeciw 0010 
yayramuan 0003 
 

list14

BEGIN {
	while ( getline < "list12" > 0 )
		mean[ $1 ] = $2;
}
{
	print $0, mean[ $1 ];
}
 

list15

s/://g
 

list16

s/[-=:]//g
 

list17

s/&//g
 

list18

s/&\(\+*_*[a-zA-Z'#][a-zA-Z'#]_*[0-9]*[-=:]\)/\1/g
s/\([-=:]\)&\(\+*_*[a-zA-Z'#]\)/\1\2/g
 
 

list19

ka1	【副助詞】〜も、(疑問詞の直後で)〜か
ka2	【位置名詞】上
ka3	【名詞】糸、動物を捕る罠
ka4	【動詞接尾辞】(使役動詞を作る)〜させる
ki1	【動詞】〜をする
ki2	【名詞】カヤ
ki3	【名詞】すだれ
ki4	【名詞】シラミ
ne1	【動詞】〜である
ne2	【連体詞】その
ne3	【格助詞】〜として
ta1	【格助詞】〜で、〜に
ta2	【副助詞】(疑問詞疑問文のなかで)〜なのか
ta3	【動詞】〜を掘る、(水)を汲む
wa1	【接続助詞】〜して
wa2	【格助詞】(場所)から
wa3	【終助詞】〜よ
 

list20

s/[0-9][0-9]*//g
 

list21

s/\([a-zA-Z'#]_*\)[0-9][0-9]*\([-=:]\)/\1\2/g
s/\([-=:][@&]*\+*_*[a-zA-Z'#][a-zA-Z'#]*_*\)[0-9][0-9]*/\1/g
 

list22

s/kem2[-=:]nu2/kemnu2/g
 

list23

s/\([-=: ][@&]*\+*\)__[yw]/\1/g
s/_//g
 

list24

s/__//g
s/r_\([0-9]*[-=: ][@&]*\+*\)n/n\1n/g
s/r_\([0-9]*[-=: ][@&]*\+*\)r/n\1r/g
s/r_\([0-9]*[-=: ][@&]*\+*\)t/t\1t/g
s/r_\([0-9]*[-=: ][@&]*\+*\)c/t\1c/g
s/n_\([0-9]*[-=: ][@&]*\+*\)s/y\1s/g
s/n_\([0-9]*[-=: ][@&]*\+*\)y/y\1y/g
s/n_\([0-9]*[-=: ][@&]*\+*\)w/w\1w/g
s/n_\([0-9]*[-=: ][@&]*\+*\)r/r\1r/g
s/n_\([0-9]*[-=: ][@&]*\+*\)m/m\1m/g
s/m\([0-9]*[-=: ][@&]*\+*\)_w/m\1m/g
s/n\([0-9]*[-=: ][@&]*\+*\)_w/m\1m/g
s/\([-=: ][@&]*\+*\)_h/\1/g
s/\([-=: ][@&]*\+*\)_y/\1/g
s/\([-=: ][@&]*\+*\)_'/\1/g
s/\([-=:][@&]*\+*\)_u/\1w/g
s/\([-=: ][@&]*\+*\)_i/\1y/g
 

list25

y/RNWHYXUI/rnwhy'ui/
s/[JV]//g
 

list26

s/R\(.*\)n/n\1n/g
s/R\(.*\)r/n\1r/g
s/R\(.*\)t/t\1t/g
s/R\(.*\)c/t\1c/g
s/N\(.*\)s/y\1s/g
s/N\(.*\)y/y\1y/g
s/N\(.*\)w/w\1w/g
s/N\(.*\)r/r\1r/g
s/N\(.*\)m/m\1m/g
s/m\(.*\)W/m\1m/g
s/n\(.*\)W/m\1m/g
s/H//g
s/Y//g
s/W//g
s/X//g
s/V/w/g
s/J/y/g
s/U/w/g
s/I/y/g
 

list27

s/\+//g
 

list28

s/\([-=:]\)\+\+*\([a-zA-Z'#]\)/\1\2/g
 

list29

s/@a=@eci=\+\([a-zA-Z'#]\)/\+\+\+\+aeci\1/g
s/@a=@eci=\([chkmnprstwyCHKMNPRSTWY']*[aeiouAEIOU][chkmnprstwyCHKMNPRSTWY'][chkmnprstwyCHKMNPRSTWY'#]\)/\+\+\+\+aeci\1/g
s/@a=@eci=\([a-zA-Z'#]\)/\+\+\+\+\+aeci\1/g
 

list30

s/\([!",\.?]\)/ \1 /g
 

list31

s/[!",\.?]/ /g
 

list32

s/;.*$//
/^;/d