yusuk****@cheru*****
yusuk****@cheru*****
2003年 2月 24日 (月) 01:28:40 JST
田畑です 検索を深くしたことと、文節に切るところの説明をしときます。 anthyでは文節の基本単位をword list(struct word_list)と 呼んでます、これは接頭辞+ 自立語 接尾辞+ 付属語+で 構成されていて変換を開始したときに全部作られます。 たとえば、「かく」という単語に対しては 動詞終止形として解釈したものと、名詞(「各」)として 解釈したもののの二つが作られます。 #興味のある人は src-splitter/wordlist.c, wordseq.c #mkanthydic/*depword* などを見てください。 そして、word_listはmetaword(struct meta_word)にwrapされて metawordはextentの中にリストとしてつながれます。 #metawordは「いれたて(のお茶)」のような自立語の結合した #文節などを処理するために用意してます。 # src-splitter/metaword.c extentは文の中の部分文字列を意味していて、 「わたしのなまえは」という文字列には 「わ」「わた」「わたし」「わたしのな」 「た」「たし」「たしの」「たしのな」 「し」「しの」「しのな」「の」「のな」 「な」「ま」「まえ」「まえは」「え」「えは」「は」 といったextentがあって、それぞれがスコアを持ちます。 検索の時には「わたしの」+「なまえは」で一番スコアが 高いといったことを計算します。 #src-splitter/evalborder.c参照 去年の5月まではmetawordに対して検索していて、 検索の分岐が数十になることも多々あったので、 深さを3で抑えていました。 その後extentを導入したため、分岐が10までいくことも ほとんど無くなっているにも関わらずそのままにしてました。 そんなわけで、深さを4まで増やしてみたところ、 いくつかの区切り間違いが消えたのでそのままリリース してます。 splitterはいつまでたってもボトルネックなので、 これからも調整や新しい技術の導入が必要な 領域だと思ってます。 -- PUBLISH OR PERISH! Yusuke TABATA (yusuk****@cheru*****)