[Canna-dev 91] modification to the statistics patch

Zurück zum Archiv-Index

KANOU Hiroki kanou****@mil*****
2002年 11月 20日 (水) 23:57:20 JST


狩野です。

変換アルゴリズムの改善を客観的に検討するためには、その変更によって
どのような影響がもたらされたかを知る必要があります。再評価の作業を
自動化し、定量的に語れるようにしたいと思います。

藤枝さんの作られた統計パッチ (http://www.jaist.ac.jp/~fujieda/canna/
Canna35b2-stat1.patch.gz) は、文節毎の変換結果・品詞解析結果・
文節長変更や候補選択のログを取ることができますが、元の読みがログファイル
に出力されないため、後で人間の変換処理をエミュレートする自動処理を
させるためには読みを付加してやる必要がありました。そこで、非常に単純な
パッチを作成してみました。

誤変換 文節長変更 トルコ/とるこ[CN]と/と[Kto]が/が[Kga] -> 取/と[R5]る/る[r5u]
誤変換 と/と[R5]る/る[r5u] -> 取/と[R5]る/る[r5u]
正解 こと/こと[T35]が/が[Kga]
正解 でき/でき[KSr]ます/ます[masu]が/が[Fga]、/、[Fga]

のように出力されます。

藤枝さんのパッチを当ててからこのパッチを当ててください。

--- lib/RK/bun.c.orig	Wed Nov 20 23:34:37 2002
+++ lib/RK/bun.c	Wed Nov 20 23:32:15 2002
@@ -63,6 +63,7 @@
 Wchar *yomi;
 {
     static unsigned char msg[RK_LINE_BMAX];
+    static unsigned char eyomi[RK_LINE_BMAX];
     struct nword *words[RK_CONC_NMAX], **p, *wp;
     int msg_idx = 0;
     char *hinsi;
@@ -73,7 +74,7 @@
 	*p++ = wp;
 
     while (p-- > words) {
-	int hinsi_len;
+	int yomi_len, hinsi_len;
 
 	wp = *p;
 	if (!wp->nw_left)
@@ -82,12 +83,15 @@
 	ekanji = ustoeuc(kanji, wp->nw_klen - wp->nw_left->nw_klen,
 			 msg + msg_idx, RK_LINE_BMAX - msg_idx);
 	msg_idx = ekanji - msg;
+	ustoeuc(yomi + wp->nw_left->nw_ylen, 
+		wp->nw_ylen - wp->nw_left->nw_ylen, eyomi, RK_LINE_BMAX);
+	yomi_len = strlen(eyomi);
 	hinsi = cx->gram->gramdic->ng_strtab[wp->nw_rowcol];
 	hinsi_len = strlen(hinsi);
-	if (msg_idx + hinsi_len + 2 >= RK_LINE_BMAX)
+	if (msg_idx + 1 + yomi_len + hinsi_len + 2 >= RK_LINE_BMAX)
 	    break;
-	sprintf(msg + msg_idx, "[%s]", hinsi);
-	msg_idx += hinsi_len + 2;
+	sprintf(msg + msg_idx, "/%s[%s]", eyomi, hinsi);
+	msg_idx += 1 + yomi_len + hinsi_len + 2;
     }
     msg[msg_idx] = 0;
 
@@ -180,6 +184,7 @@
 	    }
 	}
     } 
+    fprintf(fp, "\n");
     fflush(fp);
 }
 #endif

変換アルゴリズムの改良に興味のある皆様に興味を持って頂ければ幸いです。
みんなで公開可能なテキストを持ち寄って、まずは1000センテンス程度の
規模の評価テキストを作りませんか?

狩野 宏樹  <kanou****@mil*****>



Canna-dev メーリングリストの案内
Zurück zum Archiv-Index