「出張旅費精算書」を1語として扱いたいのか、「出張」「旅費」「精算」「書」に割りたいのか。Sudachiはこれを選べます。
実際に入れて測りました。単位を粗くすると1語になります。加えて書き方の違う8組が、正規化形では8組ともそろいました。
同じ文を3つの単位で切りました。長い名前をまとめるか割るかを、こちらで選べます。
Sudachiで分割の単位を変えると何が変わるのかを、実際に走らせて測りました。使ったのは社内規程を模した文書12件です。
READMEも単位の違いをA:選挙/管理/委員/会 B:選挙/管理/委員会 C:選挙管理委員会という例で示しています。同じ文字列が、単位によって4語にも1語にもなります。
MODES = [('A(細かい)', SplitMode.A), ('B(中間)', SplitMode.B), ('C(粗い)', SplitMode.C)]
def surfaces(text, mode):
return [m.surface() for m in tok.tokenize(text, mode)]
宿泊費の上限は1泊12000円とする。
A(細かい) 12個 宿泊|費|の|上限|は|1|泊|12000|円|と|する|。
B(中間) 11個 宿泊費|の|上限|は|1|泊|12000|円|と|する|。
C(粗い) 11個 宿泊費|の|上限|は|1|泊|12000|円|と|する|。
出張旅費精算書の提出は必要とする。
A(細かい) 11個 出張|旅費|精算|書|の|提出|は|必要|と|する|。
B(中間) 10個 出張|旅費|精算書|の|提出|は|必要|と|する|。
C(粗い) 8個 出張旅費精算書|の|提出|は|必要|と|する|。
単位 語の総数 語の種類
A(細かい) 245個 109種
B(中間) 227個 105種
C(粗い) 218個 104種
上の出力を見てください。「出張旅費精算書」は細かい単位で出張・旅費・精算・書の4語に割れ、粗い単位では1語のままになりました。
1語のままなら、帳票名として正確に絞り込めます。「出張」だけを含む別の条文には当たりません。
割れていれば逆になります。「旅費の精算」と書かれた文書にも当たります。広く当てたいときはこちらです。
「宿泊費」も同じです。細かい単位では宿泊と費に割れ、中間から上では1語のままでした。
語の総数は245個から218個までしか変わりません。差が出るのは長い名前のところだけで、文全体としては大きく変わらないという結果でした。
差が出るのは長い名前のところ。
書き方の違う語を同じ形に直す機能が入っています。送り仮名や長音の違いは、それだけでそろいます。
Sudachiには書き方の違いを1つの形にそろえる機能があります。どこまでそろうのかを実際に測りました。
READMEは、そろえる対象として送り仮名(打込む→打ち込む)や表記(かつ丼→カツ丼)を挙げています。誤記や縮約形も対象だとしています。
書き方1 書き方2 表層形が同じ 正規化形が同じ 打ち合わせ 打合せ いいえ はい 引っ越し 引越 いいえ はい サーバ サーバー いいえ はい コンピュータ コンピューター いいえ はい 問い合わせ 問合せ いいえ はい 受け付け 受付 いいえ はい 申し込み 申込 いいえ はい 取り扱い 取扱 いいえ はい 8組のうち、表層形で同じ: 0組 / 正規化形で同じ: 8組
上の表を見てください。書いてある文字としては8組すべてが違います。正規化形にすると8組ともそろいました。
そろう先は決まっています。「打合せ」は打ち合わせに、「サーバ」はサーバーになりました。
短いほうにそろうわけでも、長いほうにそろうわけでもありません。辞書が定めた形に寄ります。
4番目は忘れがちです。辞書に載っていない書き方は、そろえようがありません。表記のゆれ全般の話は表記ゆれの記事で扱っています。
使ったのは中間の大きさの辞書です。READMEによれば辞書は3種類あり、小・中・全で収録される語彙が違います。固有名詞を多く含むものに替えると、割れ方もそろい方も変わります。この記事の数字は中間の辞書での結果です。
Sudachi normalize the following variations. Okurigana e.g. 打込む → 打ち込む Script e.g. かつ丼 → カツ丼原文Sudachi README この内容の有効期限2027-02-18
単位を選べることの裏返しです。索引を作った単位と問いを切る単位がずれると、語が一致しなくなります。
Sudachiで単位を選べるということは、選び間違えることもできるということです。索引と問いで単位を変えたらどうなるかを測りました。
索引の単位 問いの単位 一致した語の数(問い4件の合計) A(細かい) A(細かい) 17 / 17 A(細かい) B(中間) 11 / 14 A(細かい) C(粗い) 8 / 12 B(中間) A(細かい) 14 / 17 B(中間) B(中間) 14 / 14 B(中間) C(粗い) 10 / 12 C(粗い) A(細かい) 12 / 17 C(粗い) B(中間) 11 / 14 C(粗い) C(粗い) 12 / 12
上の表で、索引と問いが同じ単位の行はすべて全部一致しています。17/17、14/14、12/12です。
単位がずれた行では一致が減ります。いちばん落ちたのは細かい索引に粗い問いを当てた場合で、12語中8語でした。
理由は単純です。索引には「出張」「旅費」「精算」「書」が入っているのに、問いは「出張旅費精算書」という1語で来ます。文字は同じでも、語としては一致しません。
READMEは、Aの単位では最も短い単位に分けられ、Cの単位では固有表現を取り出すとしています。粗い単位は名前をまとめる働きです。
だから固有名詞を正確に扱いたいなら粗い単位が向きます。ただし問いの側も同じ単位で切る必要があります。
単位を変えたら索引を作り直します。片方だけ変えると、上の表の非対角の行と同じことが起きます。
単位をそろえれば全部一致。ずらすと落ちる。
In A mode, texts are divided into the shortest units equivalent to the UniDic short unit. In C mode, it extracts named entities.原文Sudachi README この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る