2008年11月21日

anthy depgraph に接続を定義しても効かないものがある問題 - 絶賛ハマリ中

タイトルの通り、ハマってます。

実はこれ、今回初めて知ったわけではなく、以前「可能動詞がどうの」と騒いでた時にぶつかって、「んー、分からん!」でほったらかしてた奴なんですが。あん時に聞いときゃよかったな…。

再現手順はこんな感じ。

まず depgraph を変更。
たとえば、オリジナルの anthy-9100e では辞書にある五段動詞語幹に可能動詞用の活用語尾をつけ、それを通常の動詞と同じ node に接続させることで可能動詞の文節を出してますが、可能動詞は活用は一段動詞と同じ(命令形がないとされているのを除けば)ですが、接続は通常の動詞と同じ訳ではないので、そこを直してみます。と言っても、ここではそれが目的ではないので大雑把にですが。
--- conjugate.table.orig 2008-01-28 21:56:58.000000000 +0900
+++ conjugate.table 2008-11-20 21:16:22.000000000 +0900
@@ -34,12 +34,12 @@
@カ行5段活用動詞語幹 "け" @動詞仮定形
@カ行5段活用動詞語幹 "け" @動詞命令形
#可能動詞
-@カ行5段活用動詞語幹 "け" @動詞未然形5
-@カ行5段活用動詞語幹 "け" @動詞連用形5 @動詞連用形TA
-@カ行5段活用動詞語幹 "ける" @動詞終止形
-@カ行5段活用動詞語幹 "ける" @動詞連体形
-@カ行5段活用動詞語幹 "けれ" @動詞仮定形
-@カ行5段活用動詞語幹 "けろ" "けよ" @動詞命令形
+@カ行5段活用動詞語幹 "け" @可能動詞未然形
+@カ行5段活用動詞語幹 "け" @可能動詞連用形
+@カ行5段活用動詞語幹 "ける" @可能動詞終止形
+@カ行5段活用動詞語幹 "ける" @可能動詞連体形
+@カ行5段活用動詞語幹 "けれ" @可能動詞仮定形
+@カ行5段活用動詞語幹 "けろ" "けよ" @可能動詞命令形
#
@カ行5段活用動詞名詞化語幹 "き" Hn@名詞化動詞のあと
#
--- v.depword.orig 2007-06-16 06:25:01.000000000 +0900
+++ v.depword 2008-11-20 21:26:20.000000000 +0900
@@ -83,3 +83,22 @@
@動詞命令形_ "" SeCm@ @と(引用)
#
@動詞丁寧表現語幹 "" @ @する名詞
+#
+@可能動詞未然形 "" @ぬ @まい @ない
+@可能動詞連用形 "" Sy@ @た(助動詞) @やがる @ます @そうだ @さえ @まくる @すぎる @連用形接続-接続助詞
+@可能動詞終止形 "" @終止形接続-接続助詞 @ほど @ね @さ(感嘆) @くらい
+@可能動詞終止形 "のも" Sy@
+@可能動詞終止形 "も" Se@
+@可能動詞終止形 "まで" Sy@ @名詞のあと
+@可能動詞終止形 "っぽ" @形容詞語幹
+@可能動詞終止形 "のでは" @ない Sy@
+@可能動詞終止形 "のでも" @ない Sy@
+@可能動詞連体形 "" @連体形接続-接続助詞 @にも @のみ
+@可能動詞連体形 "とき" @名詞のあと
+@可能動詞連体形 "には" Sk@
+@可能動詞連体形 "の" @は @が
+@可能動詞連体形 "に" Sy@
+@可能動詞連体形 "にしても" Sy@
+@可能動詞仮定形 "" @ば
+@可能動詞命令形 "" SeCm@ @と(引用) @よ
+

そして普通にビルド。
変更前の depgraph/anthy.dep のサイズは konqueror での表示で 60.4KB だったのが、変更後は 59.8KB に減ります。node の数が増えたのにサイズが減っているのは明らかにおかしいと思いますが、とにかく変換してみる。

(インストールせずに anthy-agent とか使ってテストするのがお作法的には正しいのかもしれませんが、面倒なので、今使ってる /usr/share/anthy/anthy.dic をリネームして退避させ、「sudo mv mkanthydic/anthy.dic /usr/share/anthy/」後 uim 再起動した)。

で、変換結果。一文節にして候補リストの中にあれば OK とする。候補リストの中になければ接続できていないことになる。

・未然形
 「かけない」→×「書け|ない」(文節伸ばして一文節にすると変換できない)
 「かけぬ」→○「書けぬ」
 「かけまい」→○「書けまい」
・連用形 → 全部 OK
・終止形
 「かけるらしい」→×「可|ケルら|恣意」(文節伸ばして一文節にしても変換できない)
 「かけるかも」→○「書けるかも」
 「かけるだろう」→○「書けるだろう」
 「かけるくらい」→○「書けるくらい」
 「かけるっぽい」→×「かけるっ|ぽい」(文節伸ばして一文節にしても変換できない)
(以下省略)

大体こんな感じで接続できてるものとできてないものがある。
さらに言うと、通常の五段活用の「かかない」も「呵呵|ない」になって接続できなくなってる。

で、できなくなる条件を絞り込もうと色々変えたりして試したんですが、何でなのかどこが悪いのか全然分かりません。

それでまぁ、「これはもうソース読んでみるしかないな」と思って、C の入門書片手に読み始めたところです。「anthy のプログラムいじるなんて自分にゃムリ」とは思ってるんですが、これが解決しないと depgraph 作り直したって使えないんでねぇ…。ちなみに、まだ作りかけの新 depgraph でやってみたところ、anthy.dep が 8KB 弱しかなく、ほとんど何も変換できませんですた orz。ナンテコッタ

直接関係のあるソースは depgraph/mkdepgraph.c だけだと思うので、それさえ理解できればいいと思うんですが(色んなヘッダは見なきゃいけないんでしょうが)、C なんてほんの初歩的なことしか知らないし、プログラム書いたことすらないし、一体いつになることやら…。

処理のおおまかな流れとしては、

 1. indepword.txt を読み、第一フィールドの品詞名で src-worddic/ptab.h を検索し、品詞コード他の情報を得る
 2. 見つかった品詞コードが anthy/wtype.h にあるかチェック
 3. 第二フィールドの node 名を id に変換して、登録
 4. indepword.txt を処理し終わったら master.depword を読み、node 名を id に変換しながら indepword.txt で登録した branch に繋げていく

とまあ、大体こんな感じなんじゃないかと想像してますが、問題は具体的にどう繋げてるかなんですよね、多分。


参ったね。
posted by vagus at 00:29| 東京 ☀| Comment(4) | TrackBack(0) | 日本語入力 - アプリ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
同じ問題に当たって、webで検索していたらこちらに辿り着きました。

src-diclib/ruleparser.c の 254〜256行目(get_line()内)の
if (!g_ps.nr_token) {
return ;
}
は、
if (g_ps.nr_token < 1) {
goto again;
}
の間違いだと思われます。

ついでに。anthy-8?00 でコーパス導入の頃に depgraph の仕様変更が行われたみたいですが、doc/SPLITTER の一部が仕様変更前のままになっています。
「接続の強さ」の「.」と「:」は両方共 MW_FEATURE_WEAK_CONN で、付属語の遷移中に1回でも指定があると、指定回数に関係無く文節スコアが 1/10 になります。
(以前は「:」が1回につき 1/2、「.」が1回につき 1/8 だったらしい)。
既にご存知でしたら御免なさい。
Posted by G-HAL at 2008年11月22日 22:21
おおおっ!!!

ありがとうございます!
src-diclib/ruleparser.c を修正して試してみたところ、記事中で変換できなかったものも変換できるようになりました。
また、作成中の自作 depgraph でも、定義してあるものについてはちゃんと変換できているようです。

何とお礼を申し上げたらよいものやら…。
お教え頂き、本当にありがとうございます。

これで泣きながらソースを理解しようとする作業から解放されて、元の作業に戻れます。

「.」と「:」が同じ扱いになってるのは depgraph/mkdepgraph.c を見ていて気づきましたが、それ以上のことは知りませんでした。こちらもありがとうございます。

ところで、src-diclib/ruleparser.c の修正をパッチの形にして anthy 本家の方へ送っておきたいのですが、構いませんでしょうか?
Posted by vagus at 2008年11月23日 18:49
お役に立ったようで、幸いです。

先の post の後に気付いたのですが、depgraph/Makefile.am の 16行目と depgraph/Makefile.in の 443行目の
anthy.dep : mkdepgraph
を、
anthy.dep : mkdepgraph $(DEPWORDS)
にしないと、depgraph を書き換えてビルドしなおした時に辞書が更新されない場合がある模様です。小出しになってしまって申し訳ありません。

修正パッチを本家に送る件ですが、OKです。助かります。
Posted by G-HAL at 2008年11月24日 23:58
何度もありがとうございます。
こちらこそ大助りです。

あとで本家の方へ送らせて頂きます。
Posted by vagus at 2008年11月25日 00:32
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。