形態素解析器 Sudachi の辞書が手に入ったので Go で遊んでみた

はじめに

Sudachi はワークスアプリケーションズが絶賛開発中の形態素解析器で,Java で書かれています.

今一番新しい注目すべき形態素解析器で,次のような機能が特徴としてあげられています.

  • 複数の分割単位の併用
    • 必要に応じて切り替え
    • 形態素解析と固有表現抽出の融合
  • 多数の収録語彙
    • UniDic と NEologd をベースに調整
  • 機能のプラグイン
    • 文字正規化や未知語処理に機能追加が可能
  • 同義語辞書との連携 (後日公開予定)

github.com

開発のステータスは公式には発表されていない(?)ようですが,開発中で本リリースはこれからかな・・・と思います.(実際のところ,スケジュールなどはどうなんでしょうか?)

最近,Sudachi の辞書がレポジトリからダウンロードできるようになったので,kagome の辞書に加工して少し遊んでみました. 以下,公式情報ではない&開発で変更されるかもしれないので,正しいところは元コードを当たってください.

辞書の構造

辞書構造は UniDic とほぼ同じです.

カラム 内容 備考
0 headword 新国立美術館 正規化された見出し語.アルファベットが小文字に統制されてるとか
1 left-id 5962 -1が入ってることがあるが,その場合は辞書項目として無効のようだ
2 right-id 5861
3 cost 21119
4 headword 新国立美術館 こっちの見出し語は正規化されてない見出し語っぽい
5-10 part-of-speech 名詞,固有名詞,一般,,,*
11 reading form シンコクリツビジュツカン
12 normalized form 新国立美術館 動詞だったら食べ -> 食べる みたいな
13 dictionary form word id * normalized form に相当する辞書項目があればその ID が入ってるっぽい
14 分割情報 (A/B/C) C
15 A ユニット分割 2008495/1573531/2528962/2843222 数値は形態素のIDっぽいので,これで分割される形態素を引けばよさそう
16 B ユニット分割 2008495/1573531/2528997
17 word structure 2008495/1573531/2528997 これは何に使うのかな?

見出し語

Neologd からも項目を持ってきてるみたいで,結構おもしろいエントリが入ってます. たとえば,

エターナルフォースブリザード,5144,5144,7882,エターナルフォースブリザード,名詞,固有名詞,一般,*,*,*,エターナルフォースブリザード,エターナルフォースブリザード,*,C,515901/962003/982867,515901/962003/982867,515901/962003/982867

なんてのも入ってます.UniDic では短単位に切れすぎていたので,固有名詞の長い形態素とかがキレイにとれるようになるのかもしれません.Neologd は機械的にエントリを作ってるとのことなので,Sudachi に取り込まれる際にはどのような基準で取り込まれるのか,機械的にやるのか,人目でチェックするのか,などなど気になります.まだこの辺は調整されるのかもしれないので今後の辞書開発に期待です.

あと,遊ぶ上での注意点としては見出し語にユニコードリテラルがコードポイントで表現されていることがあります.

!!\u0028 ; ロ\u0029゚ ゚,5977,5977,5000,!!\u0028 ; ロ\u0029゚ ゚,記号,一般,*,*,*,*,カオモジ,!!\u0028 ; ロ\u0029゚ ゚,*,A,*,*,*

こんなエントリがありますが,\u0028ユニコードリテラルとして解釈してやる必要があります.

分割単位

Sudachi では短い方から A, B, C の3つの分割モードが提供されています. A は UniDic 短単位相当,C は固有表現相当,B は A, C の中間的な単位とのことです.

README.md に掲載されていた例を示します。

A:医薬/品/安全/管理/責任/者
B:医薬品/安全/管理/責任者
C:医薬品安全管理責任者

A:自転/車/安全/整備/士
B:自転車/安全/整備士
C:自転車安全整備士

A:消費/者/安全/調査/委員/会
B:消費者/安全/調査/委員会
C:消費者安全調査委員会

A:新/国立/美術/館
B:新/国立/美術館
C:新国立美術館

辞書では長い(分割単位BとかCの)エントリに分割情報がついているので,表示する際に分割してやれば目的を達成できそうです.

とりあえず動かしてみる

kagome は UniDic を扱えるので,UniDic の辞書だと思って Sudachi を辞書をコンパイルして動かしてみました.

お約束の すもももももももものうち です.

f:id:ikawaha:20171018180742p:plain

Sudachi には すもももももももものうち というずばりそのもののエントリもあるのですが,そちらは選ばれませんでした. Sudachi 自体で動かしてみましたが,同じ解析結果になったので,やり方を外しているわけではないみたいです.

f:id:ikawaha:20171018180638p:plain

TODO

kagome にそのまま取り込んで,分割情報で調整してやれば大体うまく動きそうな感触を得ました. kagome ではやってない Sudachi の以下の機能は別途開発しないとだめかな・・・ という感じです.

  • [ ] 入力テキスト修正
    • 文字列正規化 (全半角、大文字/小文字、異体字)
  • [ ] 長音正規化 (「~」や長音記号連続の正規化.まだリリースされてない?)
  • [ ] 未知語処理
    • 1文字未知語
  • [ ] 単語接続処理 (品詞接続禁制)
  • [ ] 出力解修正
    • カタカナ未知語まとめ上げ
    • 数詞まとめ上げ
  • [ ] 分割粒度調整 (未知語/既知語の分割粒度の平滑化.まだリリースされてない?)
  • [ ] 数詞正規化 (漢数詞や位取りの正規化.まだリリースされてない?)
  • [ ] 人名補正 (敬称や前後関係から人名部を推定.まだリリースされてない?)

Sudachi の辞書使って遊んでみたいと思ってる人の一助になれば幸いです. Happy Hacking!