From 939a75f92b63a0096c8fc0aace635271813c63a9 Mon Sep 17 00:00:00 2001 From: mh-northlander Date: Mon, 23 Dec 2024 17:48:56 +0900 Subject: [PATCH 1/3] add migration guide (missing link to the V1 binary data) --- docs/migrate_legacy_dictionary_v1.md | 72 +++++++++++++++------------- docs/migration_guide.md | 60 +++++++++++++++++++++++ docs/user_dict.md | 6 +++ 3 files changed, 105 insertions(+), 33 deletions(-) create mode 100644 docs/migration_guide.md diff --git a/docs/migrate_legacy_dictionary_v1.md b/docs/migrate_legacy_dictionary_v1.md index 4c07dbf8..177bbe7f 100644 --- a/docs/migrate_legacy_dictionary_v1.md +++ b/docs/migrate_legacy_dictionary_v1.md @@ -1,28 +1,30 @@ -# 旧形式のユーザー辞書からの移行手順 (V1) +ユーザーバイナリ辞書の移行手順 -旧形式(レガシー形式)の Sudachi バイナリ辞書は現在の Sudachi では利用できません。 -辞書ソースである lexicon CSV ファイルについても、記述方法が変更されています(旧形式のものも利用可能です)。 +# レガシー形式 -> V1 形式 -本文書では旧型式の Sudachi 辞書から新形式 (V1) に移行するための手順を記述します。 +旧形式(レガシー形式、v0.7 までの形式)の Sudachi バイナリ辞書は v0.8 以降の Sudachi では利用できません。 +辞書ソースである lexicon CSV ファイルについても、記述方法が変更されています(v0.8 ではレガシー形式のものも利用可能です)。 + +本文書ではレガシー形式の Sudachi 辞書から新形式 (V1 形式) に移行するための手順を記述します。 ## 辞書ソースファイル (lexicon CSV) 辞書ソースである lexicon CSV ファイルは、標準の記述方法が変更されました。 -現在は旧形式のものも利用可能ですが、新形式への移行を推奨します。 +v0.8 ではレガシー形式のものも利用可能ですが、新形式への移行を推奨します。 -形式の詳細については [user_dict.md](./user_dict.md) を参照してください。 本文書では移行に必要な部分のみを扱います。 +V1 形式の詳細については [user_dict.md](./user_dict.md)、レガシー形式の詳細については [user_dict_legacy.md](./user_dict_legacy.md) を参照してください。 -### 移行のための差分の概要 +### 移行のための差分 -旧形式から新形式への移行にあたっては、以下の編集が必要となります。 +レガシー形式から V1 形式への移行にあたっては、以下の変更が必要となります。 #### ヘッダー -lexicon の 1 行目にヘッダー行を追加し、記述する項目の種類と順序を指定します。 +lexicon の 1 行目にはヘッダー行をおき、記述する項目の種類と順序を指定するようになりました。 項目名については大文字小文字および "\_" の有無は無視して処理されます。 -旧形式に対応するヘッダー行は以下になります。 +レガシー形式に対応する以下のヘッダー行を lexicon の 1 行目に追加してください。 ```csv SURFACE,LEFT_ID,RIGHT_ID,COST,WRITING,POS1,POS2,POS3,POS4,POS5,POS6,READING_FORM,NORMALIZED_FORM,DICTIONARY_FORM,MODE,SPLIT_A,SPLIT_B,WORD_STRUCTURE @@ -30,29 +32,33 @@ SURFACE,LEFT_ID,RIGHT_ID,COST,WRITING,POS1,POS2,POS3,POS4,POS5,POS6,READING_FORM #### 空項目 -旧形式では項目の値がない場合、"\*" を指定していましたが、新形式では空文字列とする必要があります。 -辞書形 ID、A/B/C 単位分割情報、第 17 項目(現 Word_Structure)について、"\*" を空文字列に置き換えます。 +レガシー形式では項目の値がない場合、"\*" を指定していましたが、V1 形式では空文字列とする必要があります。 +辞書形 ID (dictionary_form)、A/B 単位分割情報 (split_a, split_b)、第 17 項目(word_structure)について、"\*" を空文字列に置き換えてください。 なお品詞項目の "\*" は空値とは異なるためそのままとしてください。 #### 語参照 -辞書形や分割情報の項目では他の語への参照を記述する場合があります。 -新形式における語参照は、参照先の語の「見出し表記、品詞、読み」の組でのみ記述が可能です。 +正規化形や辞書形、分割情報の項目では他の語への参照を記述する場合があります。 +V1 形式における語参照は、参照先の語の「見出し表記、品詞、読み」の組でのみ記述が可能です。 +レガシー形式では可能だった行番号による参照は使用できません。 + +辞書形 ID (dictionary_form)、A/B 単位分割情報 (split_a, split_b)、第 17 項目(word_structure)について、行番号での記述を参照先の語の「見出し表記、品詞、読み」の組に変更してください。 +各項目は , (コンマ) で分割し、その項目全体を " (ダブルクォーテーション)で括ります。 -旧形式での行番号による参照は使用できません。 +例(split_a): +`...,1/2,...` -> `...,"東京,名詞,固有名詞,地名,一般,*,*,トウキョウ/都,名詞,普通名詞,一般,*,*,*,ト",...` ### 移行用スクリプト 移行用スクリプト [`migrate_legacy_user_lexicon_v1.sh`](../scripts/migrate_legacy_user_lexicon_v1.sh) が利用できます。 -スクリプトの実行には、参照するシステムバイナリ辞書を指定する必要があります。 -別途[配布ページ](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/)から取得してください。 +スクリプトの実行には、参照するシステムバイナリ辞書(V1 形式)を指定する必要があります。 +別途[配布ページ](#TODO)から取得するか、[lexicon CSV](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/) からビルドしてください。 -旧形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。 -このスクリプトの使用においては、対象 lexicon ファイルの作成時に参照したバージョンのシステム辞書を指定してください。 - -新形式へ変換した lexicon ファイルは任意のバージョンのシステム辞書と共に使用可能になります。 +レガシー形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。 +このスクリプトの使用においては、対象 lexicon ファイルの作成時に参照したバージョンのシステム辞書を指定するか、変換後に内容を確認してください。 +一度 V1 形式へ変換した lexicon CSV ファイルは任意のバージョンのシステム辞書と共にビルド可能になります。 例: `dict/system.dic` を参照し、`old_lexicon.csv` を変換したものを `new_lexicon.csv` に出力する @@ -63,19 +69,19 @@ cd /path/to/sudachi ## バイナリ辞書 -旧形式の Sudachi バイナリ辞書は現在の Sudachi では読み込むことができません。 -新形式のバイナリ辞書として再ビルドする必要があります。 +レガシー形式の Sudachi バイナリ辞書は現在の Sudachi では読み込むことができません。 +V1 形式のバイナリ辞書として再ビルドする必要があります。 ### 1. lexicon CSV からの移行 -対象のバイナリ辞書に対応する辞書ソースである lexicon CSV ファイルが存在する場合は、それを元に新形式のバイナリ辞書をビルドすることができます。 -上記の辞書ソースファイルの移行方法に従い、新形式のソースファイルに変換したのち、新形式でのビルドを行ってください。 +対象のバイナリ辞書に対応する辞書ソースである lexicon CSV ファイルが存在する場合は、それを元に V1 形式のバイナリ辞書をビルドすることができます。 +上記の辞書ソースファイルの移行方法に従い、V1 形式の lexicon ファイルに変換したのち、V1 形式でのビルドを行ってください。 -旧形式の lexicon ファイルからでもビルド可能ですが、非推奨です。 -旧形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。 +レガシー形式の lexicon ファイルからでもビルド可能ですが、非推奨です。 +レガシー形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。 -ユーザー辞書のビルドでは、参照するシステムバイナリ辞書を指定する必要があります。 -別途[配布ページ](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/)から取得してください。 +ユーザー辞書のビルドでは、参照するシステムバイナリ辞書(V1 形式)を指定する必要があります。 +別途[配布ページ](#TODO)から取得してください。 例: `dict/system.dic` を参照し、`user_lexicon.csv` からバイナリユーザー辞書 `new_user.dic` をビルドする @@ -89,11 +95,11 @@ java -Dfile.encoding=UTF-8 \ ### 2. バイナリ辞書からの移行 -バイナリ辞書のみが存在する場合、現在の Sudachi バージョンでは移行ができません。 -過去バージョンの Sudachi にて、DictionaryPrinter を用いて辞書ソースファイルへの変換を行ってください。 -これは旧形式での出力となるため、さらに上記の辞書ソースファイルの移行も必要となります。 +バイナリ辞書のみが存在する場合、Sudachi v0.8 では移行ができません。 +バージョン v0.7 の Sudachi にて、DictionaryPrinter を用いて辞書ソースファイルへの変換を行ってください。 +これはレガシー形式での出力となるため、加えて上記の辞書ソースファイルの移行が必要となります。 -ユーザー辞書のプリントでは、参照するシステムバイナリ辞書を指定する必要があります。 +ユーザー辞書のプリントでは、参照するシステムバイナリ辞書(レガシー形式)を指定する必要があります。 別途[配布ページ](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/)から取得してください。 ユーザー辞書内でシステム辞書内の語を参照している場合、ビルド時と異なるシステム辞書を用いると、参照先がずれる可能性があります。 diff --git a/docs/migration_guide.md b/docs/migration_guide.md new file mode 100644 index 00000000..2e6fabd0 --- /dev/null +++ b/docs/migration_guide.md @@ -0,0 +1,60 @@ +バージョン移行ガイド + +# from v0.7 to v0.8 + +## バイナリ辞書 + +Sudachi 辞書のバイナリ形式が変更され、v0.7 までのバイナリ辞書は使用できなくなりました。 +システム辞書については [配布ページ](#TODO) より再取得してください。 + +ユーザー辞書の移行については[ユーザー辞書移行ガイド](./migrate_legacy_dictionary_v1.md)を参照してください。 + +## Dictionary + +### Dictionary の生成 + +`DictionaryFactory` クラスは廃止されます。 + +辞書インスタンスの生成には、代わりに `Dictionary.load(Config)` を使用してください。 + +## Tokenizer + +### Tokenizer の生成 + +トークナイザーを生成する `Dictionary.create()` は廃止されます。 + +代わりに `Dictionary.tokenizer()` を使用してください。 + +### シグネチャの変更 + +Tokenizer の各メソッドの返り値型は `MorphemeList` から `List` に変更されました。 + +`MorphemeList.split(SplitMode)` を使用していた場合は、代わりに `Tokenizer.split(List, SplitMode)` を使用してください。 +また `SplitMode` 引数がヌルの場合、エラーとなるようになりました。 + +### tokenizeSentences の挙動の変更 + +`Iterable Tokenizer.tokenizeSentences(Reader)` は OOM の可能性があったため廃止されました。 +v0.8 では同名の `Iterator> Tokenizer.tokenizeSentences(Readable)` に処理内容が置き換わっています。 +返り値型が `Iterable` から `Iterator` に変更されていることに注意してください。 + +これの挙動は `Tokenizer.lazyTokenizeSentences` と同値であり、このため `lazyTokenizeSentences` は廃止されます。 + +## TextNormalizer + +辞書に基づいた `TextNormalizer` を生成する `TextNormalizer.formDictionary(JapaneseDictionary)` は廃止されます。 +代わりに `Dictionary.textNormalizer()` を使用してください。 + +## Lexicon + +`Lexicon.wordIds()` は引数を取らなくなりました。 +含まれている全ての辞書の word id をイテレートします。 +また返り値型が `Iterator` から `Iterator` に変更されました(内部で `Ints` の flatten 処理を行うようになりました)。 + +## 廃止されたクラス + +以下のクラスは廃止されました + +### `SentenceSplittingAnalysis` + +代わりに `SentenceSplittingLazyAnalysis` を使用してください。 diff --git a/docs/user_dict.md b/docs/user_dict.md index b33e578b..c7ecc4ba 100644 --- a/docs/user_dict.md +++ b/docs/user_dict.md @@ -314,3 +314,9 @@ Sudachi コマンドラインツールでユーザ辞書設定を指定する場 Sudachi は基本的にユーザー辞書のエントリーをシステム辞書のエントリーより優先します。 また、複数のユーザー辞書があるとき、後ろにあるものほど優先順位が高くなります。 + +## 関連文書 + +### 移行ガイド + +- [レガシー形式から V1 形式への移行ガイド](./migrate_legacy_dictionary_v1.md) From 759fd3c135dab212a1ce864c5851bb0dc5bb0677 Mon Sep 17 00:00:00 2001 From: mh-northlander Date: Mon, 23 Dec 2024 17:49:02 +0900 Subject: [PATCH 2/3] update changelog --- CHANGELOG.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42e006be..d54426fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,45 @@ - +## [v0.8.0](https://github.com/WorksApplications/Sudachi/releases/tag/v0.8.0) + +### Breaking changes + +See [migration guide](./docs/migration_guide.md) for details. + +- Binary dictionary format changed +- Signatures of many methods changed + +### Added + +- Add `Stream Dictionary.entries()` (#248) + - Stream all morphemes in the dictionary. + - use `Stream.iterator()` or `Stream.spliterator()` if necessary. +- Add `List Dictionary.lookup(CharSequence)` (#245) + - List up morphemes that match the given text (after normalization). + - If you need to search entries with -1 conjugation cost, use `lookupAllEntries`. +- Add `Morpheme Dictionary.oovMorpheme(posId, surface, ...)` (#245) + - Create an OOV morpheme with a POS in the dictionary. + +### Changed + +- `Tokenizer` methods now returns `List` instead of `MorphemeList` (#254) + - use `Tokenizer.split(List, SplitMode)` instead of `MorphemeList.split(SplitMode)`. + - providing null as a split mode now errors. +- `Tokenizer Dictionary.create()` is deprecated (#246) + - use `Tokenizer Dictionary.tokenizer()` instead. +- `Lexicon.wordIds()` behaviour is changed (#248) + - dictionary id argument is removed. + - iterates `Integer` instead of `Ints`. + +### Deprecated + +- `Iterable Tokenizer.tokenizeSentences(Reader)` is removed and `lazyTokenizeSentences` replaced it (#254) + - `Tokenizer.lazyTokenizeSentences` is deprecated. +- `SentenceSplittingAnalysis` is removed (#254) +- `DictionaryFactory` is deprecated and will be removed in v1.0 (#259) + - use `Dictionary.load(Config)` instead. + ## [v0.7.5](https://github.com/WorksApplications/Sudachi/releases/tag/v0.7.5) ### Added From 694d86c64e2880bcc05061aa3eccabd799e0a3c0 Mon Sep 17 00:00:00 2001 From: mh-northlander Date: Thu, 16 Jan 2025 11:17:11 +0900 Subject: [PATCH 3/3] rename `legacy` to `v0` --- ...onary_v1.md => migrate_user_dictionary.md} | 61 +++++++++++++------ docs/migration_guide.md | 10 +-- docs/{user_dict_legacy.md => user_dict_v0.md} | 3 + docs/{user_dict.md => user_dict_v1.md} | 11 ++-- ...v1.sh => migrate_user_lexicon_v0_to_v1.sh} | 0 5 files changed, 53 insertions(+), 32 deletions(-) rename docs/{migrate_legacy_dictionary_v1.md => migrate_user_dictionary.md} (57%) rename docs/{user_dict_legacy.md => user_dict_v0.md} (98%) rename docs/{user_dict.md => user_dict_v1.md} (97%) rename scripts/{migrate_legacy_user_lexicon_v1.sh => migrate_user_lexicon_v0_to_v1.sh} (100%) diff --git a/docs/migrate_legacy_dictionary_v1.md b/docs/migrate_user_dictionary.md similarity index 57% rename from docs/migrate_legacy_dictionary_v1.md rename to docs/migrate_user_dictionary.md index 177bbe7f..93628c45 100644 --- a/docs/migrate_legacy_dictionary_v1.md +++ b/docs/migrate_user_dictionary.md @@ -1,38 +1,40 @@ -ユーザーバイナリ辞書の移行手順 +ユーザー辞書の移行手順 -# レガシー形式 -> V1 形式 +# V0 形式 -> V1 形式 -旧形式(レガシー形式、v0.7 までの形式)の Sudachi バイナリ辞書は v0.8 以降の Sudachi では利用できません。 -辞書ソースである lexicon CSV ファイルについても、記述方法が変更されています(v0.8 ではレガシー形式のものも利用可能です)。 +V0 形式(v0.7 までの形式)の Sudachi バイナリ辞書は v0.8 以降の Sudachi では利用できません。 +辞書ソースである lexicon CSV ファイルについても、記述方法が変更されています(v0.8 では V0 形式のものも利用可能です)。 -本文書ではレガシー形式の Sudachi 辞書から新形式 (V1 形式) に移行するための手順を記述します。 +本文書では V0 形式の Sudachi 辞書から新形式 (V1 形式) に移行するための手順を記述します。 ## 辞書ソースファイル (lexicon CSV) 辞書ソースである lexicon CSV ファイルは、標準の記述方法が変更されました。 -v0.8 ではレガシー形式のものも利用可能ですが、新形式への移行を推奨します。 +v0.8 では V0 形式のものも利用可能ですが、新形式への移行を推奨します。 本文書では移行に必要な部分のみを扱います。 -V1 形式の詳細については [user_dict.md](./user_dict.md)、レガシー形式の詳細については [user_dict_legacy.md](./user_dict_legacy.md) を参照してください。 +V1 形式の詳細については [user_dict_v1.md](./user_dict_v1.md)、V0 形式の詳細については [user_dict_v0.md](./user_dict_v0.md) を参照してください。 ### 移行のための差分 -レガシー形式から V1 形式への移行にあたっては、以下の変更が必要となります。 +V0 形式から V1 形式への移行にあたっては、以下の変更が必要となります。 #### ヘッダー lexicon の 1 行目にはヘッダー行をおき、記述する項目の種類と順序を指定するようになりました。 項目名については大文字小文字および "\_" の有無は無視して処理されます。 -レガシー形式に対応する以下のヘッダー行を lexicon の 1 行目に追加してください。 +V0 形式に対応する以下のヘッダー行を lexicon の 1 行目に追加してください。 ```csv SURFACE,LEFT_ID,RIGHT_ID,COST,WRITING,POS1,POS2,POS3,POS4,POS5,POS6,READING_FORM,NORMALIZED_FORM,DICTIONARY_FORM,MODE,SPLIT_A,SPLIT_B,WORD_STRUCTURE ``` +なお、カラム名の表記における大文字小文字および "\_" の有無による差分はパース時に無視されます("LEFT_ID" を "leftId" などと記述できます)。 + #### 空項目 -レガシー形式では項目の値がない場合、"\*" を指定していましたが、V1 形式では空文字列とする必要があります。 +V0 形式では項目の値がない場合 "\*" を指定していましたが、V1 形式では空文字列とする必要があります。 辞書形 ID (dictionary_form)、A/B 単位分割情報 (split_a, split_b)、第 17 項目(word_structure)について、"\*" を空文字列に置き換えてください。 なお品詞項目の "\*" は空値とは異なるためそのままとしてください。 @@ -41,7 +43,7 @@ SURFACE,LEFT_ID,RIGHT_ID,COST,WRITING,POS1,POS2,POS3,POS4,POS5,POS6,READING_FORM 正規化形や辞書形、分割情報の項目では他の語への参照を記述する場合があります。 V1 形式における語参照は、参照先の語の「見出し表記、品詞、読み」の組でのみ記述が可能です。 -レガシー形式では可能だった行番号による参照は使用できません。 +V0 形式では可能だった行番号による参照は使用できません。 辞書形 ID (dictionary_form)、A/B 単位分割情報 (split_a, split_b)、第 17 項目(word_structure)について、行番号での記述を参照先の語の「見出し表記、品詞、読み」の組に変更してください。 各項目は , (コンマ) で分割し、その項目全体を " (ダブルクォーテーション)で括ります。 @@ -51,12 +53,12 @@ V1 形式における語参照は、参照先の語の「見出し表記、品 ### 移行用スクリプト -移行用スクリプト [`migrate_legacy_user_lexicon_v1.sh`](../scripts/migrate_legacy_user_lexicon_v1.sh) が利用できます。 +移行用スクリプト [`migrate_user_lexicon_v0_to_v1.sh`](../scripts/migrate_user_lexicon_v0_to_v1.sh) が利用できます。 スクリプトの実行には、参照するシステムバイナリ辞書(V1 形式)を指定する必要があります。 別途[配布ページ](#TODO)から取得するか、[lexicon CSV](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/) からビルドしてください。 -レガシー形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。 +V0 形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。 このスクリプトの使用においては、対象 lexicon ファイルの作成時に参照したバージョンのシステム辞書を指定するか、変換後に内容を確認してください。 一度 V1 形式へ変換した lexicon CSV ファイルは任意のバージョンのシステム辞書と共にビルド可能になります。 @@ -64,12 +66,12 @@ V1 形式における語参照は、参照先の語の「見出し表記、品 ```bash cd /path/to/sudachi -./scripts/migrate_legacy_user_lexicon_v1.sh old_lexicon.csv ./dict/system.dic > new_lexicon.csv +./scripts/migrate_user_lexicon_v0_to_v1.sh old_lexicon.csv ./dict/system.dic > new_lexicon.csv ``` ## バイナリ辞書 -レガシー形式の Sudachi バイナリ辞書は現在の Sudachi では読み込むことができません。 +V0 形式の Sudachi バイナリ辞書は Sudachi v0.8 以降では読み込むことができません。 V1 形式のバイナリ辞書として再ビルドする必要があります。 ### 1. lexicon CSV からの移行 @@ -77,8 +79,8 @@ V1 形式のバイナリ辞書として再ビルドする必要があります 対象のバイナリ辞書に対応する辞書ソースである lexicon CSV ファイルが存在する場合は、それを元に V1 形式のバイナリ辞書をビルドすることができます。 上記の辞書ソースファイルの移行方法に従い、V1 形式の lexicon ファイルに変換したのち、V1 形式でのビルドを行ってください。 -レガシー形式の lexicon ファイルからでもビルド可能ですが、非推奨です。 -レガシー形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。 +V0 形式の lexicon ファイルからでもビルド可能ですが、非推奨です。 +V0 形式のソースファイル内で語を行番号で参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。 ユーザー辞書のビルドでは、参照するシステムバイナリ辞書(V1 形式)を指定する必要があります。 別途[配布ページ](#TODO)から取得してください。 @@ -93,16 +95,35 @@ java -Dfile.encoding=UTF-8 \ -s ./dict/system.dic -o new_user.dic user_lexicon.csv ``` +#### システム辞書のビルド + +V1 形式のシステム辞書を手元でビルドすることも可能です。 + +[配布ページ](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/)からソースファイルおよび `matrix.def` を取得します。 +small 辞書のビルドには small_lex.csv、core 辞書のビルドには small_lex.csv, core_lex.csv、full 辞書のビルドには small_lex.csv, core_lex.csv, notcore_lex.csv が必要です。 + +V1 形式では加えて品詞リストを指定することも可能です。 +その場合は [pos.csv](./../src/main/resources/pos.csv) の使用を推奨します。 + +例:`src/` 以下に配置した `matrix.def`, `pos.csv`, `small_lex.csv`, `core_lex.csv` から `dict/system_core.dic` をビルドする + +```bash +java -Xmx8g -Dfile.encoding=UTF-8 -cp ./sudachi/sudachi-1.0.0.jar \ + com.worksap.nlp.sudachi.dictionary.DictionaryBuilder \ + -o ./dict/system_core.dic -m ./src/matrix.def -p src/pos.csv \ + ./src/small_lex.csv ./src/core_lex.csv +``` + ### 2. バイナリ辞書からの移行 バイナリ辞書のみが存在する場合、Sudachi v0.8 では移行ができません。 バージョン v0.7 の Sudachi にて、DictionaryPrinter を用いて辞書ソースファイルへの変換を行ってください。 -これはレガシー形式での出力となるため、加えて上記の辞書ソースファイルの移行が必要となります。 +これは V0 形式での出力となるため、加えて上記の辞書ソースファイルの移行が必要となります。 -ユーザー辞書のプリントでは、参照するシステムバイナリ辞書(レガシー形式)を指定する必要があります。 +ユーザー辞書のプリントでは、参照するシステムバイナリ辞書(V0 形式)を指定する必要があります。 別途[配布ページ](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/)から取得してください。 -ユーザー辞書内でシステム辞書内の語を参照している場合、ビルド時と異なるシステム辞書を用いると、参照先がずれる可能性があります。 +ユーザー辞書内で語を行番号で参照している場合、ビルド時と異なるシステム辞書を用いると、参照先がずれる可能性があります。 対象バイナリ辞書のビルドの際に参照したシステム辞書を指定するようにしてください。 例: `dict/system.dic` を参照し、バイナリユーザー辞書 `user.dic` の語を `user_lexicon.csv` に出力する diff --git a/docs/migration_guide.md b/docs/migration_guide.md index 2e6fabd0..dcb821a1 100644 --- a/docs/migration_guide.md +++ b/docs/migration_guide.md @@ -7,7 +7,8 @@ Sudachi 辞書のバイナリ形式が変更され、v0.7 までのバイナリ辞書は使用できなくなりました。 システム辞書については [配布ページ](#TODO) より再取得してください。 -ユーザー辞書の移行については[ユーザー辞書移行ガイド](./migrate_legacy_dictionary_v1.md)を参照してください。 +ユーザー辞書についても再ビルドが必要です。 +詳細は[ユーザー辞書移行ガイド](./migrate_user_dictionary.md)を参照してください。 ## Dictionary @@ -39,18 +40,13 @@ v0.8 では同名の `Iterator> Tokenizer.tokenizeSentences(Reada 返り値型が `Iterable` から `Iterator` に変更されていることに注意してください。 これの挙動は `Tokenizer.lazyTokenizeSentences` と同値であり、このため `lazyTokenizeSentences` は廃止されます。 +`lazyTokenizeSentences` を使用していた場合は `tokenizeSentences` に変更してください。 ## TextNormalizer 辞書に基づいた `TextNormalizer` を生成する `TextNormalizer.formDictionary(JapaneseDictionary)` は廃止されます。 代わりに `Dictionary.textNormalizer()` を使用してください。 -## Lexicon - -`Lexicon.wordIds()` は引数を取らなくなりました。 -含まれている全ての辞書の word id をイテレートします。 -また返り値型が `Iterator` から `Iterator` に変更されました(内部で `Ints` の flatten 処理を行うようになりました)。 - ## 廃止されたクラス 以下のクラスは廃止されました diff --git a/docs/user_dict_legacy.md b/docs/user_dict_v0.md similarity index 98% rename from docs/user_dict_legacy.md rename to docs/user_dict_v0.md index c5b641ab..1eaa95cb 100644 --- a/docs/user_dict_legacy.md +++ b/docs/user_dict_v0.md @@ -2,6 +2,9 @@ Sudachi ではユーザー辞書をもちいて、システム辞書で不足している語を補ったり、システム辞書の語と同一見出しの語を登録することによって解析結果上の品詞などの情報を差し替えることができます。 +本文書では、辞書形式 V0 について記述します。 +Sudachi v0.8 以降では [V1 形式](./user_dict_v1.md)を参照してください。 + ## ユーザー辞書ソースのフォーマット ユーザー辞書の作成は、登録したい見出しを記述したユーザー辞書ソースを用いて行います。 diff --git a/docs/user_dict.md b/docs/user_dict_v1.md similarity index 97% rename from docs/user_dict.md rename to docs/user_dict_v1.md index c7ecc4ba..d19da45e 100644 --- a/docs/user_dict.md +++ b/docs/user_dict_v1.md @@ -2,6 +2,8 @@ Sudachi ではユーザー辞書をもちいて、システム辞書で不足している語を補ったり、システム辞書の語と同一見出しの語を登録することによって解析結果上の品詞などの情報を差し替えることができます。 +本文書では、辞書形式 V1 について記述します。 + ## ユーザー辞書ソースのフォーマット ユーザー辞書の作成は、登録したい語を記述したユーザー辞書ソースを用いて行います。 @@ -39,9 +41,9 @@ Sudachi ではユーザー辞書をもちいて、システム辞書で不足し ヘッダー行に記述された項目の順序でファイル全体がパースされます。 項目名の記述では、"\_" の有無および大文字・小文字の違いは無視されます。 -ヘッダー行が検出されなかった場合は、[旧辞書フォーマット](./user_dict_legacy.md)に従って処理されます。 +ヘッダー行が検出されなかった場合は、[辞書形式 V0](./user_dict_v0.md)に従って処理されます。 ただし、この場合でも上記の順序に従えばすべての項目を記述できます。 -旧フォーマットにない項目についてはこのドキュメントを参照してください。 +辞書形式 V0 にない項目についてはこのドキュメントを参照してください。 項目のうち、Writing、Mode、Synonym_Groups、Split_C、User_Data は省略可能です。 また、POS1 - POS6 の組と POS_Id の少なくとも一方の記載が必須です。 @@ -192,7 +194,7 @@ POS1: 品詞 1 を参照してください。 対象となる語への[語参照](#語参照)もしくはその語の[見出し表記](#4-headword-見出し表記)を記述します。 表記形のみで記述された場合、対象となる語が記述されていない場合でも文字列のみを正規化形として登録します。 -「表記形=正規化形」である場合は、空欄とすることができます。 +「見出し表記=正規化形」である場合は、空欄とすることができます。 ### 13 Dictionary_Form: 辞書形情報 @@ -209,7 +211,6 @@ POS1: 品詞 1 を参照してください。 項目の記載を省略することができます。 項目を省略しない場合は、語の分割単位タイプ (A / B / C) を記述します。 -後述の分割情報を記述しない場合は空文字列でもかまいません。 ### 15 Split_A: A 単位分割情報 @@ -319,4 +320,4 @@ Sudachi は基本的にユーザー辞書のエントリーをシステム辞書 ### 移行ガイド -- [レガシー形式から V1 形式への移行ガイド](./migrate_legacy_dictionary_v1.md) +- [辞書ソースおよびバイナリ辞書の移行ガイド](./migrate_user_dictionary.md) diff --git a/scripts/migrate_legacy_user_lexicon_v1.sh b/scripts/migrate_user_lexicon_v0_to_v1.sh similarity index 100% rename from scripts/migrate_legacy_user_lexicon_v1.sh rename to scripts/migrate_user_lexicon_v0_to_v1.sh