Sudachi ではユーザー辞書をもちいて、システム辞書で不足している語を補ったり、システム辞書の語と同一見出しの語を登録することによって解析結果上の品詞などの情報を差し替えることができます。
本文書では、辞書形式 V1 について記述します。 Sudachi v0.8.1 以前では V0 形式を参照してください。
ユーザー辞書の作成は、登録したい語を記述したユーザー辞書ソースを用いて行います。 このファイルは、CSV 形式 (RFC 4180) で保存します。文字コードは、UTF-8 を使用します。 ユーザー辞書ソースに記載できる項目は以下の通りです。
- 0 Index_Form: 解析用表記
- 1 Left_Id: 左連接 ID
- 2 Right_Id: 右連接 ID
- 3 Cost: コスト
- 4 Headword: 見出し表記
- 5 POS1: 品詞 1
- 6 POS2: 品詞 2
- 7 POS3: 品詞 3
- 8 POS4: 品詞 4
- 9 POS5: 品詞 (活用型)
- 10 POS6: 品詞 (活用形)
- 11 Reading_Form: 読み
- 12 Normalized_Form: 正規化形情報
- 13 Dictionary_Form: 辞書形情報
- 14 Mode: 分割タイプ
- 15 Split_A: A 単位分割情報
- 16 Split_B: B 単位分割情報
- 17 Word_Structure: 語構成情報
- 18 Synonym_Groups: 同義語グループ ID 情報
- 19 Split_C: C 単位分割情報
- 20 User_Data: ユーザーデータ
- 21 POS_Id: 品詞 ID
- 22 Reference_Id: 参照 ID
各項目については以下に説明します。 なお関連する項目をまとめているため、記載順は上記とは異なっています。
ファイルの一行目はヘッダーを記述します。 ヘッダー行に記述された項目の順序でファイル全体がパースされます。 項目名の記述では、"_" の有無および大文字・小文字の違いは無視されます。
ヘッダー行が検出されなかった場合は、辞書形式 V0に従って処理されます。 ただし、この場合でも上記の順序に従えばすべての項目を記述できます。 辞書形式 V0 にない項目についてはこのドキュメントを参照してください。
項目のうち、Writing、Mode、Synonym_Groups、Split_C、User_Data は省略可能です。 また、POS1 - POS6 の組と POS_Id は少なくとも一方の記載が必須です。 その他の項目は必須です。
一部の項目では、辞書内の他の語への参照を記述することがあります。 以下ではこれを語参照と呼称します。
語参照は対象語の「見出し表記, 品詞, 読み」を "," (カンマ) で区切った文字列で記述します。 品詞は POS1-POS6 の6つ組 もしくは POS_Id のどちらかを使用します。 これらの3要素で参照先を確定できない場合は、末尾に Reference_Id を追加した4要素形式も使用できます。
例: 東京,名詞,固有名詞,地名,一般,*,*,トウキョウ, 東京,1349,トウキョウ, 東京,1349,トウキョウ,tokyo-main
語参照を記述するときはその項目のフィールド全体を " (ダブルクォーテーション) で囲む必要があります。
語参照の参照先にあたる語は、ソースファイル内かビルド時に指定するシステム辞書内に別途記述されている必要があります。 参照の解決は、指定に用いられた要素のすべてがマッチするかで判別します。 複数の語がマッチする場合は、CSVの先頭に記述された語が優先され、ユーザー辞書の語がシステム辞書より優先されます。
形態素解析に使用される見出しの表記です。 表記の長さは、255 文字まで登録できます。
解析用表記は、「Sudachi の文字正規化がおこなわれた後の形」で登録してください。
Sudachi では、文字正規化が行われた後に見出しを引きます。そのため、「正規化後に現れない形」で解析用表記が記述されている場合、その語はどのような場合でもマッチすることがありません。例えば、「ラテン文字の大文字」で解析用表記を記述した場合、解析時には Sudachi 内部では正規化後の「小文字」になったもので見出しを探すため、この大文字のものとマッチすることがありません。
Sudachi では、以下の文字正規化を行っています。挙動の詳細は、Sudachi ドキュメントの該当箇所を参照してください。
- 小文字化
- NFKC をつかった Unicode 正規化
- ただし、設定ファイル
rewrite.defに定義される抑制、置換が優先
- ただし、設定ファイル
ユーザー辞書の解析用表記へは、文字正規化は自動的には適用されません。これは、ユーザーが想定しづらい挙動を避けるためです。そのため、ユーザー辞書の作成者が文字正規化を意識して語を表記する必要があります。
形態素解析の連接判定(左連接)に使用される ID です。 使用できる ID の種類は、unidic-mecab 2.1.2 の left-id.def を参照してください。
普通名詞の登録であれば、以下のいずれかを推奨
- 5146 名詞,普通名詞,一般,*,*,*,*,*,漢
- 5133 名詞,普通名詞,サ変可能,*,*,*,*,*,漢
固有名詞の登録であれば、以下のいずれかを推奨
- 4786 名詞,固有名詞,一般,*,*,*,*,*,固
- 4789 名詞,固有名詞,人名,名,*,*,*,*,固
- 4790 名詞,固有名詞,人名,姓,*,*,*,*,固
形態素解析の連接判定(右連接)に使用される ID です。 使用できる ID の種類は、unidic-mecab 2.1.2 の right-id.def を参照してください。
普通名詞の登録であれば、以下のいずれかを推奨
- 5146 名詞,普通名詞,一般,*,*,*,*,*,漢
- 5133 名詞,普通名詞,サ変可能,*,*,*,*,*,漢
固有名詞の登録であれば、以下のいずれかを推奨
- 4786 名詞,固有名詞,一般,*,*,*,*,*,固
- 4789 名詞,固有名詞,人名,名,*,*,*,*,固
- 4790 名詞,固有名詞,人名,姓,*,*,*,*,固
形態素解析に使用される語のコスト値です。 "-32767 ~ 32767" までの整数値で指定できます。 値を小さくするほど、登録した語が解析結果として出やすくなります。 なお、"-32768" を指定すると、ユーザー辞書読み込み時に自動推定した値を付与します。
名詞類の登録であれば、"5000 ~ 9000" を推奨
文字正規化を行う前の見出しの表記です。 語参照の解決時や正規化形、辞書形ではこちらが使用されます。
項目の記載を省略することができます。 項目が省略される、もしくは空欄の場合は、解析用表記 を代用します。
品詞の6つ組のうち第1要素を記述します。 システム辞書の品詞、あるいはユーザー定義の任意の品詞を記述できます。
システム辞書で使用する品詞は、pos.csv を参照してください。 これは ID をのぞいて unidic-mecab 2.1.2 の 品詞体系を参照しています。
項目 POS1 から POS6 は6つ組で記述します。 これらを記述する場合は、項目 POS_Id を省略、もしくは空欄とすることができます。 両方を記述する場合は、両者の内容が一致している必要があります。
品詞の6つ組のうち第2要素を記述します。 POS1: 品詞 1 を参照してください。
品詞の6つ組のうち第3要素を記述します。 POS1: 品詞 1 を参照してください。
品詞の6つ組のうち第4要素を記述します。 POS1: 品詞 1 を参照してください。
品詞の6つ組のうち第5要素を記述します。 POS1: 品詞 1 を参照してください。
品詞の6つ組のうち第6要素を記述します。 POS1: 品詞 1 を参照してください。
システム辞書の品詞、あるいはユーザー定義の任意の品詞を記述できます。 システム辞書で使用する品詞は、pos.csv を参照してください。 これは ID をのぞいて unidic-mecab 2.1.2 の 品詞体系を参照しています。
この項目を記述する場合、POS1 - POS6 の 6 項目を省略、もしくは空欄とすることができます。 両方を記述する場合は、両者の内容が一致している必要があります。
語にユーザ定義の品詞を記述する場合は、この項目は空欄とすることを推奨します。
語の読みを記述します。
全角カタカナもしくは記号での記述を推奨します。 空欄とした場合には読みがないものとして扱われます。
表記にぶれのある語に対して、その語の正規化形を指定するための情報です。
対象となる語への語参照を記述します。 空欄とした場合には自身を参照するものとして扱われます。
対象となる語の見出し表記で記述することも可能です。 この場合は見出し表記が一致する最初の語に解決され、また一致する語が記述されていない場合でも、見出し表記をこれに置き換えた語を自動で登録します。
活用のある語に対して、その語の辞書形(終止形表記)を指定するための情報です。
対象となる語への語参照を記述します。 空欄とした場合には自身を参照するものとして扱われます。
活用のない語については、この項目は空欄にしてください。
この項目は使用されません。 項目の記載を省略することができます。
項目を省略しない場合は、語の分割単位タイプ (A / B / C) を記述します。
分割単位タイプ B または C の語について、A 単位に分割するための情報です。
構成語への語参照を "/" (半角スラッシュ) で区切って記述します。 分割を行わない語については、空欄としてください。
なお構成語としてのみ利用される語は、連接 ID に -1 を記述すると、単独の語として出現しなくなります。
分割単位タイプ C の語について、B 単位に分割するための情報です。
フォーマットは A 単位分割情報と同じです。
分割単位タイプ C よりも長い語句を C 単位への分割情報と共に登録する際に使用します。 項目の記載を省略することができます。
フォーマットは A 単位分割情報と同じです。
この項目が登録された語句は、解析後に自動的に指定の分割単位に分割されます。
現在は未使用の参考情報です。
空文字列とするか、A 単位分割情報と同じ内容を記述してください。
Sudachi 同義語辞書における同義語グループ ID 情報です。 項目の記載を省略することができます。
対象となる同義語グループ ID を "/" (半角スラッシュ) で区切って記述します。 グループが存在しない場合は、空欄としてください。
語に対して任意の文字列を登録します。 項目の記載を省略することができます。
表記の長さは、32767 (0x7fff) 文字まで登録できます。
語参照の曖昧性を解消するための任意文字列です。 項目の記載を省略することができます。
3要素の語参照で使用する「見出し表記, 品詞, 読み」が一致する語がある場合に、それらを区別するための識別子を記述することができます。 必要のない語については空欄とすることができ、また空欄とすることを推奨します。
設定された値は、その辞書ソース内で一意である必要があります。 システム辞書・ユーザー辞書間での値の重複は許されますが、解決時はユーザ辞書の語が優先されます。
この項目は語参照の解決のための補助情報であり、解析には使用されません。 辞書バイナリの肥大化を防ぐため、必要な場合のみ記述し、そのほかの語については空欄にすることを推奨します。
以下にユーザー辞書ソースの例を記述します。
Surface,LeftId,RightId,Cost,POS1,POS2,POS3,POS4,POS5,POS6,ReadingForm,NormalizedForm,DictionaryForm,Split_A,Split_B,WordStructure,Reference_Id
舞台藝術,5146,5146,8000,名詞,普通名詞,一般,*,*,*,ブタイゲイジュツ,,,,,,
舞台芸術,5146,5146,8000,名詞,普通名詞,一般,*,*,*,ブタイゲイジュツ,,,,,,
コンピュータ学院,4786,5146,8000,名詞,固有名詞,一般,*,*,*,コンピュータガクイン,コンピューター学院,,,,,
コンピューター学院,4786,5146,8000,名詞,固有名詞,一般,*,*,*,コンピューターガクイン,,,,,,
モゲラ東京,5144,4792,4561,名詞,固有名詞,一般,*,*,*,モゲラトウキョウ,,,"モゲラ,名詞,固有名詞,一般,*,*,*,モゲラ/東京,名詞,固有名詞,地名,一般,*,*,トウキョウ",,,
モゲラ,-1,-1,0,名詞,固有名詞,一般,*,*,*,モゲラ,,,,,,
回っ,1431,1431,12016,動詞,一般,*,*,五段-ラ行,連用形-促音便,マワッ,回っ,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ら,1408,1408,13113,動詞,一般,*,*,五段-ラ行,未然形-一般,マワラ,回ら,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回り,1428,1428,10995,動詞,一般,*,*,五段-ラ行,連用形-一般,マワリ,回り,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回りゃ,1399,1399,12918,動詞,一般,*,*,五段-ラ行,仮定形-融合,マワリャ,回りゃ,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回りゃ,1437,1437,13113,動詞,一般,*,*,五段-ラ行,連用形-融合,マワリャ,回りゃ,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回る,1414,1414,11824,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル,回る,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回る,1421,1421,11979,動詞,一般,*,*,五段-ラ行,連体形-一般,マワル,回る,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回れ,1396,1396,15651,動詞,一般,*,*,五段-ラ行,仮定形-一般,マワレ,回れ,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回れ,1402,1402,13180,動詞,一般,*,*,五段-ラ行,命令形,マワレ,回れ,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ろ,1402,1402,13180,動詞,一般,*,*,五段-ラ行,命令形,マワロ,回ろ,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ろ,1405,1405,12745,動詞,一般,*,*,五段-ラ行,意志推量形,マワロ,回ろ,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ろう,1405,1405,12745,動詞,一般,*,*,五段-ラ行,意志推量形,マワロウ,回ろう,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ろっ,1405,1405,12745,動詞,一般,*,*,五段-ラ行,意志推量形,マワロッ,回ろっ,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ん,1411,1411,13812,動詞,一般,*,*,五段-ラ行,未然形-撥音便,マワン,回ん,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ん,1417,1417,14370,動詞,一般,*,*,五段-ラ行,終止形-撥音便,マワン,回ん,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ん,1424,1424,14139,動詞,一般,*,*,五段-ラ行,連体形-撥音便,マワン,回ん,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
回ん,1434,1434,13641,動詞,一般,*,*,五段-ラ行,連用形-撥音便,マワン,回ん,"回る,動詞,一般,*,*,五段-ラ行,終止形-一般,マワル",,,,
あわ,5146,5146,8000,名詞,普通名詞,一般,*,*,*,アワ,泡,,,,,bubble
あわ,5146,5146,8000,名詞,普通名詞,一般,*,*,*,アワ,粟,,,,,foxtail-milletユーザー辞書ソースファイルからバイナリ辞書ファイルを作成します。
$ java -Dfile.encoding=UTF-8 -cp sudachi-XX.jar com.worksap.nlp.sudachi.dictionary.UserDictionaryBuilder -o output.dic -s system_core.dic [-d description] input.csv
ユーザ辞書バイナリには、このときに使用したシステム辞書バイナリの識別情報が記録されます。 使用時にこれと異なるシステム辞書が指定された場合、エラーが出力されます。 これはシステム辞書の変更による語参照の解決結果の齟齬等を避けるためです。 したがってシステム辞書を更新する際にはユーザ辞書も再ビルドする必要があることに注意してください。
- output.dic: (必須)出力するバイナリ辞書ファイル名
- system_core.dic: (必須)Sudachi のシステム辞書
- description: (オプショナル)バイナリ辞書のヘッダーに埋め込むコメント
- input.csv: ユーザ辞書ソースファイル名
品詞ファイルの指定はありません。既存の品詞データは引数のシステム辞書から読み込まれ、そのほかのユーザー品詞はソースファイルに出現した順に採番されます。
設定の JSON に以下のような項目を追加します。ユーザー辞書は複数指定することができます。
"userDict" : [ "user1.dic", "user2.dic" ]
Sudachi コマンドラインツールでユーザ辞書設定を指定する場合は、以下のように実行します。
$ java -jar sudachi-XX.jar -s '{"userDict":["user1.dic","user2.dic"]}'
ユーザ辞書バイナリには、ビルド時に使用したシステム辞書バイナリの識別情報が記録されています。 使用時にこれと異なるシステム辞書が指定された場合、エラーが出力されます。 これはシステム辞書の変更による語参照の解決結果の齟齬等を避けるためです。 システム辞書を更新する場合は、ユーザ辞書も合わせて再ビルドしてください。
Sudachi は基本的にユーザー辞書のエントリーをシステム辞書のエントリーより優先します。 また、複数のユーザー辞書があるとき、後ろにあるものほど優先順位が高くなります。