はじめに

このシステムは、山元が歌語の計量分析と意味モデル構築のための研究の道具として開発したものです。特に和歌の単位分割と品詞分類を統一した基準で処理するために作りました。したがって、和歌以外のテキストについてはうまく処理できないと思います。

あえて申し上げておきますと、このシステムの出力にはあやまりが含まれます。このシステムは残念ながら期待していただくような形態素解析システムではありません。たまたますべての語が正しく出力されることもありますが、その場合でも正しく出力されたことを目で見て確認しなければなりません。辞書が充実したとしてもあやまりの割合が少なくなるだけでこの事実に変りありません。

これにより発生した損害、賠償については一切、山元には責任はないものとします。配布はGPL2です。

辞書を更新した場合には、更新箇所をメールで送っていただけるとこちらに反映させることができるので、嬉しく思います。(その際には、作品名と作品テキストも送っていただけると作品別辞書として利用できます。)

特徴

  1. 古文に見られる短い語については実際に和歌の体系本に見られる文字列を見出しとして、連語単位で辞書に登録してあります。

  2. 連接コスト計算を利用していません。古文の資料(コーパス)から連接コストを計算したくても計算できそうもありません。

  3. 文字列の解析というより、すでに解析済のパターンを辞書に登録しておき、一致するパターンが入力にあらわれたら、辞書から引き出して、再利用するものです。そうでもしなければ、「今日をしぞ松(後撰集240番)」の「松」を「待つ」として出力できません。

  4. プログラムは小さくてシンプルです(12kb)。ほとんど辞書のインデックシングとマッチングだけです。

欠点

  1. まだまだ辞書を育てなければなりません。

  2. 和歌以外のテキスト、清濁のないテキストは、うまく処理できません。(清濁のないテキストのための辞書項目は追加中です。)

  3. 連語辞書の作り方をまちがえるとあやまりが増えるので、いちいち出力を確かめなければなりません。

  4. 辞書を参照する以外の機能はほとんどありません。辞書を読み込ませる前にソートする必要がありますが、その機能すらありません。ソートはあらかじめ sort でしてください。出力後のテキスト整形や任意情報の取得は、適宜、各自で行ってください。

  5. SJIS、EUC-JP以外の文字コードを考慮していません。それ以外の文字コードを使いたければ、nkf を使ってください。

コンパイル

% ./configure
% make

だけです。実行ファイル kh ができているはずです。SJISを中心に使う方は、

% ./configure
% make sjis

としてコンパイルしてください。SJISをご利用の場合には、kh-sjis.dic をkh.dicにリネームしてください。今のところ、Linux, BSD, cygwin, MacOSXで動くことを確認しています。コマンドラインから

% echo さくら咲きにけり |./kh

と入力して、

% echo さくら咲きにけり |./kh
さくら(名:桜:さくら)
咲き(カ四-用:咲く:さく:咲き:さき)(完-用:ぬ:ぬ:に:に)
けり(過-終:けり:けり:けり:けり)

となれば、動いています。

辞書

デフォルトではカレントディレクトリの kh.dic が自動的に読み込まれます。 kh.dicはソートされていなければなりません。辞書の追加は、 kh.dic を直接 編集するよりも、base-dic.txtを編集して、

% sort base-dic.txt > kh.dic; kh textfile.txt |less

または、

% sort base-dic.txt | uniq > kh.dic; kh textfile.txt |less

とすると毎回更新した辞書で処理できます。また、環境変数 KHDICを設定すると、そちらのパスの方が優先されます。 -f オプションで辞書ファイルを指定すると、環境変数よりもオプションの方が優先的に使われます。

bash をお使いの場合には、

% export KHDIC="/path/to/dictionary/kh.dic"

のようにパスを環境変数で指定すると、辞書の指定を意識せず、どのディレクトリから、kh自体にパスが通っていれば使えます。

実行方法

bash % kh filename でできます。入力は、標準入力(パイプ)とファイル(ワイルドカードを含む )のいずれかで指定します。出力は標準出力のみです。

オプション

オプションは、次の通り。

-e              処理文字コードとしてEUCを使います。(default)
-s              処理文字コードとしてSJISを使います。
                (make sjisの時には、こちらがdefaultになります。)
-d              テキストを処理するのに使った辞書項目を出力します。
-m              すべての可能な候補を---で区切って列挙します。
-f textfile.txt 辞書ファイルを明示的に指定します。
-x              <...>あるいは</...>のタグで改行します。
-v              バージョンを表示します。
-h              ヘルプを表示します。

入力テキストのフォーマット

管理番号[tab]和歌テキスト

例1)
000001  年のうちに/春は来にけり/一年を/去年とや言はむ/今年とや言はむ

例2)
000001  としのうちに春はきにけりひととせをこぞとやいはむことしとやいはむ

の形で入力してください。フォーマットは単なるテキストで構いません。添付 の辞書では、岩波新日本文学大系本、新編国歌大観の表記が処理されるように 管理してあります。他の和歌集を処理するには不足分をユーザが追加する必要 がありますが、山元も随時、辞書を更新しています。

出力の読み方

1バイト文字は無視して出力します。歌番号や注釈などにご利用ください。

2バイト文字で辞書にあるものは、品詞情報を出力します。

2バイト文字で辞書にないものは、その文字+missing+改行を出力します。

2バイトの記号文字列を、57577の区切りとしてご利用ください。

テキスト中のタブは改行に置き換えられます。

ちなみに私は/を句切りに使いました。なくても構いません。

    例1(活用なし)
        風(名:風:かぜ)
        |  |  |   |
        +--|--|---|-----出現形
           +--|---|-----品詞
              +---|-----漢字
                  +-----ひらがな

    例2(活用あり)
        更け(カ下二-用:更く:ふく:更け:ふけ)
        |     |     |   |    |    |    |
        +-----|-----|---|----|----|----|---------出現形
              +-----|---|----|----|----|---------品詞
                    +---|----|----|----|---------活用形
                        +----|----|----|---------基本形漢字
                             +----|----|---------基本形ひらがな
                                  +----|---------活用形漢字
                                       +---------活用形ひらがな

'()'の前の文字列をとると出現形が得られます。'()'中の2番目をとると基本 形漢字、3番目をとると基本形ひらがなが得られます。どれが必要かは出力を もとに、テキスト処理スクリプトを書いて適当に処理してください。

辞書のフォーマット

  • 活用のない語のフォーマット
    A=B(C:D-k:D-h);
    | | |  |   |
    +-|-|--|---|-----見出し語
      +-|--|---|-----出現形
        +--|---|-----品詞
           +---|-----漢字
               +-----ひらがな

    例)

    風=風(名:風:かぜ)
  • 活用のある語のフォーマット
    A=B(C-c:D-k:D-h:E-k:E-h);
    | | | |  |   |   |   |
    +-|-|-|--|---|---|---|---------見出し語
      +-|-|--|---|---|---|---------出現形
        +-|--|---|---|---|---------品詞
          +--|---|---|---|---------活用形
             +---|---|---|---------基本形漢字
                 +---|---|---------基本形ひらがな
                     +---|---------活用形漢字
                         +---------活用形ひらがな

    例)

    更け=更け(カ下二-用:更く:ふく:更け:ふけ)

連語見出しの場合には、

A=B(C-c:D-k:D-h:E-k:E-h);B(C-c:D-k:D-h:E-k:E-h);...;

が1エントリです。末尾に’;’(=セミコロン)をつけてください。

    例)

    せしまに=せ(サ変-未:す:す:せ:せ);し(過-体:き:き:し:し);ま(名:間:ま);に(格助:に:に);

上記の例は、「せしまに」のパターンに対して、「せ」「し」「ま」「に」 の4語が出力されます。それぞれのパターンの間と末尾には’;’(=セミコロン) をつけてください。ひらがなのみ2音節以下の見出し語や「のみ」「もと」「 をり」のような助詞と同じ仮名ではじまる語は、きわめて曖昧なので、登録は お勧めしません。できるだけ和歌の句のはじめから、あるいは自立語から連語 を登録してください。

辞書を更新したときには

変更前の辞書で、一旦変換したファイルを作成しておき(更新前ファイル)、 変更後の辞書で、同じファイルの出力と変更前ファイルを diff で確認するこ とをお勧めします。これは本プログラムに限らず、辞書を使うプログラムでは、 辞書を更新することによって以前解析した出力と異なる結果を生むことがあり ます。人間の目による確認作業は、避けられない作業ですが、辞書を更新する 度にすべてを再び確認するわけにはいきません。ぜひ、diffで、更新前後の出 力の違いを確認すると、変動の箇所のみを確認するだけで済みます。

% sort base-dic.txt > kh.dic
% cat kokin-komachiya1982.txt | kh -mf ./kh.dic > before.txt
====ここで辞書を更新====
% sort base-dic.txt > kh.dic
% cat kokin-komachiya1982.txt | kh -mf ./kh.dic > after.txt
% diff after.txt before.txt

個別(分野別作品別)辞書のすすめ

見出し語が多ければ、より正しい出力が得られるわけではありません。語を 登録すればするほど、ある文字列に該当する候補が多くなります。その場合に はすべての候補を、 -m オプションで出力し、後で目で見て選択・確認しなけ ればなりません。しかし、あらかじめ処理している作品がわかっているのなら ば、その作品専用あるいは近い性格の辞書を作って利用すると、より手間のか からない、正しい出力が期待できます。特に固有名詞(地名、人名)は、当該 の作品には非常に役立ちますが、それ以外の作品ではほとんど必要ありません。

個別辞書の作り方は、base-dic.txtを下地にして、処理したいテキストに必 要な見出しを追加していきます。すべての処理が完了したら、

% kh -dm work-text.txt | sort > work-dic.txt

古今集の例なら、 たとえば、小町谷照彦 (1982) 『古今集和歌集』のテキストを kokin-komachiya1982.txtという名前で保存したとして、

% kh -dm kokin-komachiya1982.txt | sort > kokin-dic.txt

を実行してください。

対応テキスト一覧および出典

八代集(古今、後撰、拾遺、後拾遺、金葉、詞花、千載、新古今)の仮名漢 字交じりテキストに対応してあります。それぞれの出典はkh.bibにBiBTeX形式 で収録しました。

KH関連論文

KHに関する記事は、

  • 山元啓史(2007) 和歌のための品詞タグづけシステム 日本語学会「日本語の研究」第3巻、第3号、33-39頁

  • Hilofumi Yamamoto (2007) POS tagger for Classical Japanese Poems, The Study of Japanese Linguistics, Vol. 3, No. 3, 33–39, The Society for Japanese Linguistics.

をご覧ください。