@kensio/pinyinjs 1.2.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +116 -3
  2. package/NOTICE +9 -0
  3. package/README.md +58 -9
  4. package/data/core.entries +1 -13
  5. package/data/core.freq +0 -0
  6. package/data/core.keys +1 -13
  7. package/data/full.entries +141 -131
  8. package/data/full.freq +0 -0
  9. package/data/full.keys +167 -157
  10. package/data/manifest.json +24 -9
  11. package/data/script.map +26543 -0
  12. package/data/standard.entries +1 -22
  13. package/data/standard.freq +0 -0
  14. package/data/standard.keys +2 -23
  15. package/dist/cli/arguments.d.ts +72 -0
  16. package/dist/cli/arguments.d.ts.map +1 -1
  17. package/dist/cli/arguments.js +110 -0
  18. package/dist/cli/arguments.js.map +1 -1
  19. package/dist/cli/commands.d.ts +11 -0
  20. package/dist/cli/commands.d.ts.map +1 -1
  21. package/dist/cli/commands.js +77 -1
  22. package/dist/cli/commands.js.map +1 -1
  23. package/dist/cli/environment.d.ts.map +1 -1
  24. package/dist/cli/environment.js +2 -1
  25. package/dist/cli/environment.js.map +1 -1
  26. package/dist/cli/help.d.ts.map +1 -1
  27. package/dist/cli/help.js +21 -0
  28. package/dist/cli/help.js.map +1 -1
  29. package/dist/cli/run.d.ts +8 -0
  30. package/dist/cli/run.d.ts.map +1 -1
  31. package/dist/cli/run.js +11 -1
  32. package/dist/cli/run.js.map +1 -1
  33. package/dist/decode/convert.d.ts +10 -0
  34. package/dist/decode/convert.d.ts.map +1 -1
  35. package/dist/decode/convert.js +12 -0
  36. package/dist/decode/convert.js.map +1 -1
  37. package/dist/decode/script.d.ts +108 -0
  38. package/dist/decode/script.d.ts.map +1 -0
  39. package/dist/decode/script.js +195 -0
  40. package/dist/decode/script.js.map +1 -0
  41. package/dist/dictionary/dictionary.d.ts +13 -1
  42. package/dist/dictionary/dictionary.d.ts.map +1 -1
  43. package/dist/dictionary/dictionary.js +18 -4
  44. package/dist/dictionary/dictionary.js.map +1 -1
  45. package/dist/dictionary/merge.d.ts.map +1 -1
  46. package/dist/dictionary/merge.js +23 -3
  47. package/dist/dictionary/merge.js.map +1 -1
  48. package/dist/dictionary/script-tables.d.ts +17 -0
  49. package/dist/dictionary/script-tables.d.ts.map +1 -0
  50. package/dist/dictionary/script-tables.js +275 -0
  51. package/dist/dictionary/script-tables.js.map +1 -0
  52. package/dist/dictionary/source.d.ts +18 -0
  53. package/dist/dictionary/source.d.ts.map +1 -1
  54. package/dist/dictionary/source.js +20 -0
  55. package/dist/dictionary/source.js.map +1 -1
  56. package/dist/format/slug.d.ts +156 -0
  57. package/dist/format/slug.d.ts.map +1 -0
  58. package/dist/format/slug.js +0 -0
  59. package/dist/format/slug.js.map +1 -0
  60. package/dist/index.d.ts +10 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +6 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/script/conversion.d.ts +102 -0
  65. package/dist/script/conversion.d.ts.map +1 -0
  66. package/dist/script/conversion.js +194 -0
  67. package/dist/script/conversion.js.map +1 -0
  68. package/dist/script/glyphs.d.ts +95 -0
  69. package/dist/script/glyphs.d.ts.map +1 -0
  70. package/dist/script/glyphs.js +236 -0
  71. package/dist/script/glyphs.js.map +1 -0
  72. package/dist/sources/opencc.d.ts +32 -0
  73. package/dist/sources/opencc.d.ts.map +1 -0
  74. package/dist/sources/opencc.js +50 -0
  75. package/dist/sources/opencc.js.map +1 -0
  76. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -9,8 +9,121 @@ which a dictionary rebuild can change, and the artifact format under `data/`.
9
9
 
10
10
  ## Unreleased
11
11
 
12
+ ### Fixed
13
+
14
+ - **240 dictionary entries could not be looked up at all.** Recognising Hong
15
+ Kong glyph forms on the lookup path means a key written in a form the path
16
+ normalises _away from_ can never be found, and the merge derived 繁體 forms
17
+ per word from Unihan's variant lists with no single standard behind them — so
18
+ it wrote 裏 where the corpus overwhelmingly writes 裡, and 上樑, 中峯 and 义藴
19
+ became keys nothing could reach. The merge now derives canonical glyph forms,
20
+ and keys a headword's canonical spelling alongside it where the phrase corpus
21
+ wrote one with a 繁體 variant. **No key is now unreachable**, and Hong Kong
22
+ spellings resolve slightly better than before: 5,499 of the 9,978 keys with a
23
+ distinct Hong Kong form, against 5,439.
24
+
25
+ Two things had to be got right alongside it. The evidence for "简体 writes
26
+ this character" comes from CC-CEDICT entries whose two columns differ, not
27
+ from the phrase corpus, which is nominally 简体 but carries 峯, 藴 and 枱 of
28
+ its own — counting it cut the table from 50 mappings to 32 and stopped Hong
29
+ Kong text converting at all. And a 繁體 form differing from its 简体 one only
30
+ by glyph normalisation is not evidence about script, or the alias key would
31
+ put that entry's 简体 characters into the 繁體-only set, which is how 发
32
+ briefly stopped being 简体-only.
33
+
34
+ `toScript` drops the pass that was papering over this. Key counts move:
35
+ 723,149 for `full`, 97,997 for `standard`, 16,975 for `core`.
36
+
12
37
  ### Added
13
38
 
39
+ - **`pinyinjs script`,** script conversion at the command line, with `--to` for
40
+ the target and `--from-script` where the text is too short for detection to
41
+ tell. The lines carry the converted text and nothing else so it pipes;
42
+ `--json` carries the per-character evidence and what was uncertain. Also a
43
+ [script conversion](docs/script-conversion/) page, which the README and the
44
+ docs index now point at — `toScript` shipped with one row in the API table
45
+ and nothing a reader would find.
46
+
47
+ - **`toScript`,** 简体 ↔ 繁體 conversion. 我们后来发现了头发问题 is
48
+ 我們後來發現了頭髮問題. The reading is the evidence, in both directions, and it
49
+ is what nothing else in this space has: 发 is 發 or 髮 and only `fà` tells them
50
+ apart; 干 is 幹, 乾 or 干; 乾 stays 乾 in 乾隆 and simplifies to 干 in 乾燥.
51
+ Every other converter resolves these from a phrase table alone. This one
52
+ segments with the lattice and reads the result, so it generalises to words no
53
+ phrase table lists.
54
+
55
+ Evidence is taken strongest first — a word some source wrote in both scripts,
56
+ then the character at the reading it was decoded with, then the character's
57
+ commonest form — and `toScriptPieces` reports which of those settled every
58
+ character. `isUncertainChoice` marks the last one, the only case that is a
59
+ guess: 下面 is a surface or a bowl of noodles and nothing here can tell, so it
60
+ says so rather than picking silently. Over the gold corpus 97.7% of characters
61
+ are locked and 1.5% are guesses.
62
+
63
+ Targets are BCP-47: `zh-Hans`, `zh-Hant`, `zh-Hant-TW`, `zh-Hant-HK`, with a
64
+ bare `zh-Hant` taking Taiwan. The input script is detected unless `from` names
65
+ it, which matters more than it sounds — plenty of characters are current in
66
+ both scripts, so running 繁體 through the 简→繁 tables would turn 准將 into
67
+ 準將.
68
+
69
+ **This is orthography, not translation.** 軟體 and 软件 are different words
70
+ rather than two spellings of one. OpenCC folds that into script conversion
71
+ with `s2twp`; pinyinjs does not.
72
+
73
+ - **`data/script.map`,** the conversion tables, as their own fetchable file:
74
+ 282 KB, 96 KB brotli, loaded by `loadScriptTables` only when something asks
75
+ to convert. A caller converting hanzi to pinyin pays nothing for it. The
76
+ character tables alone are right for 99.13% of the 267,639 entries whose two
77
+ scripts differ, and the word exception lists cover the rest.
78
+
79
+ - **`hansOnly` and `hantOnly`,** the character sets `detectScript` has always
80
+ taken and nothing shipped. They ride in the same file.
81
+
82
+ - **Round-trip scoring in `pnpm accuracy`.** 繁→简 is near-deterministic, so
83
+ 简→繁→简 has to be the identity for essentially every key — half a million
84
+ cases with no hand-labelling, and every failure a real defect. It reports
85
+ 99.6% over the words in use and 99.3% over every key. The reverse trip is
86
+ lossy by design and is reported rather than targeted.
87
+
88
+ - **Hong Kong 繁體 glyph forms are recognised on the lookup path.** Taiwan and
89
+ Hong Kong write the same characters with the same readings and disagree about
90
+ the standard form of 58 of them — 裡 against 裏, 群 against 羣, 麵 against 麪.
91
+ Hong Kong spellings were missing dictionary keys and falling back to
92
+ converting character by character, so 羣眾 and 麪包 read worse than 群眾 and
93
+ 麵包 did. The lookup path now normalises 繁體 glyph forms to the Taiwan
94
+ standard the keys are already built from: measured over the 9,833 keys with a
95
+ distinct Hong Kong spelling, 2,358 were already keys and normalisation reaches
96
+ a further 5,439. Only the reading is taken from the normalised form — the
97
+ characters a caller gets back are the ones they wrote. `toCanonicalGlyphs`,
98
+ `toRegionalGlyphs` and the `Region` type are exported for it, and
99
+ SCRIPTS-AND-LOCALES.md carries the reasoning.
100
+
101
+ Nineteen of OpenCC's mappings are deliberately not applied, because the
102
+ variant is a live spelling rather than a regional one. Six are current 繁體 —
103
+ 台 appears 164 times in CC-CEDICT against 臺's 208 — and thirteen are current
104
+ **简体**, because the PRC simplification adopted the same 新字形 conventions
105
+ Hong Kong did: 着, 温, 脱, 户, 税, 卧, 悦, 兑, 葱, 幺, 棱, 檐, 痹. Normalising
106
+ those would have rewritten 简体 text, and 走着 `zǒuzhe` is the case that
107
+ caught it.
108
+
109
+ - **OpenCC as a data source.** Its 简体 ↔ 繁體 character tables and the Taiwan
110
+ and Hong Kong variant tables, Apache-2.0, attributed in `NOTICE`. The glyph
111
+ tables are held in `src/script/glyphs.ts` as code rather than shipped as an
112
+ artifact, since 120 mappings do not justify a download and they have to work
113
+ before any dictionary has loaded; `pnpm build:data` re-derives them from
114
+ OpenCC and fails the build if the two have drifted.
115
+
116
+ - **`slug`,** hanzi to a URL-safe slug: 我想学中文。 is
117
+ `wo3-xiang3-xue2-zhong1wen2`. Built on the decode rather than on a finished
118
+ string, which is the whole point of it — 银行 is `yin2hang2` and not
119
+ `yin2xing2`, the separators fall on the word boundaries 分词连写 found, and
120
+ 西安 keeps its 隔音符号 as a break so a toneless slug is `xi-an` rather than
121
+ `xian`, which is a different word. Tones are written by default because
122
+ dropping them collides, and `hash` puts a short hash of the _hanzi_ on the end
123
+ for the homophones tones cannot separate: 权利 and 权力 are both `quan2li4`.
124
+ The options generalise it past URLs to search keys and identifiers, which the
125
+ [slug page](docs/slug/) tabulates. `pinyinjs slug` at the command line.
126
+
14
127
  - **`TEACHING_JIAO` and `COUNTED_MEASURE`,** two more lattice rules, and
15
128
  `QUANTITY_CHARACTERS`, the 汉字 a quantity is written with that the second of
16
129
  them asks about. See the fixes below for what they do and what they measure.
@@ -225,14 +338,14 @@ decoder internals and the build pipeline.
225
338
 
226
339
  ### Accuracy at 1.0.0
227
340
 
228
- Over the 118-case gold corpus, which is committed to the repository rather than
341
+ Over the 124-case gold corpus, which is committed to the repository rather than
229
342
  to the published package, and scored by `pnpm accuracy`:
230
343
 
231
344
  | | lattice | greedy baseline |
232
345
  | ---------------- | --------: | --------------: |
233
- | exact match | **97.5%** | 88.1% |
346
+ | exact match | **97.6%** | 88.7% |
234
347
  | reading accuracy | 99.7% | 98.3% |
235
- | spacing (F1) | **99.8%** | 96.3% |
348
+ | spacing (F1) | **99.8%** | 96.4% |
236
349
 
237
350
  Every figure in that table is asserted against the scorer by
238
351
  `src/changelog.test.ts`, because a number nothing executes goes stale, which is
package/NOTICE CHANGED
@@ -32,6 +32,15 @@ Source: https://raw.githubusercontent.com/fxsjy/jieba/master/jieba/dict.txt
32
32
  Licence: MIT, though the dictionary's own provenance is not documented upstream; recorded here as an accepted unknown
33
33
  Provides: word frequencies and the part-of-speech tags that mark proper nouns
34
34
 
35
+ ## OpenCC
36
+
37
+ Source: https://raw.githubusercontent.com/BYVoid/OpenCC/master/data/dictionary/STCharacters.txt
38
+ https://raw.githubusercontent.com/BYVoid/OpenCC/master/data/dictionary/TSCharacters.txt
39
+ https://raw.githubusercontent.com/BYVoid/OpenCC/master/data/dictionary/TWVariants.txt
40
+ https://raw.githubusercontent.com/BYVoid/OpenCC/master/data/dictionary/HKVariants.txt
41
+ Licence: Apache-2.0
42
+ Provides: the 简体 ↔ 繁體 character tables, and the Taiwan and Hong Kong glyph form tables that separate 裡 from 裏 and 群 from 羣
43
+
35
44
  ## Comparison of Standard Chinese transcription systems (Wikipedia)
36
45
 
37
46
  Source: https://en.wikipedia.org/wiki/Comparison_of_Standard_Chinese_transcription_systems
package/README.md CHANGED
@@ -29,6 +29,12 @@ Wǒ yào qù Běijīng.
29
29
  $ pinyinjs convert --notation numbers 银行
30
30
  yin2hang2
31
31
 
32
+ $ pinyinjs slug 我想学中文。
33
+ wo3-xiang3-xue2-zhong1wen2
34
+
35
+ $ pinyinjs script 我们后来发现了头发问题 --to zh-Hant
36
+ 我們後來發現了頭髮問題
37
+
32
38
  $ pinyinjs explain 银行
33
39
  银行 yínháng
34
40
  yín locked
@@ -53,6 +59,8 @@ běijīng běijīng ㄅㄟˇ ㄐㄧㄥ pei³-ching¹ běijīng beeij
53
59
  | ------------ | --------------------------------------------------- |
54
60
  | `convert` | hanzi to pinyin |
55
61
  | `html` | the same, as HTML |
62
+ | `slug` | hanzi to a URL-safe slug |
63
+ | `script` | 简体 ↔ 繁體 conversion |
56
64
  | `explain` | each syllable, how settled it was, and what it beat |
57
65
  | `lookup` | what the dictionary holds for a word |
58
66
  | `syllable` | take written pinyin apart |
@@ -177,7 +185,6 @@ convert(dictionary, text, { notation: "numbers", capitals: "none" });
177
185
  | `punctuation` | `"latin"` | `"latin"`, `"keep"` |
178
186
  | `grouping` | `true` | `false` turns off GB/T 16159 word spacing |
179
187
  | `numbers` | `"read"` | `"keep"` leaves every digit as it was written |
180
- | `numbers` | `"read"` | `"keep"` leaves every digit as it was written |
181
188
  | `sandhi` | `{ yiBu: true, thirdTone: false }` | `{ yiBu?: boolean; thirdTone?: boolean }` |
182
189
 
183
190
  ```ts
@@ -527,16 +534,57 @@ Third-tone sandhi is off by default: standard orthography writes 你好 as
527
534
 
528
535
  ## Scripts and locales
529
536
 
530
- Script and locale are separate options: Taiwan writes 繁體 with `zh-TW`
531
- readings, but mainland editions of classical texts use 繁體 with `zh-CN`
532
- readings, and Singapore uses 简体.
537
+ Three axes, not one. Taiwan writes 繁體 with `zh-TW` readings, but mainland
538
+ editions of classical texts use 繁體 with `zh-CN` readings, and Singapore uses
539
+ 简体.
540
+
541
+ | Axis | Values | What differs |
542
+ | ----------- | ----------------- | ------------------------------- |
543
+ | Script | `Hans` / `Hant` | which characters are written |
544
+ | Glyph forms | `TW` / `HK` | which 繁體 standard writes them |
545
+ | Locale | `zh-CN` / `zh-TW` | how they are read |
546
+
547
+ Both scripts are dictionary keys, so only the locale is an option to pass. Hong
548
+ Kong's 繁體 forms are recognised on the way in, so 羣眾 and 麪包 read exactly as
549
+ 群眾 and 麵包 do.
550
+
551
+ ## Simplified and traditional
552
+
553
+ `toScript` converts between the scripts, and the reading is what makes it
554
+ accurate. Simplification merged distinct characters; the reading un-merges them.
555
+
556
+ ```ts
557
+ import { loadScriptTables, toScript } from "@kensio/pinyinjs";
558
+
559
+ const tables = await loadScriptTables(source);
560
+
561
+ toScript(dictionary, tables, "我们后来发现了头发问题", { to: "zh-Hant" });
562
+ // "我們後來發現了頭髮問題"
563
+
564
+ toScript(dictionary, tables, "头发", { to: "zh-Hant" }); // "頭髮", tóufà
565
+ toScript(dictionary, tables, "出发", { to: "zh-Hant" }); // "出發", chūfā
566
+ ```
567
+
568
+ 发 is 發 or 髮 and nothing about the character says which. Every other converter
569
+ works from phrase tables alone, so it is right about the words on the list and
570
+ guessing past it.
571
+
572
+ It runs both ways — 乾燥 is `gānzào` and simplifies to 干燥, while 乾隆 is
573
+ `Qiánlóng` and stays 乾隆 — and it targets a region, because there is no
574
+ region-free 繁體:
575
+
576
+ ```ts
577
+ toScript(dictionary, tables, "面包", { to: "zh-Hant-TW" }); // "麵包"
578
+ toScript(dictionary, tables, "面包", { to: "zh-Hant-HK" }); // "麪包"
579
+ ```
533
580
 
534
- | Axis | Values | What differs |
535
- | ------ | ----------------- | ---------------------------- |
536
- | Script | `Hans` / `Hant` | which characters are written |
537
- | Locale | `zh-CN` / `zh-TW` | how they are read |
581
+ `toScriptPieces` reports what settled each character, and which were guesses:
582
+ 下面 is a surface or a bowl of noodles, both `xiàmiàn`, and it says so rather
583
+ than picking silently. The tables load separately from the dictionary, so
584
+ converting hanzi to pinyin costs nothing for them.
538
585
 
539
- Both scripts are dictionary keys, so only the locale is an option to pass.
586
+ This is orthography and not translation — 软件 becomes 軟件, never 軟體. See
587
+ [script conversion](docs/script-conversion/).
540
588
 
541
589
  ## API
542
590
 
@@ -546,6 +594,7 @@ Both scripts are dictionary keys, so only the locale is an option to pass.
546
594
  | `convert(dictionary, text, options?)` | hanzi → pinyin |
547
595
  | `convertPieces(dictionary, text, ...)` | the same, per syllable, with confidence |
548
596
  | `convertToHtml(dictionary, text, ...)` | the same, as HTML |
597
+ | `slug(dictionary, text, options?)` | hanzi → a URL-safe slug |
549
598
  | `joinPieces(pieces)` / `toHtml(pieces)` | render pieces |
550
599
  | `isUncertain(confidence)` | was this syllable a guess? |
551
600
  | `dictionary.lookup / hasPrefix / readingsOf` | query the dictionary |
package/data/core.entries CHANGED
@@ -714,7 +714,6 @@ liao2 n
714
714
  qi1 zg
715
715
  cheng1 zg
716
716
  chan2 zg
717
- wei3 wei4 j
718
717
  ji1
719
718
  bo1
720
719
  hui4 zg
@@ -1771,7 +1770,6 @@ nie4 zg
1771
1770
  xuan1 v
1772
1771
  liang4 zg
1773
1772
  sang4 sang1
1774
- chi1 v
1775
1773
  qiao2
1776
1774
  yan4
1777
1775
  dan1 chan2,shan4
@@ -5081,7 +5079,6 @@ mi3 g
5081
5079
  chu4 zg
5082
5080
  ge2 zg
5083
5081
  di2 ng
5084
- xu4 ns p
5085
5082
  jiao4 zg
5086
5083
  min3 ag
5087
5084
  jiu4 v
@@ -7133,6 +7130,7 @@ cui3 zg
7133
7130
  ti2 zg
7134
7131
  yang4 zg
7135
7132
  jiang1
7133
+ cong2
7136
7134
  ying3
7137
7135
  xiu3 zg
7138
7136
  shu4 zg
@@ -10024,7 +10022,6 @@ quan3
10024
10022
  qi2 nr
10025
10023
  zhun3
10026
10024
  qian4
10027
- xian4 n
10028
10025
  shou4
10029
10026
  wei2 zg
10030
10027
  qing4 zg qi3,qing3
@@ -10179,7 +10176,6 @@ hui4
10179
10176
  xi4
10180
10177
  se4 zg
10181
10178
  jian3
10182
- jiang1 n
10183
10179
  huan2 zg
10184
10180
  zao3
10185
10181
  xie4 zg
@@ -10756,7 +10752,6 @@ lie4
10756
10752
  shan1
10757
10753
  ting3
10758
10754
  mei2
10759
- chun2
10760
10755
  shen4
10761
10756
  qian3 zg
10762
10757
  de5 te5
@@ -12201,7 +12196,6 @@ jie2
12201
12196
  na4 g
12202
12197
  yi4
12203
12198
  zhong1 d
12204
- zhi3 d zhi1
12205
12199
  xie2
12206
12200
  ren4 zg
12207
12201
  qin1 zg
@@ -12589,7 +12583,6 @@ gao4
12589
12583
  song4
12590
12584
  hui4
12591
12585
  shuo1 zg
12592
- shuo1
12593
12586
  chang4 zg
12594
12587
  shui2 zg
12595
12588
  ke4
@@ -14155,7 +14148,6 @@ na4
14155
14148
  e2 zg
14156
14149
  jue2
14157
14150
  dun4
14158
- gou1
14159
14151
  qian2
14160
14152
  ban3
14161
14153
  sa4 zg
@@ -14206,7 +14198,6 @@ fu2
14206
14198
  yue4
14207
14199
  pi1
14208
14200
  yang1 zg
14209
- bo1 ng
14210
14201
  gou1 zg
14211
14202
  shu4
14212
14203
  zheng1
@@ -14403,7 +14394,6 @@ jian4
14403
14394
  jian4
14404
14395
  si1 ng
14405
14396
  zhe3 n
14406
- zhen1 p
14407
14397
  zhong1 zg
14408
14398
  zi1 zg
14409
14399
  xiu1 zg
@@ -16107,7 +16097,6 @@ ba4 zg
16107
16097
  you2 zg
16108
16098
  gun3 zg
16109
16099
  pi1
16110
- nian2
16111
16100
  tai2
16112
16101
  bao4
16113
16102
  fu4
@@ -16722,7 +16711,6 @@ mai4 zg
16722
16711
  mai4 nr p
16723
16712
  chao3
16724
16713
  fu1 zg
16725
- mian4 n mian5
16726
16714
  mian4
16727
16715
  qu4
16728
16716
  qu1 qu2 q qu3
package/data/core.freq CHANGED
Binary file
package/data/core.keys CHANGED
@@ -714,7 +714,6 @@ B
714
714
  僛
715
715
  僜
716
716
  僝
717
- 僞
718
717
  僟
719
718
  僠
720
719
  僡
@@ -1771,7 +1770,6 @@ B
1771
1770
  喧
1772
1771
  喨
1773
1772
  喪
1774
- 喫
1775
1773
  喬
1776
1774
  喭
1777
1775
  單
@@ -5081,7 +5079,6 @@ B
5081
5079
  敊
5082
5080
  敋
5083
5081
  敌
5084
- 敍
5085
5082
  敎
5086
5083
  敏
5087
5084
  救
@@ -7133,6 +7130,7 @@ B
7133
7130
  漽
7134
7131
  漾
7135
7132
  漿
7133
+ 潀
7136
7134
  潁
7137
7135
  潃
7138
7136
  潄
@@ -10024,7 +10022,6 @@ B
10024
10022
  綦
10025
10023
  綧
10026
10024
  綪
10027
- 綫
10028
10025
  綬
10029
10026
  維
10030
10027
  綮
@@ -10179,7 +10176,6 @@ B
10179
10176
  繫
10180
10177
  繬
10181
10178
  繭
10182
- 繮
10183
10179
  繯
10184
10180
  繰
10185
10181
  繲
@@ -10756,7 +10752,6 @@ B
10756
10752
  脠
10757
10753
  脡
10758
10754
  脢
10759
- 脣
10760
10755
  脤
10761
10756
  脥
10762
10757
  脦
@@ -12201,7 +12196,6 @@ B
12201
12196
  衲
12202
12197
  衵
12203
12198
  衷
12204
- 衹
12205
12199
  衺
12206
12200
  衽
12207
12201
  衾
@@ -12589,7 +12583,6 @@ B
12589
12583
  誦
12590
12584
  誨
12591
12585
  說
12592
- 説
12593
12586
  誯
12594
12587
  誰
12595
12588
  課
@@ -14155,7 +14148,6 @@ B
14155
14148
  鈋
14156
14149
  鈌
14157
14150
  鈍
14158
- 鈎
14159
14151
  鈐
14160
14152
  鈑
14161
14153
  鈒
@@ -14206,7 +14198,6 @@ B
14206
14198
  鉞
14207
14199
  鉟
14208
14200
  鉠
14209
- 鉢
14210
14201
  鉤
14211
14202
  鉥
14212
14203
  鉦
@@ -14403,7 +14394,6 @@ B
14403
14394
  鍵
14404
14395
  鍶
14405
14396
  鍺
14406
- 鍼
14407
14397
  鍾
14408
14398
  鍿
14409
14399
  鎀
@@ -16107,7 +16097,6 @@ B
16107
16097
  鮋
16108
16098
  鮌
16109
16099
  鮍
16110
- 鮎
16111
16100
  鮐
16112
16101
  鮑
16113
16102
  鮒
@@ -16722,7 +16711,6 @@ B
16722
16711
  麦
16723
16712
  麨
16724
16713
  麩
16725
- 麪
16726
16714
  麫
16727
16715
  麮
16728
16716
  麯