Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New dictionary format #233

Merged
merged 96 commits into from
Nov 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
62183a0
non-boxing variation of dictionary lookup
eiennohito Feb 11, 2022
854410f
prototype of dictionary redo
eiennohito Mar 22, 2022
ef9f821
working encode-decode for string pointers
eiennohito Mar 28, 2022
1d25747
layout strings with alignment awareness
eiennohito Apr 6, 2022
0cab624
string layout now really works
eiennohito Apr 7, 2022
3e991d8
add documentation for WordLayout
eiennohito Apr 8, 2022
8e9b33a
binary dictionary wip
eiennohito May 5, 2022
7750eb8
reading raw csv dictionary
eiennohito Sep 2, 2022
9692c58
add computation of utf8 length without allocations
eiennohito Sep 5, 2022
db3f5c4
fix line break in when reading POS
eiennohito Sep 5, 2022
0c8bb9b
writing new dictionary wip
eiennohito Sep 9, 2022
1513027
example reformat
eiennohito Sep 11, 2022
628b243
don't modify positions with negative lengths
eiennohito Sep 11, 2022
a06c071
first part of writing dictionary header
eiennohito Sep 14, 2022
fda2d48
write dictionary header
eiennohito Sep 14, 2022
3c4754a
clean up BufReaderTest
eiennohito Sep 15, 2022
75c2b63
dictionary new format wip
eiennohito Oct 18, 2022
31496e2
spotless apply
mh-northlander Jul 16, 2024
e376920
better build progress
mh-northlander Jul 17, 2024
86306ba
load grammar
mh-northlander Jul 18, 2024
e3417cd
refactor: rename etc.
mh-northlander Jul 18, 2024
c549bc3
add constants for magic numbers
mh-northlander Jul 18, 2024
93bca39
add docstrings
mh-northlander Jul 19, 2024
42c620c
fix wordinfo parse (word structure ~)
mh-northlander Jul 19, 2024
e1cdc0c
fix lexicon wordref parsing
mh-northlander Jul 22, 2024
9fa84a4
iterate over wordIds in the compiled dict
mh-northlander Jul 23, 2024
aaf5c37
build user dict (load system dict, resolve wordref, save user data on…
mh-northlander Jul 23, 2024
edad56f
allow missing connection matrix (user dict)
mh-northlander Jul 23, 2024
b24e37b
split align position method
mh-northlander Jul 23, 2024
c63784d
print dictionary description
mh-northlander Jul 23, 2024
89749a4
fill user.desc.ref using system.desc.signature
mh-northlander Jul 23, 2024
620a3e3
fix nodeimpl utilizing special/oov wordId
mh-northlander Jul 24, 2024
82604b8
fix WordParamters
mh-northlander Jul 24, 2024
a5ee6f5
change wordId in the test
mh-northlander Jul 24, 2024
cf26ef0
set oovFactory for test joinKatakanaOov plugin
mh-northlander Jul 24, 2024
53a911c
fix join-numeric plugin
mh-northlander Jul 24, 2024
97187c1
add direct access to text fields of node
mh-northlander Jul 24, 2024
aef5fbd
fix system/user wordref resolution
mh-northlander Jul 25, 2024
dd1d21e
parse wordRef on csv load
mh-northlander Jul 26, 2024
e9b516e
slice dict at lexicon and fix test
mh-northlander Jul 26, 2024
d379519
fix wordref for user-self-reference
mh-northlander Jul 26, 2024
498297f
Fix RefexOovProvider
mh-northlander Jul 26, 2024
7d4c06f
allow lineno ref for system-split lexicon field
mh-northlander Jul 26, 2024
a646b0f
WordRef.Triple throws exception when resolve target not found
mh-northlander Jul 29, 2024
8fb6bfb
out-of-bound connection id throws exception on load
mh-northlander Jul 29, 2024
3428b9e
WordRef.Lineno with 'U' in system resolved to system entry
mh-northlander Jul 29, 2024
bb56b28
remove phantom entry from total entry count
mh-northlander Jul 29, 2024
95243d1
fix related tests
mh-northlander Jul 29, 2024
b843023
fix dictionary printer
mh-northlander Jul 31, 2024
a13fbab
rebuild printed dict test (and fix doc)
mh-northlander Jul 31, 2024
01d7c2b
show print progress and fix normalizedForm print/parse
mh-northlander Aug 1, 2024
875e0c9
remove legacy dictionary codes
mh-northlander Aug 1, 2024
1ec8cd1
mv classes and vorbose CSVException
mh-northlander Aug 1, 2024
f6cdada
mv stderr progress
mh-northlander Aug 1, 2024
b8121a6
add pos table printer
mh-northlander Aug 2, 2024
1f3f350
enable dict builder to load pos from file
mh-northlander Aug 2, 2024
4c5b3f0
let lexcon csv have either (or both) pos-id or pos-parts column.
mh-northlander Aug 2, 2024
e0b9262
try to satisfy sonarcloud
mh-northlander Aug 2, 2024
763ffa7
allow pos file only once and for system, fix column existance check
mh-northlander Aug 5, 2024
d303362
default signature uses comment hash instead of random
mh-northlander Aug 5, 2024
c217631
reduce memory usage during StringStorage compile
mh-northlander Aug 5, 2024
37b2d87
rm duplicate test resources
mh-northlander Aug 5, 2024
e9e704b
rename classes
mh-northlander Aug 5, 2024
0c474f6
merge csvfieldexception into inputfileexception
mh-northlander Aug 5, 2024
a22c243
fix sample code indent
mh-northlander Aug 6, 2024
35b7cd4
remove InMemorychannel
mh-northlander Aug 6, 2024
2ebe2d7
fix lexicon pos column behaviour
mh-northlander Aug 6, 2024
a413a98
add tests
mh-northlander Aug 6, 2024
3f99a44
fix for tests
mh-northlander Aug 6, 2024
19d0178
rewrite double array lexicon test
mh-northlander Aug 7, 2024
5602a25
add constant for wordref split char
mh-northlander Aug 19, 2024
1411fda
add header to test dict lexicons, add read lexicon test
mh-northlander Aug 28, 2024
f894d93
let split-c work and add test for that
mh-northlander Aug 28, 2024
b0afe06
Add pos-id column for POS csv
mh-northlander Aug 29, 2024
73c4311
allow using posid in the lexicon wordref, and improve dict-printer
mh-northlander Aug 30, 2024
2f1680b
test contents of rebuilt dictionary
mh-northlander Aug 30, 2024
463617e
update test dictionary lexicon
mh-northlander Aug 30, 2024
9b72b46
add new user_dict.md
mh-northlander Aug 30, 2024
9bbde23
add pos.csv
mh-northlander Sep 2, 2024
91ddc90
add getUserData for morpheme
mh-northlander Sep 2, 2024
c9e98db
test empty pos id/parts column
mh-northlander Sep 2, 2024
6698ed9
copy entry data for phantom entry
mh-northlander Sep 2, 2024
8f1007a
try to satisfy sonarcloud
mh-northlander Sep 3, 2024
b63e087
add --output option to dict-printer
mh-northlander Sep 11, 2024
c9d2ff6
add lexicon migration guide and script
mh-northlander Sep 11, 2024
44570bd
disallow lineno wordref in new dictionary format
mh-northlander Sep 11, 2024
cf199af
fix user_dict doc and migration guide
mh-northlander Oct 17, 2024
5e8c1b6
Merge branch 'develop' into feature/newdic
mh-northlander Nov 14, 2024
99d9811
use Collectors.joining
mh-northlander Nov 15, 2024
d54c47a
fix / revert
mh-northlander Nov 15, 2024
77f9474
save writing instead of surface
mh-northlander Nov 18, 2024
419a1a1
try to satisfy sonar a bit
mh-northlander Nov 18, 2024
af781bb
rename surface -> indexForm and writing -> headword
mh-northlander Nov 19, 2024
95b791e
improve doc for wordInfo.length and remove its unnecessary use.
mh-northlander Nov 19, 2024
a8bd3d2
Merge branch 'develop' into feature/newdic
mh-northlander Nov 19, 2024
3f60988
improve comments and refactor a bit
mh-northlander Nov 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,9 @@ settings.xml

### GRADLE ###

build/
.gradle/
/build/
/.gradle/
/out/
!gradle/wrapper/gradle-wrapper.jar
out/

Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ plugins {
id 'com.diffplug.spotless' version '6.9.1'
id 'distribution'
id 'signing'
id 'me.champeau.jmh' version "0.6.6"
id 'me.champeau.jmh' version "0.6.7"
id 'io.github.gradle-nexus.publish-plugin' version "1.1.0"
}

Expand All @@ -27,7 +27,7 @@ dependencies {
testImplementation 'org.hamcrest:hamcrest-library:2.2'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.openjdk.jmh:jmh-core:1.35'
testImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.35'
jmhAnnotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.35'
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10'
testImplementation 'org.jetbrains.kotlin:kotlin-test-junit:1.7.10'
}
Expand Down
5 changes: 5 additions & 0 deletions docs/changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 0.8.0

### ABI-incompatible
* `Morpheme.partOfSpeech` returns `POS` object instead of `List<String>`
* `Lexicon.getCost`, `Lexicon.getLeftId`, `Lexicon.getRightId` are replaced with `lexicon.parameters` which returns all three values packed, at once.
110 changes: 110 additions & 0 deletions docs/migrate_legacy_dictionary_v1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# 旧形式のユーザー辞書からの移行手順 (V1)

旧形式(レガシー形式)の Sudachi バイナリ辞書は現在の Sudachi では利用できません。
辞書ソースである lexicon CSV ファイルについても、記述方法が変更されています(旧形式のものも利用可能です)。

本文書では旧型式の Sudachi 辞書から新形式 (V1) に移行するための手順を記述します。

## 辞書ソースファイル (lexicon CSV)

辞書ソースである lexicon CSV ファイルは、標準の記述方法が変更されました。
現在は旧形式のものも利用可能ですが、新形式への移行を推奨します。

形式の詳細については [user_dict.md](./user_dict.md) を参照してください。
本文書では移行に必要な部分のみを扱います。

### 移行のための差分の概要

旧形式から新形式への移行にあたっては、以下の編集が必要となります。

#### ヘッダー

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
```

#### 空項目

旧形式では項目の値がない場合、"\*" を指定していましたが、新形式では空文字列とする必要があります。
辞書形 ID、A/B/C 単位分割情報、第 17 項目(現 Word_Structure)について、"\*" を空文字列に置き換えます。

なお品詞項目の "\*" は空値とは異なるためそのままとしてください。

#### 語参照

辞書形や分割情報の項目では他の語への参照を記述する場合があります。
新形式における語参照は、参照先の語の「見出し表記、品詞、読み」の組でのみ記述が可能です。

旧形式での行番号による参照は使用できません。

### 移行用スクリプト

移行用スクリプト [`migrate_legacy_user_lexicon_v1.sh`](../scripts/migrate_legacy_user_lexicon_v1.sh) が利用できます。

スクリプトの実行には、参照するシステムバイナリ辞書を指定する必要があります。
別途[配布ページ](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/)から取得してください。

旧形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。
このスクリプトの使用においては、対象 lexicon ファイルの作成時に参照したバージョンのシステム辞書を指定してください。

新形式へ変換した lexicon ファイルは任意のバージョンのシステム辞書と共に使用可能になります。

例: `dict/system.dic` を参照し、`old_lexicon.csv` を変換したものを `new_lexicon.csv` に出力する

```bash
cd /path/to/sudachi
./scripts/migrate_legacy_user_lexicon_v1.sh old_lexicon.csv ./dict/system.dic > new_lexicon.csv
```

## バイナリ辞書

旧形式の Sudachi バイナリ辞書は現在の Sudachi では読み込むことができません。
新形式のバイナリ辞書として再ビルドする必要があります。

### 1. lexicon CSV からの移行

対象のバイナリ辞書に対応する辞書ソースである lexicon CSV ファイルが存在する場合は、それを元に新形式のバイナリ辞書をビルドすることができます。
上記の辞書ソースファイルの移行方法に従い、新形式のソースファイルに変換したのち、新形式でのビルドを行ってください。

旧形式の lexicon ファイルからでもビルド可能ですが、非推奨です。
旧形式のソースファイル内でシステム辞書内の語を参照している場合、以前と異なるシステム辞書を用いると、参照先がずれる可能性があります。

ユーザー辞書のビルドでは、参照するシステムバイナリ辞書を指定する必要があります。
別途[配布ページ](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/)から取得してください。

例: `dict/system.dic` を参照し、`user_lexicon.csv` からバイナリユーザー辞書 `new_user.dic` をビルドする

```bash
unzip -d "./sudachi" "./build/distributions/sudachi-executable-1.0.0.zip"
java -Dfile.encoding=UTF-8 \
-cp ./sudachi/sudachi-1.0.0.jar \
com.worksap.nlp.sudachi.dictionary.UserDictionaryBuilder \
-s ./dict/system.dic -o new_user.dic user_lexicon.csv
```

### 2. バイナリ辞書からの移行

バイナリ辞書のみが存在する場合、現在の Sudachi バージョンでは移行ができません。
過去バージョンの Sudachi にて、DictionaryPrinter を用いて辞書ソースファイルへの変換を行ってください。
これは旧形式での出力となるため、さらに上記の辞書ソースファイルの移行も必要となります。

ユーザー辞書のプリントでは、参照するシステムバイナリ辞書を指定する必要があります。
別途[配布ページ](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/)から取得してください。

ユーザー辞書内でシステム辞書内の語を参照している場合、ビルド時と異なるシステム辞書を用いると、参照先がずれる可能性があります。
対象バイナリ辞書のビルドの際に参照したシステム辞書を指定するようにしてください。

例: `dict/system.dic` を参照し、バイナリユーザー辞書 `user.dic` の語を `user_lexicon.csv` に出力する

```bash
unzip -d "./sudachi" "./build/distributions/sudachi-executable-0.8.0.zip"
java -Dfile.encoding=UTF-8 \
-cp ./sudachi/sudachi-0.8.0.jar \
com.worksap.nlp.sudachi.dictionary.DictionaryPrinter \
-s ./dict/system.dic -o user_lexicon.csv user.dic \
```
Loading
Loading