@kensio/pinyinjs 1.7.4 → 1.7.6
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.
- package/README.md +128 -123
- package/data/full.entries +2595 -2595
- package/data/manifest.json +5 -5
- package/data/script.map +66 -3
- package/dist/accuracy/score-case.d.ts +23 -0
- package/dist/accuracy/score-case.d.ts.map +1 -0
- package/dist/accuracy/score-case.js +63 -0
- package/dist/accuracy/score-case.js.map +1 -0
- package/dist/accuracy/score.d.ts +1 -8
- package/dist/accuracy/score.d.ts.map +1 -1
- package/dist/accuracy/score.js +1 -55
- package/dist/accuracy/score.js.map +1 -1
- package/dist/cli/arguments.d.ts +4 -290
- package/dist/cli/arguments.d.ts.map +1 -1
- package/dist/cli/arguments.js +5 -357
- package/dist/cli/arguments.js.map +1 -1
- package/dist/cli/check-command.d.ts +9 -0
- package/dist/cli/check-command.d.ts.map +1 -0
- package/dist/cli/check-command.js +95 -0
- package/dist/cli/check-command.js.map +1 -0
- package/dist/cli/cli-input.d.ts +49 -0
- package/dist/cli/cli-input.d.ts.map +1 -0
- package/dist/cli/cli-input.js +31 -0
- package/dist/cli/cli-input.js.map +1 -0
- package/dist/cli/command.d.ts +97 -0
- package/dist/cli/command.d.ts.map +1 -0
- package/dist/cli/command.js +40 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands.d.ts +7 -110
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +14 -991
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/convert-command.d.ts +6 -0
- package/dist/cli/convert-command.d.ts.map +1 -0
- package/dist/cli/convert-command.js +52 -0
- package/dist/cli/convert-command.js.map +1 -0
- package/dist/cli/environment.d.ts +1 -1
- package/dist/cli/environment.d.ts.map +1 -1
- package/dist/cli/explain-command.d.ts +6 -0
- package/dist/cli/explain-command.d.ts.map +1 -0
- package/dist/cli/explain-command.js +40 -0
- package/dist/cli/explain-command.js.map +1 -0
- package/dist/cli/explain-syllable.d.ts +10 -0
- package/dist/cli/explain-syllable.d.ts.map +1 -0
- package/dist/cli/explain-syllable.js +70 -0
- package/dist/cli/explain-syllable.js.map +1 -0
- package/dist/cli/flag-help.d.ts +18 -0
- package/dist/cli/flag-help.d.ts.map +1 -0
- package/dist/cli/flag-help.js +78 -0
- package/dist/cli/flag-help.js.map +1 -0
- package/dist/cli/flag-lists.d.ts +49 -0
- package/dist/cli/flag-lists.d.ts.map +1 -0
- package/dist/cli/flag-lists.js +58 -0
- package/dist/cli/flag-lists.js.map +1 -0
- package/dist/cli/flag-values.d.ts +44 -0
- package/dist/cli/flag-values.d.ts.map +1 -0
- package/dist/cli/flag-values.js +56 -0
- package/dist/cli/flag-values.js.map +1 -0
- package/dist/cli/flags.d.ts +193 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +133 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/format-options.d.ts +29 -0
- package/dist/cli/format-options.d.ts.map +1 -0
- package/dist/cli/format-options.js +72 -0
- package/dist/cli/format-options.js.map +1 -0
- package/dist/cli/global-help.d.ts +23 -0
- package/dist/cli/global-help.d.ts.map +1 -0
- package/dist/cli/global-help.js +40 -0
- package/dist/cli/global-help.js.map +1 -0
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +5 -99
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/html-commands.d.ts +13 -0
- package/dist/cli/html-commands.d.ts.map +1 -0
- package/dist/cli/html-commands.js +49 -0
- package/dist/cli/html-commands.js.map +1 -0
- package/dist/cli/info-command.d.ts +7 -0
- package/dist/cli/info-command.d.ts.map +1 -0
- package/dist/cli/info-command.js +39 -0
- package/dist/cli/info-command.js.map +1 -0
- package/dist/cli/lookup-commands.d.ts +10 -0
- package/dist/cli/lookup-commands.d.ts.map +1 -0
- package/dist/cli/lookup-commands.js +101 -0
- package/dist/cli/lookup-commands.js.map +1 -0
- package/dist/cli/match-command.d.ts +11 -0
- package/dist/cli/match-command.d.ts.map +1 -0
- package/dist/cli/match-command.js +76 -0
- package/dist/cli/match-command.js.map +1 -0
- package/dist/cli/number-command.d.ts +12 -0
- package/dist/cli/number-command.d.ts.map +1 -0
- package/dist/cli/number-command.js +89 -0
- package/dist/cli/number-command.js.map +1 -0
- package/dist/cli/options.d.ts +30 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +54 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/run-command.d.ts +24 -0
- package/dist/cli/run-command.d.ts.map +1 -0
- package/dist/cli/run-command.js +40 -0
- package/dist/cli/run-command.js.map +1 -0
- package/dist/cli/run.d.ts +4 -42
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +6 -61
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/script-command.d.ts +10 -0
- package/dist/cli/script-command.d.ts.map +1 -0
- package/dist/cli/script-command.js +58 -0
- package/dist/cli/script-command.js.map +1 -0
- package/dist/cli/segment-command.d.ts +11 -0
- package/dist/cli/segment-command.d.ts.map +1 -0
- package/dist/cli/segment-command.js +53 -0
- package/dist/cli/segment-command.js.map +1 -0
- package/dist/cli/slug-command.d.ts +10 -0
- package/dist/cli/slug-command.d.ts.map +1 -0
- package/dist/cli/slug-command.js +28 -0
- package/dist/cli/slug-command.js.map +1 -0
- package/dist/cli/syllable-command.d.ts +14 -0
- package/dist/cli/syllable-command.d.ts.map +1 -0
- package/dist/cli/syllable-command.js +82 -0
- package/dist/cli/syllable-command.js.map +1 -0
- package/dist/cli/system-table.d.ts +12 -0
- package/dist/cli/system-table.d.ts.map +1 -0
- package/dist/cli/system-table.js +48 -0
- package/dist/cli/system-table.js.map +1 -0
- package/dist/cli/systems.d.ts +57 -0
- package/dist/cli/systems.d.ts.map +1 -0
- package/dist/cli/systems.js +27 -0
- package/dist/cli/systems.js.map +1 -0
- package/dist/cli/transcribe-command.d.ts +18 -0
- package/dist/cli/transcribe-command.d.ts.map +1 -0
- package/dist/cli/transcribe-command.js +86 -0
- package/dist/cli/transcribe-command.js.map +1 -0
- package/dist/cli/transcribe-reading.d.ts +15 -0
- package/dist/cli/transcribe-reading.d.ts.map +1 -0
- package/dist/cli/transcribe-reading.js +90 -0
- package/dist/cli/transcribe-reading.js.map +1 -0
- package/dist/cli/transcribe-rows.d.ts +26 -0
- package/dist/cli/transcribe-rows.d.ts.map +1 -0
- package/dist/cli/transcribe-rows.js +30 -0
- package/dist/cli/transcribe-rows.js.map +1 -0
- package/dist/cli/usage-error.d.ts +9 -0
- package/dist/cli/usage-error.d.ts.map +1 -0
- package/dist/cli/usage-error.js +9 -0
- package/dist/cli/usage-error.js.map +1 -0
- package/dist/decode/alternatives.d.ts +16 -0
- package/dist/decode/alternatives.d.ts.map +1 -0
- package/dist/decode/alternatives.js +31 -0
- package/dist/decode/alternatives.js.map +1 -0
- package/dist/decode/chang-context.d.ts +27 -0
- package/dist/decode/chang-context.d.ts.map +1 -0
- package/dist/decode/chang-context.js +66 -0
- package/dist/decode/chang-context.js.map +1 -0
- package/dist/decode/chang-rule.d.ts +37 -0
- package/dist/decode/chang-rule.d.ts.map +1 -0
- package/dist/decode/chang-rule.js +169 -0
- package/dist/decode/chang-rule.js.map +1 -0
- package/dist/decode/confidence.d.ts +11 -3
- package/dist/decode/confidence.d.ts.map +1 -1
- package/dist/decode/confidence.js +14 -121
- package/dist/decode/confidence.js.map +1 -1
- package/dist/decode/convert-options.d.ts +116 -0
- package/dist/decode/convert-options.d.ts.map +1 -0
- package/dist/decode/convert-options.js +2 -0
- package/dist/decode/convert-options.js.map +1 -0
- package/dist/decode/convert-pipeline.d.ts +18 -0
- package/dist/decode/convert-pipeline.d.ts.map +1 -0
- package/dist/decode/convert-pipeline.js +67 -0
- package/dist/decode/convert-pipeline.js.map +1 -0
- package/dist/decode/convert.d.ts +9 -118
- package/dist/decode/convert.d.ts.map +1 -1
- package/dist/decode/convert.js +5 -453
- package/dist/decode/convert.js.map +1 -1
- package/dist/decode/de-rule.d.ts +54 -0
- package/dist/decode/de-rule.d.ts.map +1 -0
- package/dist/decode/de-rule.js +113 -0
- package/dist/decode/de-rule.js.map +1 -0
- package/dist/decode/decode.d.ts +2 -15
- package/dist/decode/decode.d.ts.map +1 -1
- package/dist/decode/decode.js +2 -121
- package/dist/decode/decode.js.map +1 -1
- package/dist/decode/decoders.d.ts +32 -0
- package/dist/decode/decoders.d.ts.map +1 -0
- package/dist/decode/decoders.js +29 -0
- package/dist/decode/decoders.js.map +1 -0
- package/dist/decode/edge-context.d.ts +38 -0
- package/dist/decode/edge-context.d.ts.map +1 -0
- package/dist/decode/edge-context.js +57 -0
- package/dist/decode/edge-context.js.map +1 -0
- package/dist/decode/hint-lattice.d.ts +45 -0
- package/dist/decode/hint-lattice.d.ts.map +1 -0
- package/dist/decode/hint-lattice.js +154 -0
- package/dist/decode/hint-lattice.js.map +1 -0
- package/dist/decode/hints.d.ts +2 -45
- package/dist/decode/hints.d.ts.map +1 -1
- package/dist/decode/hints.js +1 -139
- package/dist/decode/hints.js.map +1 -1
- package/dist/decode/jiao-rule.d.ts +64 -0
- package/dist/decode/jiao-rule.d.ts.map +1 -0
- package/dist/decode/jiao-rule.js +115 -0
- package/dist/decode/jiao-rule.js.map +1 -0
- package/dist/decode/lattice-costs.d.ts +55 -0
- package/dist/decode/lattice-costs.d.ts.map +1 -0
- package/dist/decode/lattice-costs.js +90 -0
- package/dist/decode/lattice-costs.js.map +1 -0
- package/dist/decode/lattice-edges.d.ts +29 -0
- package/dist/decode/lattice-edges.d.ts.map +1 -0
- package/dist/decode/lattice-edges.js +78 -0
- package/dist/decode/lattice-edges.js.map +1 -0
- package/dist/decode/lattice-slice.d.ts +37 -0
- package/dist/decode/lattice-slice.d.ts.map +1 -0
- package/dist/decode/lattice-slice.js +43 -0
- package/dist/decode/lattice-slice.js.map +1 -0
- package/dist/decode/lattice-types.d.ts +101 -0
- package/dist/decode/lattice-types.d.ts.map +1 -0
- package/dist/decode/lattice-types.js +63 -0
- package/dist/decode/lattice-types.js.map +1 -0
- package/dist/decode/lattice.d.ts +2 -59
- package/dist/decode/lattice.d.ts.map +1 -1
- package/dist/decode/lattice.js +2 -118
- package/dist/decode/lattice.js.map +1 -1
- package/dist/decode/number-pieces.d.ts +62 -0
- package/dist/decode/number-pieces.d.ts.map +1 -0
- package/dist/decode/number-pieces.js +106 -0
- package/dist/decode/number-pieces.js.map +1 -0
- package/dist/decode/numbers.d.ts +53 -0
- package/dist/decode/numbers.d.ts.map +1 -0
- package/dist/decode/numbers.js +69 -0
- package/dist/decode/numbers.js.map +1 -0
- package/dist/decode/pieces.d.ts +78 -0
- package/dist/decode/pieces.d.ts.map +1 -0
- package/dist/decode/pieces.js +136 -0
- package/dist/decode/pieces.js.map +1 -0
- package/dist/decode/polyphone-rules.d.ts +11 -0
- package/dist/decode/polyphone-rules.d.ts.map +1 -0
- package/dist/decode/polyphone-rules.js +11 -0
- package/dist/decode/polyphone-rules.js.map +1 -0
- package/dist/decode/reading-rules.d.ts +3 -126
- package/dist/decode/reading-rules.d.ts.map +1 -1
- package/dist/decode/reading-rules.js +8 -434
- package/dist/decode/reading-rules.js.map +1 -1
- package/dist/decode/rules.d.ts +1 -17
- package/dist/decode/rules.d.ts.map +1 -1
- package/dist/decode/rules.js +1 -43
- package/dist/decode/rules.js.map +1 -1
- package/dist/decode/run-lattice.d.ts +52 -0
- package/dist/decode/run-lattice.d.ts.map +1 -0
- package/dist/decode/run-lattice.js +91 -0
- package/dist/decode/run-lattice.js.map +1 -0
- package/dist/decode/run-words.d.ts +17 -0
- package/dist/decode/run-words.d.ts.map +1 -0
- package/dist/decode/run-words.js +29 -0
- package/dist/decode/run-words.js.map +1 -0
- package/dist/decode/sandhi-input.d.ts +30 -0
- package/dist/decode/sandhi-input.d.ts.map +1 -0
- package/dist/decode/sandhi-input.js +35 -0
- package/dist/decode/sandhi-input.js.map +1 -0
- package/dist/decode/sandhi-tones.d.ts +97 -0
- package/dist/decode/sandhi-tones.d.ts.map +1 -0
- package/dist/decode/sandhi-tones.js +139 -0
- package/dist/decode/sandhi-tones.js.map +1 -0
- package/dist/decode/sandhi.d.ts +10 -7
- package/dist/decode/sandhi.d.ts.map +1 -1
- package/dist/decode/sandhi.js +11 -88
- package/dist/decode/sandhi.js.map +1 -1
- package/dist/decode/script-types.d.ts +76 -0
- package/dist/decode/script-types.d.ts.map +1 -0
- package/dist/decode/script-types.js +35 -0
- package/dist/decode/script-types.js.map +1 -0
- package/dist/decode/script-words.d.ts +32 -0
- package/dist/decode/script-words.d.ts.map +1 -0
- package/dist/decode/script-words.js +77 -0
- package/dist/decode/script-words.js.map +1 -0
- package/dist/decode/script.d.ts +3 -73
- package/dist/decode/script.d.ts.map +1 -1
- package/dist/decode/script.js +3 -109
- package/dist/decode/script.js.map +1 -1
- package/dist/decode/tan-rule.d.ts +68 -0
- package/dist/decode/tan-rule.d.ts.map +1 -0
- package/dist/decode/tan-rule.js +131 -0
- package/dist/decode/tan-rule.js.map +1 -0
- package/dist/decode/write-run.d.ts +21 -0
- package/dist/decode/write-run.d.ts.map +1 -0
- package/dist/decode/write-run.js +42 -0
- package/dist/decode/write-run.js.map +1 -0
- package/dist/dictionary/artifact-claims.d.ts +25 -0
- package/dist/dictionary/artifact-claims.d.ts.map +1 -0
- package/dist/dictionary/artifact-claims.js +47 -0
- package/dist/dictionary/artifact-claims.js.map +1 -0
- package/dist/dictionary/artifact-format.d.ts +86 -0
- package/dist/dictionary/artifact-format.d.ts.map +1 -0
- package/dist/dictionary/artifact-format.js +91 -0
- package/dist/dictionary/artifact-format.js.map +1 -0
- package/dist/dictionary/artifact-read.d.ts +34 -0
- package/dist/dictionary/artifact-read.d.ts.map +1 -0
- package/dist/dictionary/artifact-read.js +114 -0
- package/dist/dictionary/artifact-read.js.map +1 -0
- package/dist/dictionary/artifact.d.ts +4 -63
- package/dist/dictionary/artifact.d.ts.map +1 -1
- package/dist/dictionary/artifact.js +12 -229
- package/dist/dictionary/artifact.js.map +1 -1
- package/dist/dictionary/assertions.d.ts +5 -57
- package/dist/dictionary/assertions.d.ts.map +1 -1
- package/dist/dictionary/assertions.js +4 -317
- package/dist/dictionary/assertions.js.map +1 -1
- package/dist/dictionary/build-assertions.d.ts +12 -0
- package/dist/dictionary/build-assertions.d.ts.map +1 -0
- package/dist/dictionary/build-assertions.js +13 -0
- package/dist/dictionary/build-assertions.js.map +1 -0
- package/dist/dictionary/built-dictionary.d.ts +46 -0
- package/dist/dictionary/built-dictionary.d.ts.map +1 -0
- package/dist/dictionary/built-dictionary.js +97 -0
- package/dist/dictionary/built-dictionary.js.map +1 -0
- package/dist/dictionary/cedict-senses.d.ts +87 -0
- package/dist/dictionary/cedict-senses.d.ts.map +1 -0
- package/dist/dictionary/cedict-senses.js +126 -0
- package/dist/dictionary/cedict-senses.js.map +1 -0
- package/dist/dictionary/character-defaults.d.ts +26 -0
- package/dist/dictionary/character-defaults.d.ts.map +1 -0
- package/dist/dictionary/character-defaults.js +67 -0
- package/dist/dictionary/character-defaults.js.map +1 -0
- package/dist/dictionary/character-readings.d.ts +10 -0
- package/dist/dictionary/character-readings.d.ts.map +1 -0
- package/dist/dictionary/character-readings.js +25 -0
- package/dist/dictionary/character-readings.js.map +1 -0
- package/dist/dictionary/constituent-repair.d.ts +36 -0
- package/dist/dictionary/constituent-repair.d.ts.map +1 -0
- package/dist/dictionary/constituent-repair.js +117 -0
- package/dist/dictionary/constituent-repair.js.map +1 -0
- package/dist/dictionary/dictionary-entry.d.ts +37 -0
- package/dist/dictionary/dictionary-entry.d.ts.map +1 -0
- package/dist/dictionary/dictionary-entry.js +41 -0
- package/dist/dictionary/dictionary-entry.js.map +1 -0
- package/dist/dictionary/dictionary-readings.d.ts +56 -0
- package/dist/dictionary/dictionary-readings.d.ts.map +1 -0
- package/dist/dictionary/dictionary-readings.js +93 -0
- package/dist/dictionary/dictionary-readings.js.map +1 -0
- package/dist/dictionary/dictionary.d.ts +6 -60
- package/dist/dictionary/dictionary.d.ts.map +1 -1
- package/dist/dictionary/dictionary.js +9 -169
- package/dist/dictionary/dictionary.js.map +1 -1
- package/dist/dictionary/entry-invariants.d.ts +3 -0
- package/dist/dictionary/entry-invariants.d.ts.map +1 -0
- package/dist/dictionary/entry-invariants.js +67 -0
- package/dist/dictionary/entry-invariants.js.map +1 -0
- package/dist/dictionary/entry-lines.d.ts +35 -0
- package/dist/dictionary/entry-lines.d.ts.map +1 -0
- package/dist/dictionary/entry-lines.js +70 -0
- package/dist/dictionary/entry-lines.js.map +1 -0
- package/dist/dictionary/erhua-repair.d.ts +26 -0
- package/dist/dictionary/erhua-repair.d.ts.map +1 -0
- package/dist/dictionary/erhua-repair.js +49 -0
- package/dist/dictionary/erhua-repair.js.map +1 -0
- package/dist/dictionary/frequency-tones.d.ts +74 -0
- package/dist/dictionary/frequency-tones.d.ts.map +1 -0
- package/dist/dictionary/frequency-tones.js +128 -0
- package/dist/dictionary/frequency-tones.js.map +1 -0
- package/dist/dictionary/inventory-invariants.d.ts +3 -0
- package/dist/dictionary/inventory-invariants.d.ts.map +1 -0
- package/dist/dictionary/inventory-invariants.js +54 -0
- package/dist/dictionary/inventory-invariants.js.map +1 -0
- package/dist/dictionary/locale-candidates.d.ts +40 -0
- package/dist/dictionary/locale-candidates.d.ts.map +1 -0
- package/dist/dictionary/locale-candidates.js +77 -0
- package/dist/dictionary/locale-candidates.js.map +1 -0
- package/dist/dictionary/locale-segments.d.ts +47 -0
- package/dist/dictionary/locale-segments.d.ts.map +1 -0
- package/dist/dictionary/locale-segments.js +141 -0
- package/dist/dictionary/locale-segments.js.map +1 -0
- package/dist/dictionary/locale.d.ts +1 -21
- package/dist/dictionary/locale.d.ts.map +1 -1
- package/dist/dictionary/locale.js +9 -198
- package/dist/dictionary/locale.js.map +1 -1
- package/dist/dictionary/merge-types.d.ts +127 -0
- package/dist/dictionary/merge-types.d.ts.map +1 -0
- package/dist/dictionary/merge-types.js +35 -0
- package/dist/dictionary/merge-types.js.map +1 -0
- package/dist/dictionary/merge-walk.d.ts +27 -0
- package/dist/dictionary/merge-walk.d.ts.map +1 -0
- package/dist/dictionary/merge-walk.js +49 -0
- package/dist/dictionary/merge-walk.js.map +1 -0
- package/dist/dictionary/merge-word.d.ts +7 -0
- package/dist/dictionary/merge-word.d.ts.map +1 -0
- package/dist/dictionary/merge-word.js +91 -0
- package/dist/dictionary/merge-word.js.map +1 -0
- package/dist/dictionary/merge.d.ts +5 -62
- package/dist/dictionary/merge.d.ts.map +1 -1
- package/dist/dictionary/merge.js +32 -725
- package/dist/dictionary/merge.js.map +1 -1
- package/dist/dictionary/proper-noun.d.ts +28 -0
- package/dist/dictionary/proper-noun.d.ts.map +1 -0
- package/dist/dictionary/proper-noun.js +43 -0
- package/dist/dictionary/proper-noun.js.map +1 -0
- package/dist/dictionary/reading-agreement.d.ts +71 -0
- package/dist/dictionary/reading-agreement.d.ts.map +1 -0
- package/dist/dictionary/reading-agreement.js +156 -0
- package/dist/dictionary/reading-agreement.js.map +1 -0
- package/dist/dictionary/script-conversion.d.ts +28 -0
- package/dist/dictionary/script-conversion.d.ts.map +1 -0
- package/dist/dictionary/script-conversion.js +58 -0
- package/dist/dictionary/script-conversion.js.map +1 -0
- package/dist/dictionary/script-pairings.d.ts +74 -0
- package/dist/dictionary/script-pairings.d.ts.map +1 -0
- package/dist/dictionary/script-pairings.js +120 -0
- package/dist/dictionary/script-pairings.js.map +1 -0
- package/dist/dictionary/script-tables.d.ts.map +1 -1
- package/dist/dictionary/script-tables.js +2 -165
- package/dist/dictionary/script-tables.js.map +1 -1
- package/dist/dictionary/taiwan-reading.d.ts +8 -0
- package/dist/dictionary/taiwan-reading.d.ts.map +1 -0
- package/dist/dictionary/taiwan-reading.js +38 -0
- package/dist/dictionary/taiwan-reading.js.map +1 -0
- package/dist/dictionary/tone-invariants.d.ts +3 -0
- package/dist/dictionary/tone-invariants.d.ts.map +1 -0
- package/dist/dictionary/tone-invariants.js +64 -0
- package/dist/dictionary/tone-invariants.js.map +1 -0
- package/dist/dictionary/traditional-form.d.ts +21 -0
- package/dist/dictionary/traditional-form.d.ts.map +1 -0
- package/dist/dictionary/traditional-form.js +59 -0
- package/dist/dictionary/traditional-form.js.map +1 -0
- package/dist/dictionary/traditional-ranking.d.ts +22 -0
- package/dist/dictionary/traditional-ranking.d.ts.map +1 -0
- package/dist/dictionary/traditional-ranking.js +74 -0
- package/dist/dictionary/traditional-ranking.js.map +1 -0
- package/dist/dictionary/traditional-table.d.ts +51 -0
- package/dist/dictionary/traditional-table.d.ts.map +1 -0
- package/dist/dictionary/traditional-table.js +98 -0
- package/dist/dictionary/traditional-table.js.map +1 -0
- package/dist/dictionary/traditional.d.ts +3 -56
- package/dist/dictionary/traditional.d.ts.map +1 -1
- package/dist/dictionary/traditional.js +3 -186
- package/dist/dictionary/traditional.js.map +1 -1
- package/dist/dictionary/variant-counts.d.ts +39 -0
- package/dist/dictionary/variant-counts.d.ts.map +1 -0
- package/dist/dictionary/variant-counts.js +38 -0
- package/dist/dictionary/variant-counts.js.map +1 -0
- package/dist/dictionary/word-reading.d.ts +26 -0
- package/dist/dictionary/word-reading.d.ts.map +1 -0
- package/dist/dictionary/word-reading.js +76 -0
- package/dist/dictionary/word-reading.js.map +1 -0
- package/dist/dictionary/word-readings.d.ts +15 -0
- package/dist/dictionary/word-readings.d.ts.map +1 -0
- package/dist/dictionary/word-readings.js +41 -0
- package/dist/dictionary/word-readings.js.map +1 -0
- package/dist/format/annotate.d.ts +90 -0
- package/dist/format/annotate.d.ts.map +1 -0
- package/dist/format/annotate.js +168 -0
- package/dist/format/annotate.js.map +1 -0
- package/dist/format/html.d.ts +15 -46
- package/dist/format/html.d.ts.map +1 -1
- package/dist/format/html.js +3 -162
- package/dist/format/html.js.map +1 -1
- package/dist/format/slug-hash.d.ts +51 -0
- package/dist/format/slug-hash.d.ts.map +1 -0
- package/dist/format/slug-hash.js +74 -0
- package/dist/format/slug-hash.js.map +1 -0
- package/dist/format/slug-options.d.ts +98 -0
- package/dist/format/slug-options.d.ts.map +1 -0
- package/dist/format/slug-options.js +2 -0
- package/dist/format/slug-options.js.map +1 -0
- package/dist/format/slug-words.d.ts +27 -0
- package/dist/format/slug-words.d.ts.map +1 -0
- package/dist/format/slug-words.js +0 -0
- package/dist/format/slug-words.js.map +1 -0
- package/dist/format/slug.d.ts +3 -128
- package/dist/format/slug.d.ts.map +1 -1
- package/dist/format/slug.js +0 -0
- package/dist/format/slug.js.map +1 -1
- package/dist/grade/check-readings.d.ts +41 -0
- package/dist/grade/check-readings.d.ts.map +1 -0
- package/dist/grade/check-readings.js +36 -0
- package/dist/grade/check-readings.js.map +1 -0
- package/dist/grade/check.d.ts +4 -4
- package/dist/grade/check.d.ts.map +1 -1
- package/dist/grade/check.js +5 -270
- package/dist/grade/check.js.map +1 -1
- package/dist/grade/pair-syllables.d.ts +48 -0
- package/dist/grade/pair-syllables.d.ts.map +1 -0
- package/dist/grade/pair-syllables.js +71 -0
- package/dist/grade/pair-syllables.js.map +1 -0
- package/dist/grade/reading-syllables.d.ts +62 -0
- package/dist/grade/reading-syllables.d.ts.map +1 -0
- package/dist/grade/reading-syllables.js +58 -0
- package/dist/grade/reading-syllables.js.map +1 -0
- package/dist/grade/reading-tolerance.d.ts +72 -0
- package/dist/grade/reading-tolerance.d.ts.map +1 -0
- package/dist/grade/reading-tolerance.js +107 -0
- package/dist/grade/reading-tolerance.js.map +1 -0
- package/dist/grade/typed-reading.d.ts +28 -0
- package/dist/grade/typed-reading.d.ts.map +1 -0
- package/dist/grade/typed-reading.js +36 -0
- package/dist/grade/typed-reading.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/numerals/numeral-parse.d.ts +32 -0
- package/dist/numerals/numeral-parse.d.ts.map +1 -0
- package/dist/numerals/numeral-parse.js +44 -0
- package/dist/numerals/numeral-parse.js.map +1 -0
- package/dist/numerals/numeral-shapes.d.ts +89 -0
- package/dist/numerals/numeral-shapes.d.ts.map +1 -0
- package/dist/numerals/numeral-shapes.js +99 -0
- package/dist/numerals/numeral-shapes.js.map +1 -0
- package/dist/numerals/numerals.d.ts.map +1 -1
- package/dist/numerals/numerals.js +2 -36
- package/dist/numerals/numerals.js.map +1 -1
- package/dist/numerals/read-numeral.d.ts +76 -0
- package/dist/numerals/read-numeral.d.ts.map +1 -0
- package/dist/numerals/read-numeral.js +88 -0
- package/dist/numerals/read-numeral.js.map +1 -0
- package/dist/numerals/text.d.ts +3 -37
- package/dist/numerals/text.d.ts.map +1 -1
- package/dist/numerals/text.js +3 -254
- package/dist/numerals/text.js.map +1 -1
- package/dist/numerals/time.d.ts +34 -0
- package/dist/numerals/time.d.ts.map +1 -0
- package/dist/numerals/time.js +93 -0
- package/dist/numerals/time.js.map +1 -0
- package/dist/orthography/address-grouping.d.ts +34 -0
- package/dist/orthography/address-grouping.d.ts.map +1 -0
- package/dist/orthography/address-grouping.js +52 -0
- package/dist/orthography/address-grouping.js.map +1 -0
- package/dist/orthography/grouping.d.ts +3 -87
- package/dist/orthography/grouping.d.ts.map +1 -1
- package/dist/orthography/grouping.js +4 -270
- package/dist/orthography/grouping.js.map +1 -1
- package/dist/orthography/place-grouping.d.ts +39 -0
- package/dist/orthography/place-grouping.d.ts.map +1 -0
- package/dist/orthography/place-grouping.js +83 -0
- package/dist/orthography/place-grouping.js.map +1 -0
- package/dist/orthography/word-grouping.d.ts +48 -0
- package/dist/orthography/word-grouping.d.ts.map +1 -0
- package/dist/orthography/word-grouping.js +147 -0
- package/dist/orthography/word-grouping.js.map +1 -0
- package/dist/script/conversion-format.d.ts +22 -0
- package/dist/script/conversion-format.d.ts.map +1 -0
- package/dist/script/conversion-format.js +22 -0
- package/dist/script/conversion-format.js.map +1 -0
- package/dist/script/conversion-read.d.ts +9 -0
- package/dist/script/conversion-read.d.ts.map +1 -0
- package/dist/script/conversion-read.js +69 -0
- package/dist/script/conversion-read.js.map +1 -0
- package/dist/script/conversion-write.d.ts +14 -0
- package/dist/script/conversion-write.d.ts.map +1 -0
- package/dist/script/conversion-write.js +34 -0
- package/dist/script/conversion-write.js.map +1 -0
- package/dist/script/conversion.d.ts +10 -16
- package/dist/script/conversion.d.ts.map +1 -1
- package/dist/script/conversion.js +2 -115
- package/dist/script/conversion.js.map +1 -1
- package/dist/search/candidate-narrowing.d.ts +56 -0
- package/dist/search/candidate-narrowing.d.ts.map +1 -0
- package/dist/search/candidate-narrowing.js +55 -0
- package/dist/search/candidate-narrowing.js.map +1 -0
- package/dist/search/candidate-query.d.ts +25 -0
- package/dist/search/candidate-query.d.ts.map +1 -0
- package/dist/search/candidate-query.js +28 -0
- package/dist/search/candidate-query.js.map +1 -0
- package/dist/search/candidate-writings.d.ts +24 -0
- package/dist/search/candidate-writings.d.ts.map +1 -0
- package/dist/search/candidate-writings.js +114 -0
- package/dist/search/candidate-writings.js.map +1 -0
- package/dist/search/candidates.d.ts +7 -41
- package/dist/search/candidates.d.ts.map +1 -1
- package/dist/search/candidates.js +10 -164
- package/dist/search/candidates.js.map +1 -1
- package/dist/search/match-chunks.d.ts +19 -0
- package/dist/search/match-chunks.d.ts.map +1 -0
- package/dist/search/match-chunks.js +30 -0
- package/dist/search/match-chunks.js.map +1 -0
- package/dist/search/match-ranking.d.ts +39 -0
- package/dist/search/match-ranking.d.ts.map +1 -0
- package/dist/search/match-ranking.js +51 -0
- package/dist/search/match-ranking.js.map +1 -0
- package/dist/search/match-readings.d.ts +43 -0
- package/dist/search/match-readings.d.ts.map +1 -0
- package/dist/search/match-readings.js +83 -0
- package/dist/search/match-readings.js.map +1 -0
- package/dist/search/match-scoring.d.ts +146 -0
- package/dist/search/match-scoring.d.ts.map +1 -0
- package/dist/search/match-scoring.js +114 -0
- package/dist/search/match-scoring.js.map +1 -0
- package/dist/search/match-search.d.ts +28 -0
- package/dist/search/match-search.d.ts.map +1 -0
- package/dist/search/match-search.js +128 -0
- package/dist/search/match-search.js.map +1 -0
- package/dist/search/match.d.ts +5 -36
- package/dist/search/match.d.ts.map +1 -1
- package/dist/search/match.js +2 -379
- package/dist/search/match.js.map +1 -1
- package/dist/search/reverse-index-build.d.ts +30 -0
- package/dist/search/reverse-index-build.d.ts.map +1 -0
- package/dist/search/reverse-index-build.js +72 -0
- package/dist/search/reverse-index-build.js.map +1 -0
- package/dist/search/reverse-index-format.d.ts +60 -0
- package/dist/search/reverse-index-format.d.ts.map +1 -0
- package/dist/search/reverse-index-format.js +54 -0
- package/dist/search/reverse-index-format.js.map +1 -0
- package/dist/search/reverse-index-groups.d.ts +37 -0
- package/dist/search/reverse-index-groups.d.ts.map +1 -0
- package/dist/search/reverse-index-groups.js +71 -0
- package/dist/search/reverse-index-groups.js.map +1 -0
- package/dist/search/reverse-index-passes.d.ts +78 -0
- package/dist/search/reverse-index-passes.d.ts.map +1 -0
- package/dist/search/reverse-index-passes.js +59 -0
- package/dist/search/reverse-index-passes.js.map +1 -0
- package/dist/search/reverse-index-state.d.ts +36 -0
- package/dist/search/reverse-index-state.d.ts.map +1 -0
- package/dist/search/reverse-index-state.js +95 -0
- package/dist/search/reverse-index-state.js.map +1 -0
- package/dist/search/reverse-index.d.ts +8 -67
- package/dist/search/reverse-index.d.ts.map +1 -1
- package/dist/search/reverse-index.js +4 -255
- package/dist/search/reverse-index.js.map +1 -1
- package/dist/sources/unihan-readings.d.ts +58 -0
- package/dist/sources/unihan-readings.d.ts.map +1 -0
- package/dist/sources/unihan-readings.js +95 -0
- package/dist/sources/unihan-readings.js.map +1 -0
- package/dist/sources/unihan.d.ts +6 -9
- package/dist/sources/unihan.d.ts.map +1 -1
- package/dist/sources/unihan.js +2 -85
- package/dist/sources/unihan.js.map +1 -1
- package/dist/syllable/final-tables.d.ts +23 -0
- package/dist/syllable/final-tables.d.ts.map +1 -0
- package/dist/syllable/final-tables.js +50 -0
- package/dist/syllable/final-tables.js.map +1 -0
- package/dist/syllable/inventory.d.ts +8 -42
- package/dist/syllable/inventory.d.ts.map +1 -1
- package/dist/syllable/inventory.js +9 -918
- package/dist/syllable/inventory.js.map +1 -1
- package/dist/syllable/spellings.d.ts +40 -0
- package/dist/syllable/spellings.d.ts.map +1 -0
- package/dist/syllable/spellings.js +469 -0
- package/dist/syllable/spellings.js.map +1 -0
- package/dist/syllable/syllable-parts.d.ts +31 -0
- package/dist/syllable/syllable-parts.d.ts.map +1 -0
- package/dist/syllable/syllable-parts.js +105 -0
- package/dist/syllable/syllable-parts.js.map +1 -0
- package/dist/syllable/syllable.d.ts +1 -14
- package/dist/syllable/syllable.d.ts.map +1 -1
- package/dist/syllable/syllable.js +3 -144
- package/dist/syllable/syllable.js.map +1 -1
- package/dist/syllable/written-tones.d.ts +6 -0
- package/dist/syllable/written-tones.d.ts.map +1 -0
- package/dist/syllable/written-tones.js +453 -0
- package/dist/syllable/written-tones.js.map +1 -0
- package/dist/transcription/bopomofo-parse.d.ts +42 -0
- package/dist/transcription/bopomofo-parse.d.ts.map +1 -0
- package/dist/transcription/bopomofo-parse.js +92 -0
- package/dist/transcription/bopomofo-parse.js.map +1 -0
- package/dist/transcription/bopomofo-reverse.d.ts +31 -0
- package/dist/transcription/bopomofo-reverse.d.ts.map +1 -0
- package/dist/transcription/bopomofo-reverse.js +48 -0
- package/dist/transcription/bopomofo-reverse.js.map +1 -0
- package/dist/transcription/bopomofo-symbols.d.ts +36 -0
- package/dist/transcription/bopomofo-symbols.d.ts.map +1 -0
- package/dist/transcription/bopomofo-symbols.js +41 -0
- package/dist/transcription/bopomofo-symbols.js.map +1 -0
- package/dist/transcription/bopomofo-tables.d.ts +87 -0
- package/dist/transcription/bopomofo-tables.d.ts.map +1 -0
- package/dist/transcription/bopomofo-tables.js +180 -0
- package/dist/transcription/bopomofo-tables.js.map +1 -0
- package/dist/transcription/bopomofo.d.ts +14 -32
- package/dist/transcription/bopomofo.d.ts.map +1 -1
- package/dist/transcription/bopomofo.js +5 -343
- package/dist/transcription/bopomofo.js.map +1 -1
- package/dist/transcription/gwoyeu-first-second.d.ts +36 -0
- package/dist/transcription/gwoyeu-first-second.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-first-second.js +75 -0
- package/dist/transcription/gwoyeu-first-second.js.map +1 -0
- package/dist/transcription/gwoyeu-spelling.d.ts +38 -0
- package/dist/transcription/gwoyeu-spelling.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-spelling.js +124 -0
- package/dist/transcription/gwoyeu-spelling.js.map +1 -0
- package/dist/transcription/gwoyeu-tables.d.ts +93 -0
- package/dist/transcription/gwoyeu-tables.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-tables.js +205 -0
- package/dist/transcription/gwoyeu-tables.js.map +1 -0
- package/dist/transcription/gwoyeu-tonal-forms.d.ts +49 -0
- package/dist/transcription/gwoyeu-tonal-forms.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-tonal-forms.js +89 -0
- package/dist/transcription/gwoyeu-tonal-forms.js.map +1 -0
- package/dist/transcription/gwoyeu-vowels.d.ts +51 -0
- package/dist/transcription/gwoyeu-vowels.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-vowels.js +58 -0
- package/dist/transcription/gwoyeu-vowels.js.map +1 -0
- package/dist/transcription/gwoyeu.d.ts +1 -26
- package/dist/transcription/gwoyeu.d.ts.map +1 -1
- package/dist/transcription/gwoyeu.js +2 -540
- package/dist/transcription/gwoyeu.js.map +1 -1
- package/dist/transcription/ipa-symbols.d.ts +67 -0
- package/dist/transcription/ipa-symbols.d.ts.map +1 -0
- package/dist/transcription/ipa-symbols.js +135 -0
- package/dist/transcription/ipa-symbols.js.map +1 -0
- package/dist/transcription/ipa.d.ts +2 -10
- package/dist/transcription/ipa.d.ts.map +1 -1
- package/dist/transcription/ipa.js +2 -134
- package/dist/transcription/ipa.js.map +1 -1
- package/dist/transcription/wade-giles-index.d.ts +35 -0
- package/dist/transcription/wade-giles-index.d.ts.map +1 -0
- package/dist/transcription/wade-giles-index.js +110 -0
- package/dist/transcription/wade-giles-index.js.map +1 -0
- package/dist/transcription/wade-giles-parse.d.ts +36 -0
- package/dist/transcription/wade-giles-parse.d.ts.map +1 -0
- package/dist/transcription/wade-giles-parse.js +84 -0
- package/dist/transcription/wade-giles-parse.js.map +1 -0
- package/dist/transcription/wade-giles-spelling.d.ts +61 -0
- package/dist/transcription/wade-giles-spelling.d.ts.map +1 -0
- package/dist/transcription/wade-giles-spelling.js +107 -0
- package/dist/transcription/wade-giles-spelling.js.map +1 -0
- package/dist/transcription/wade-giles-syllable.d.ts +29 -0
- package/dist/transcription/wade-giles-syllable.d.ts.map +1 -0
- package/dist/transcription/wade-giles-syllable.js +90 -0
- package/dist/transcription/wade-giles-syllable.js.map +1 -0
- package/dist/transcription/wade-giles-tables.d.ts +80 -0
- package/dist/transcription/wade-giles-tables.d.ts.map +1 -0
- package/dist/transcription/wade-giles-tables.js +178 -0
- package/dist/transcription/wade-giles-tables.js.map +1 -0
- package/dist/transcription/wade-giles.d.ts +9 -60
- package/dist/transcription/wade-giles.d.ts.map +1 -1
- package/dist/transcription/wade-giles.js +6 -543
- package/dist/transcription/wade-giles.js.map +1 -1
- package/dist/transcription/yale-tables.d.ts +54 -0
- package/dist/transcription/yale-tables.d.ts.map +1 -0
- package/dist/transcription/yale-tables.js +125 -0
- package/dist/transcription/yale-tables.js.map +1 -0
- package/dist/transcription/yale.d.ts.map +1 -1
- package/dist/transcription/yale.js +1 -124
- package/dist/transcription/yale.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Counting how the two scripts pair up, character by character.
|
|
3
|
+
*
|
|
4
|
+
* Every entry the dictionary holds is one vote for a 简体 character reading a
|
|
5
|
+
* given way being written a given 繁體 way. This is the tally, and the rules
|
|
6
|
+
* for reading a conversion out of it.
|
|
7
|
+
*/
|
|
8
|
+
import { toCharacters } from "../script/characters.js";
|
|
9
|
+
import { conversionOf } from "./script-conversion.js";
|
|
10
|
+
export { conversionOf, rivalsOf } from "./script-conversion.js";
|
|
11
|
+
import { conversionKey, } from "../script/conversion.js";
|
|
12
|
+
/**
|
|
13
|
+
* The key standing for "at any reading".
|
|
14
|
+
*/
|
|
15
|
+
export const ANY = "";
|
|
16
|
+
/**
|
|
17
|
+
* How much of a reading's evidence must agree before it overrides the default.
|
|
18
|
+
*
|
|
19
|
+
* A reading that disagrees with the default only earns a line in the table if
|
|
20
|
+
* the sources are reasonably united about it. Below this it is noise — one
|
|
21
|
+
* mis-aligned entry, or a spelling nobody else uses — and storing it would
|
|
22
|
+
* make the conversion worse at the cost of bytes.
|
|
23
|
+
*/
|
|
24
|
+
export const READING_AGREEMENT = 0.8;
|
|
25
|
+
/**
|
|
26
|
+
* How much of a character's evidence a rival form needs to be worth reporting.
|
|
27
|
+
*
|
|
28
|
+
* This decides honesty rather than output: a form listed here makes the
|
|
29
|
+
* character *ambiguous*, so every conversion of it is reported as a guess
|
|
30
|
+
* unless a word or a reading settled it. Set too low and 和 is doubtful because
|
|
31
|
+
* Unihan knows 咊; set too high and 面 looks certain when only the word tells
|
|
32
|
+
* 面 from 麵. A twentieth of the evidence is enough to be a real spelling and
|
|
33
|
+
* far more than the one-off variants clear.
|
|
34
|
+
*/
|
|
35
|
+
export const RIVAL_SHARE = 0.05;
|
|
36
|
+
/**
|
|
37
|
+
* The pairings an entry attests, character by character.
|
|
38
|
+
*
|
|
39
|
+
* Entries whose two scripts are written with a different number of characters
|
|
40
|
+
* are skipped rather than aligned by guesswork, for the same reason
|
|
41
|
+
* `pairScripts` skips them: an invented alignment is evidence for a pairing
|
|
42
|
+
* nobody wrote.
|
|
43
|
+
*/
|
|
44
|
+
export function pairingsOf(entry) {
|
|
45
|
+
const hans = toCharacters(entry.hans);
|
|
46
|
+
const hant = toCharacters(entry.hant);
|
|
47
|
+
if (hans.length !== hant.length) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
const reading = entry.readings.cn;
|
|
51
|
+
// Only a reading with one syllable per character lines up; anything else
|
|
52
|
+
// (儿化 covering two, or a source disagreeing about length) is used as
|
|
53
|
+
// evidence for the pairing but not for any particular reading.
|
|
54
|
+
const isAligned = reading.length === hans.length;
|
|
55
|
+
return hans.map((character, at) => ({
|
|
56
|
+
hans: character,
|
|
57
|
+
/* c8 ignore next -- the two forms are known to be the same length */
|
|
58
|
+
hant: hant[at] ?? character,
|
|
59
|
+
key: isAligned ? conversionKey(reading[at]) : ANY,
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Tally one pairing under both its own reading and the any-reading key.
|
|
64
|
+
*/
|
|
65
|
+
export function tally(observed, from, to, key, weight) {
|
|
66
|
+
const byReading = observed.get(from) ?? new Map();
|
|
67
|
+
const keys = new Set([ANY, key]);
|
|
68
|
+
for (const at of keys) {
|
|
69
|
+
const counts = byReading.get(at) ?? new Map();
|
|
70
|
+
counts.set(to, (counts.get(to) ?? 0) + weight);
|
|
71
|
+
byReading.set(at, counts);
|
|
72
|
+
}
|
|
73
|
+
observed.set(from, byReading);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The commonest form in a tally, and what share of the evidence it holds.
|
|
77
|
+
*
|
|
78
|
+
* A tie prefers a form other than the character itself, and that matters more
|
|
79
|
+
* than it looks. Every character has an entry of its own where both scripts are
|
|
80
|
+
* the same string, so a character attested in exactly one cross-script word
|
|
81
|
+
* arrives here tied one-all against its own identity — 儁 against 㑺. The real
|
|
82
|
+
* pairing is the one somebody wrote down; the identity is an artefact of how
|
|
83
|
+
* the dictionary is keyed. `TraditionalTable` breaks the same tie the same way.
|
|
84
|
+
*/
|
|
85
|
+
export function commonest(from, counts) {
|
|
86
|
+
if (counts === undefined || counts.size === 0) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
let form = "";
|
|
90
|
+
let best = 0;
|
|
91
|
+
let total = 0;
|
|
92
|
+
for (const [candidate, count] of counts) {
|
|
93
|
+
total += count;
|
|
94
|
+
if (count > best ||
|
|
95
|
+
(count === best && form === from && candidate !== from)) {
|
|
96
|
+
form = candidate;
|
|
97
|
+
best = count;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return { form, share: best / total };
|
|
101
|
+
}
|
|
102
|
+
export function tableOf(observed) {
|
|
103
|
+
const table = new Map();
|
|
104
|
+
for (const [from, byReading] of observed) {
|
|
105
|
+
const conversion = conversionOf(from, byReading);
|
|
106
|
+
if (conversion !== undefined) {
|
|
107
|
+
table.set(from, conversion);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return table;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The readings a word is converted with, where they line up character by
|
|
114
|
+
* character.
|
|
115
|
+
*/
|
|
116
|
+
export function alignedReadings(entry) {
|
|
117
|
+
const characters = toCharacters(entry.hans).length;
|
|
118
|
+
return entry.readings.cn.length === characters ? entry.readings.cn : [];
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=script-pairings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-pairings.js","sourceRoot":"","sources":["../../src/dictionary/script-pairings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-tables.d.ts","sourceRoot":"","sources":["../../src/dictionary/script-tables.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"script-tables.d.ts","sourceRoot":"","sources":["../../src/dictionary/script-tables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQlD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,eAAe,EAAE,GAClC,YAAY,CA6Cd"}
|
|
@@ -1,170 +1,7 @@
|
|
|
1
1
|
import { toCharacters } from "../script/characters.js";
|
|
2
2
|
import { toCanonicalGlyphs } from "../script/glyphs.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
* The key standing for "at any reading".
|
|
6
|
-
*/
|
|
7
|
-
const ANY = "";
|
|
8
|
-
/**
|
|
9
|
-
* How much of a reading's evidence must agree before it overrides the default.
|
|
10
|
-
*
|
|
11
|
-
* A reading that disagrees with the default only earns a line in the table if
|
|
12
|
-
* the sources are reasonably united about it. Below this it is noise — one
|
|
13
|
-
* mis-aligned entry, or a spelling nobody else uses — and storing it would
|
|
14
|
-
* make the conversion worse at the cost of bytes.
|
|
15
|
-
*/
|
|
16
|
-
const READING_AGREEMENT = 0.8;
|
|
17
|
-
/**
|
|
18
|
-
* How much of a character's evidence a rival form needs to be worth reporting.
|
|
19
|
-
*
|
|
20
|
-
* This decides honesty rather than output: a form listed here makes the
|
|
21
|
-
* character *ambiguous*, so every conversion of it is reported as a guess
|
|
22
|
-
* unless a word or a reading settled it. Set too low and 和 is doubtful because
|
|
23
|
-
* Unihan knows 咊; set too high and 面 looks certain when only the word tells
|
|
24
|
-
* 面 from 麵. A twentieth of the evidence is enough to be a real spelling and
|
|
25
|
-
* far more than the one-off variants clear.
|
|
26
|
-
*/
|
|
27
|
-
const RIVAL_SHARE = 0.05;
|
|
28
|
-
/**
|
|
29
|
-
* The pairings an entry attests, character by character.
|
|
30
|
-
*
|
|
31
|
-
* Entries whose two scripts are written with a different number of characters
|
|
32
|
-
* are skipped rather than aligned by guesswork, for the same reason
|
|
33
|
-
* `pairScripts` skips them: an invented alignment is evidence for a pairing
|
|
34
|
-
* nobody wrote.
|
|
35
|
-
*/
|
|
36
|
-
function pairingsOf(entry) {
|
|
37
|
-
const hans = toCharacters(entry.hans);
|
|
38
|
-
const hant = toCharacters(entry.hant);
|
|
39
|
-
if (hans.length !== hant.length) {
|
|
40
|
-
return [];
|
|
41
|
-
}
|
|
42
|
-
const reading = entry.readings.cn;
|
|
43
|
-
// Only a reading with one syllable per character lines up; anything else
|
|
44
|
-
// (儿化 covering two, or a source disagreeing about length) is used as
|
|
45
|
-
// evidence for the pairing but not for any particular reading.
|
|
46
|
-
const isAligned = reading.length === hans.length;
|
|
47
|
-
return hans.map((character, at) => ({
|
|
48
|
-
hans: character,
|
|
49
|
-
/* c8 ignore next -- the two forms are known to be the same length */
|
|
50
|
-
hant: hant[at] ?? character,
|
|
51
|
-
key: isAligned ? conversionKey(reading[at]) : ANY,
|
|
52
|
-
}));
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Tally one pairing under both its own reading and the any-reading key.
|
|
56
|
-
*/
|
|
57
|
-
function tally(observed, from, to, key, weight) {
|
|
58
|
-
const byReading = observed.get(from) ?? new Map();
|
|
59
|
-
const keys = new Set([ANY, key]);
|
|
60
|
-
for (const at of keys) {
|
|
61
|
-
const counts = byReading.get(at) ?? new Map();
|
|
62
|
-
counts.set(to, (counts.get(to) ?? 0) + weight);
|
|
63
|
-
byReading.set(at, counts);
|
|
64
|
-
}
|
|
65
|
-
observed.set(from, byReading);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* The commonest form in a tally, and what share of the evidence it holds.
|
|
69
|
-
*
|
|
70
|
-
* A tie prefers a form other than the character itself, and that matters more
|
|
71
|
-
* than it looks. Every character has an entry of its own where both scripts are
|
|
72
|
-
* the same string, so a character attested in exactly one cross-script word
|
|
73
|
-
* arrives here tied one-all against its own identity — 儁 against 㑺. The real
|
|
74
|
-
* pairing is the one somebody wrote down; the identity is an artefact of how
|
|
75
|
-
* the dictionary is keyed. `TraditionalTable` breaks the same tie the same way.
|
|
76
|
-
*/
|
|
77
|
-
function commonest(from, counts) {
|
|
78
|
-
if (counts === undefined || counts.size === 0) {
|
|
79
|
-
return undefined;
|
|
80
|
-
}
|
|
81
|
-
let form = "";
|
|
82
|
-
let best = 0;
|
|
83
|
-
let total = 0;
|
|
84
|
-
for (const [candidate, count] of counts) {
|
|
85
|
-
total += count;
|
|
86
|
-
if (count > best ||
|
|
87
|
-
(count === best && form === from && candidate !== from)) {
|
|
88
|
-
form = candidate;
|
|
89
|
-
best = count;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return { form, share: best / total };
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Reduce one character's observations to a default and its exceptions.
|
|
96
|
-
*
|
|
97
|
-
* A character with only one observed form needs no entry at all when that form
|
|
98
|
-
* is itself — simplification changed a minority of characters, and storing the
|
|
99
|
-
* other 40,000 as identities would be most of the file.
|
|
100
|
-
*/
|
|
101
|
-
function conversionOf(from, byReading) {
|
|
102
|
-
const overall = commonest(from, byReading.get(ANY));
|
|
103
|
-
if (overall === undefined) {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
const exceptions = new Map();
|
|
107
|
-
for (const [key, counts] of byReading) {
|
|
108
|
-
const at = commonest(from, counts);
|
|
109
|
-
if (key !== ANY &&
|
|
110
|
-
at !== undefined &&
|
|
111
|
-
at.form !== overall.form &&
|
|
112
|
-
at.share >= READING_AGREEMENT) {
|
|
113
|
-
exceptions.set(key, at.form);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const also = rivalsOf(byReading.get(ANY), overall.form, exceptions);
|
|
117
|
-
if (overall.form === from && exceptions.size === 0 && also.length === 0) {
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
to: overall.form,
|
|
122
|
-
...(exceptions.size > 0 && { byReading: exceptions }),
|
|
123
|
-
...(also.length > 0 && { also }),
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* The forms a character takes often enough to make it genuinely ambiguous.
|
|
128
|
-
*
|
|
129
|
-
* Forms a reading already accounts for are left out: those are settled evidence
|
|
130
|
-
* rather than open questions, and repeating them here would report 发 as a
|
|
131
|
-
* guess in 头发 when the reading decided it.
|
|
132
|
-
*/
|
|
133
|
-
function rivalsOf(counts, chosen, exceptions) {
|
|
134
|
-
if (counts === undefined) {
|
|
135
|
-
return [];
|
|
136
|
-
}
|
|
137
|
-
let total = 0;
|
|
138
|
-
for (const count of counts.values()) {
|
|
139
|
-
total += count;
|
|
140
|
-
}
|
|
141
|
-
const settled = new Set([chosen, ...exceptions.values()]);
|
|
142
|
-
return [...counts]
|
|
143
|
-
.filter(([form, count]) => !settled.has(form) && count / total >= RIVAL_SHARE)
|
|
144
|
-
.toSorted(([, left], [, right]) => right - left)
|
|
145
|
-
.map(([form]) => form);
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Reduce every character's observations into a table.
|
|
149
|
-
*/
|
|
150
|
-
function tableOf(observed) {
|
|
151
|
-
const table = new Map();
|
|
152
|
-
for (const [from, byReading] of observed) {
|
|
153
|
-
const conversion = conversionOf(from, byReading);
|
|
154
|
-
if (conversion !== undefined) {
|
|
155
|
-
table.set(from, conversion);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return table;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* The readings a word is converted with, where they line up character by
|
|
162
|
-
* character.
|
|
163
|
-
*/
|
|
164
|
-
function alignedReadings(entry) {
|
|
165
|
-
const characters = toCharacters(entry.hans).length;
|
|
166
|
-
return entry.readings.cn.length === characters ? entry.readings.cn : [];
|
|
167
|
-
}
|
|
3
|
+
import { convertCharacters } from "../script/conversion.js";
|
|
4
|
+
import { alignedReadings, pairingsOf, tableOf, tally, } from "./script-pairings.js";
|
|
168
5
|
/**
|
|
169
6
|
* Build the script conversion tables from the merged dictionary.
|
|
170
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-tables.js","sourceRoot":"","sources":["../../src/dictionary/script-tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"script-tables.js","sourceRoot":"","sources":["../../src/dictionary/script-tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,yBAAyB,CAAC;AAE/E,OAAO,EACL,eAAe,EAEf,UAAU,EACV,OAAO,EACP,KAAK,GACN,MAAM,sBAAsB,CAAC;AAC9B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAmC;IAEnC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAqB,CAAC;IAExD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEjD,4EAA4E;IAC5E,+CAA+C;IAC/C,EAAE;IACF,4EAA4E;IAC5E,4EAA4E;IAC5E,8EAA8E;IAC9E,2EAA2E;IAC3E,6EAA6E;IAC7E,oEAAoE;IACpE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1E,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;YACzE,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa;QACb,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,GAAG,oBAAoB,CAAC,OAAO,CAAC;KACjC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAS,oBAAoB,CAAC,OAAmC;IAI/D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,wEAAwE;QACxE,oEAAoE;QACpE,0EAA0E;QAC1E,uEAAuE;QACvE,2BAA2B;QAC3B,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAC9D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,CACxD,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QACD,MAAM,cAAc,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;QACnD,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5C,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACtC,CAAC;QACF,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CedictEntry } from "../sources/cedict.js";
|
|
2
|
+
import type { UnihanReadings } from "../sources/unihan.js";
|
|
3
|
+
import type { Syllable } from "../syllable/syllable.js";
|
|
4
|
+
/**
|
|
5
|
+
* Settle it for one word, or undefined where no source states one.
|
|
6
|
+
*/
|
|
7
|
+
export declare function taiwanReadingOf(word: string, senses: readonly CedictEntry[], senseReadings: readonly (readonly Syllable[])[], reading: readonly Syllable[], unihan: UnihanReadings | undefined): readonly Syllable[] | undefined;
|
|
8
|
+
//# sourceMappingURL=taiwan-reading.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taiwan-reading.d.ts","sourceRoot":"","sources":["../../src/dictionary/taiwan-reading.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAMxD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,aAAa,EAAE,SAAS,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,EAC/C,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,MAAM,EAAE,cAAc,GAAG,SAAS,GACjC,SAAS,QAAQ,EAAE,GAAG,SAAS,CAsBjC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 國語 reading an entry carries, where a source states one.
|
|
3
|
+
*
|
|
4
|
+
* Both sources hedge it. CC-CEDICT hangs `Taiwan pr.` on one sense of a
|
|
5
|
+
* headword and the others know nothing about it, and a note can sit on the
|
|
6
|
+
* right sense and still be about that sense rather than the character. What
|
|
7
|
+
* survives both tests, and is not simply another 普通话 sense of the word, is
|
|
8
|
+
* the delta.
|
|
9
|
+
*/
|
|
10
|
+
import { isSingleCharacter } from "../script/characters.js";
|
|
11
|
+
import { isOwnSense, isSenseScopedNote } from "./cedict-senses.js";
|
|
12
|
+
import { characterSyllable } from "./character-defaults.js";
|
|
13
|
+
import { isSameReading } from "./entry.js";
|
|
14
|
+
import { readDictionaryReading } from "./reading.js";
|
|
15
|
+
/**
|
|
16
|
+
* Settle it for one word, or undefined where no source states one.
|
|
17
|
+
*/
|
|
18
|
+
export function taiwanReadingOf(word, senses, senseReadings, reading, unihan) {
|
|
19
|
+
const taiwanSense = senses.find((entry) => entry.taiwanReadings !== undefined);
|
|
20
|
+
const taiwanTokens = isSenseScopedNote(word, taiwanSense)
|
|
21
|
+
? undefined
|
|
22
|
+
: taiwanSense?.taiwanReadings;
|
|
23
|
+
const unihanTaiwan = unihan?.taiwanReading;
|
|
24
|
+
let taiwan;
|
|
25
|
+
if (taiwanTokens !== undefined) {
|
|
26
|
+
taiwan = readDictionaryReading(word, taiwanTokens);
|
|
27
|
+
}
|
|
28
|
+
else if (isSingleCharacter(word) && unihanTaiwan !== undefined) {
|
|
29
|
+
const syllable = characterSyllable(word, unihanTaiwan);
|
|
30
|
+
taiwan = syllable === undefined ? undefined : [syllable];
|
|
31
|
+
}
|
|
32
|
+
if (taiwan !== undefined &&
|
|
33
|
+
(isSameReading(taiwan, reading) || isOwnSense(taiwan, senseReadings))) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
return taiwan;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=taiwan-reading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taiwan-reading.js","sourceRoot":"","sources":["../../src/dictionary/taiwan-reading.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAA8B,EAC9B,aAA+C,EAC/C,OAA4B,EAC5B,MAAkC;IAElC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAC9C,CAAC;IACF,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC;QACvD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC;IAChC,MAAM,YAAY,GAAG,MAAM,EAAE,aAAa,CAAC;IAC3C,IAAI,MAAuC,CAAC;IAC5C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACvD,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IACD,IACE,MAAM,KAAK,SAAS;QACpB,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EACrE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tone-invariants.d.ts","sourceRoot":"","sources":["../../src/dictionary/tone-invariants.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAkB7E,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAsDpD,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What must hold of the neutral tone across the dictionary.
|
|
3
|
+
*
|
|
4
|
+
* The 轻声 list and the 语气词 are the two places a source refresh could take a
|
|
5
|
+
* neutral tone away without any single word looking wrong.
|
|
6
|
+
*/
|
|
7
|
+
import { characterCount } from "../script/characters.js";
|
|
8
|
+
import { NEUTRAL_TONE } from "../tone/tone.js";
|
|
9
|
+
import { NEUTRAL_SENSE_WORDS } from "./neutral-senses.js";
|
|
10
|
+
/**
|
|
11
|
+
* jieba's tag for a 语气词, which is what 吧, 呢 and 吗 are.
|
|
12
|
+
*/
|
|
13
|
+
const PARTICLE_TAG = "y";
|
|
14
|
+
/**
|
|
15
|
+
* The 语气词 the sources themselves do not lead with a 轻声 for.
|
|
16
|
+
*
|
|
17
|
+
* The rule below is that the words a character appears in must not take the
|
|
18
|
+
* default away from its 轻声, not that a 语气词 is always neutral. For these
|
|
19
|
+
* three the reading that leads was never the neutral one and no word put it
|
|
20
|
+
* there: `kMandarin` names 呃 `è` and 哩 `lī`, and `kHanyuPinlu` ranks 呵 as
|
|
21
|
+
* `ā(392)` over `hē(64)`, all of them counting the bare character.
|
|
22
|
+
*/
|
|
23
|
+
const FULL_TONE_PARTICLES = new Set(["呃", "呵", "哩"]);
|
|
24
|
+
export const TONE_INVARIANTS = [
|
|
25
|
+
// kHanyuPinlu writes 西 as `xi(902) xī(738)`, and the 902 are 东西: a 轻声 the
|
|
26
|
+
// field counted only inside words is not the bare character's reading. 吗 is
|
|
27
|
+
// the control — CC-CEDICT calls it a question particle in its own right, and
|
|
28
|
+
// a particle's whole use *is* the bare character.
|
|
29
|
+
{
|
|
30
|
+
// The table names words and lets CC-CEDICT supply the reading, so the way
|
|
31
|
+
// it can fail silently is a source refresh dropping or retoning the 轻声
|
|
32
|
+
// sense — after which the word would quietly go back to the full-tone
|
|
33
|
+
// homograph the list exists to get away from.
|
|
34
|
+
description: "every word on the 轻声 sense list reads with one",
|
|
35
|
+
check: (dictionary) => {
|
|
36
|
+
const wrong = NEUTRAL_SENSE_WORDS.filter((listed) => !(dictionary.get(listed.word)?.readings.cn ?? []).some((syllable) => syllable.tone === NEUTRAL_TONE)).map((listed) => `${listed.word} ${dictionary.reading(listed.word) ?? "(missing)"}`);
|
|
37
|
+
return wrong.length === 0
|
|
38
|
+
? undefined
|
|
39
|
+
: `listed for their 轻声 sense and not reading one: ${wrong.join(", ")}`;
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
// The corpus mass ranking the character defaults counts a character only
|
|
44
|
+
// inside the words the dictionary holds, and a 语气词 is never inside one:
|
|
45
|
+
// every 吧 it can reach is 酒吧, 网吧 or 吧台, and the only 呗 is 梵呗.
|
|
46
|
+
// Left to it the particle takes the reading of the noun, which is what 吧
|
|
47
|
+
// `bā` and 呗 `bài` were. A 语气词 is the one part of speech whose whole
|
|
48
|
+
// use is the bare character, so its 轻声 is what words cannot vote on.
|
|
49
|
+
description: "no 语气词 ranks a full tone above its own 轻声",
|
|
50
|
+
check: (dictionary) => {
|
|
51
|
+
const wrong = dictionary.entries
|
|
52
|
+
.filter((entry) => entry.partOfSpeech === PARTICLE_TAG &&
|
|
53
|
+
characterCount(entry.hans) === 1 &&
|
|
54
|
+
!FULL_TONE_PARTICLES.has(entry.hans) &&
|
|
55
|
+
entry.readings.cn[0]?.tone !== NEUTRAL_TONE &&
|
|
56
|
+
(entry.alternates ?? []).some((reading) => reading[0]?.tone === NEUTRAL_TONE))
|
|
57
|
+
.map((entry) => `${entry.hans} ${dictionary.reading(entry.hans) ?? ""}`);
|
|
58
|
+
return wrong.length === 0
|
|
59
|
+
? undefined
|
|
60
|
+
: `语气词 reading a full tone over a 轻声 they also have: ${wrong.join(", ")}`;
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
//# sourceMappingURL=tone-invariants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tone-invariants.js","sourceRoot":"","sources":["../../src/dictionary/tone-invariants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;GAEG;AACH,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,eAAe,GAA8B;IACxD,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,kDAAkD;IAClD;QACE,0EAA0E;QAC1E,uEAAuE;QACvE,sEAAsE;QACtE,8CAA8C;QAC9C,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,CAAC,UAA2B,EAAsB,EAAE;YACzD,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CACtC,CAAC,MAAM,EAAE,EAAE,CACT,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACpD,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAC7C,CACJ,CAAC,GAAG,CACH,CAAC,MAAM,EAAE,EAAE,CACT,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CACrE,CAAC;YACF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;gBACvB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,kDAAkD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,CAAC;KACF;IACD;QACE,yEAAyE;QACzE,wEAAwE;QACxE,8DAA8D;QAC9D,yEAAyE;QACzE,qEAAqE;QACrE,qEAAqE;QACrE,WAAW,EAAE,2CAA2C;QACxD,KAAK,EAAE,CAAC,UAA2B,EAAsB,EAAE;YACzD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO;iBAC7B,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,YAAY,KAAK,YAAY;gBACnC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChC,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBACpC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,YAAY;gBAC3C,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAC3B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,YAAY,CAC/C,CACJ;iBACA,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CACnE,CAAC;YACJ,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;gBACvB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,qDAAqD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,CAAC;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CedictEntry } from "../sources/cedict.js";
|
|
2
|
+
import type { Syllable } from "../syllable/syllable.js";
|
|
3
|
+
import type { ReadCharacters } from "./reading.js";
|
|
4
|
+
import type { TraditionalTable } from "./traditional.js";
|
|
5
|
+
/**
|
|
6
|
+
* The 繁體 form of one entry, and what the merge counts about it.
|
|
7
|
+
*/
|
|
8
|
+
export interface TraditionalForm {
|
|
9
|
+
/** The CC-CEDICT senses matching the reading, most useful first. */
|
|
10
|
+
readonly senses: readonly CedictEntry[];
|
|
11
|
+
readonly hant: string;
|
|
12
|
+
/** Other 繁體 spellings a source writes of the same word. */
|
|
13
|
+
readonly hantVariants: readonly string[];
|
|
14
|
+
/** Whether `hant` was derived rather than taken from CC-CEDICT. */
|
|
15
|
+
readonly isDerived: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Settle all of it for one word.
|
|
19
|
+
*/
|
|
20
|
+
export declare function traditionalFormOf(word: string, cedictEntries: readonly CedictEntry[], reading: readonly Syllable[], aligned: readonly ReadCharacters[] | undefined, traditional: TraditionalTable): TraditionalForm;
|
|
21
|
+
//# sourceMappingURL=traditional-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traditional-form.d.ts","sourceRoot":"","sources":["../../src/dictionary/traditional-form.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,EAC9C,WAAW,EAAE,gBAAgB,GAC5B,eAAe,CA6CjB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which 繁體 spelling an entry takes, and which others reach it.
|
|
3
|
+
*
|
|
4
|
+
* CC-CEDICT decides wherever it has the word, since it pairs the two scripts
|
|
5
|
+
* itself; the derivation only answers where it is silent. Both are settled
|
|
6
|
+
* against the sense matching the reading, because a word read two ways can be
|
|
7
|
+
* written two ways — 万 is 萬 when read wàn and stays 万 when read mò.
|
|
8
|
+
*/
|
|
9
|
+
import { toCanonicalGlyphs } from "../script/glyphs.js";
|
|
10
|
+
import { sensesForReading } from "./reading-agreement.js";
|
|
11
|
+
/**
|
|
12
|
+
* Settle all of it for one word.
|
|
13
|
+
*/
|
|
14
|
+
export function traditionalFormOf(word, cedictEntries, reading, aligned, traditional) {
|
|
15
|
+
let isDerived = false;
|
|
16
|
+
// Which sense matters: 万 is 萬 when read wàn but stays 万 when read mò, and
|
|
17
|
+
// CC-CEDICT carries both as separate entries. Taking whichever came first
|
|
18
|
+
// in the file would pair the chosen reading with another sense's script.
|
|
19
|
+
const senses = sensesForReading(word, cedictEntries, reading);
|
|
20
|
+
const sense = senses[0];
|
|
21
|
+
let hant;
|
|
22
|
+
if (sense === undefined) {
|
|
23
|
+
// Canonicalised because the derivation settles each word against Unihan's
|
|
24
|
+
// variant lists with no single standard behind it, so 里 derives as 裏
|
|
25
|
+
// where the corpus overwhelmingly writes 裡. Both are the same character
|
|
26
|
+
// with the same reading, and a key written in the form the lookup path
|
|
27
|
+
// normalises *away from* can never be found — see the note below.
|
|
28
|
+
hant = toCanonicalGlyphs(traditional.convert(aligned ?? []));
|
|
29
|
+
isDerived = hant !== word;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
hant = toCanonicalGlyphs(sense.traditional);
|
|
33
|
+
}
|
|
34
|
+
// Other spellings of the same word, so that a 繁體 reader of either finds
|
|
35
|
+
// it. Only what a source writes out: composing spellings from per-character
|
|
36
|
+
// variants instead would add 229,482 keys to the full tier, almost all of
|
|
37
|
+
// them forms nobody writes — 方麵 for 方面, 公裡 for 公里 — because the
|
|
38
|
+
// reading that picks the right variant for one word does not generalise to
|
|
39
|
+
// every word the character appears in.
|
|
40
|
+
//
|
|
41
|
+
// Canonicalised for the same reason `hant` is, and deduplicated after:
|
|
42
|
+
// 裏面 and 裡面 are one spelling once the glyph forms are folded, and
|
|
43
|
+
// keying both would claim a variant that does not exist.
|
|
44
|
+
//
|
|
45
|
+
// The 简体 headword's own canonical spelling joins them where it differs,
|
|
46
|
+
// and that is not a nicety: the lookup path normalises 繁體 glyph forms
|
|
47
|
+
// before it searches, so a key written in a form it normalises *away from*
|
|
48
|
+
// can never be found. The phrase corpus carries a few hundred headwords
|
|
49
|
+
// spelled with 峯, 藴 or 枱 — 鹫峯寺, 义藴, 写字枱 — and without this they
|
|
50
|
+
// are entries nothing can reach.
|
|
51
|
+
const hantVariants = [
|
|
52
|
+
...new Set([
|
|
53
|
+
...senses.map((other) => toCanonicalGlyphs(other.traditional)),
|
|
54
|
+
toCanonicalGlyphs(word),
|
|
55
|
+
]),
|
|
56
|
+
].filter((form) => form !== hant && form !== word);
|
|
57
|
+
return { senses, hant, hantVariants, isDerived };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=traditional-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traditional-form.js","sourceRoot":"","sources":["../../src/dictionary/traditional-form.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAiB1D;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,aAAqC,EACrC,OAA4B,EAC5B,OAA8C,EAC9C,WAA6B;IAE7B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,IAAY,CAAC;IACjB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,0EAA0E;QAC1E,qEAAqE;QACrE,wEAAwE;QACxE,uEAAuE;QACvE,kEAAkE;QAClE,IAAI,GAAG,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7D,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,wEAAwE;IACxE,4EAA4E;IAC5E,0EAA0E;IAC1E,gEAAgE;IAChE,2EAA2E;IAC3E,uCAAuC;IACvC,EAAE;IACF,uEAAuE;IACvE,kEAAkE;IAClE,yDAAyD;IACzD,EAAE;IACF,wEAAwE;IACxE,sEAAsE;IACtE,2EAA2E;IAC3E,wEAAwE;IACxE,gEAAgE;IAChE,iCAAiC;IACjC,MAAM,YAAY,GAAG;QACnB,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9D,iBAAiB,CAAC,IAAI,CAAC;SACxB,CAAC;KACH,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;IAEnD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Choosing between the 繁體 variants Unihan lists, by how a character is read.
|
|
3
|
+
*
|
|
4
|
+
* The second of the two sources of evidence `TraditionalTable` weighs, and the
|
|
5
|
+
* only one that is inference rather than observation. Kept apart because it is
|
|
6
|
+
* a different question from the pairings above it: not "how has this character
|
|
7
|
+
* been converted before" but "which of these candidates is read this way".
|
|
8
|
+
*/
|
|
9
|
+
import type { UnihanReadings } from "../sources/unihan.js";
|
|
10
|
+
import { type Syllable } from "../syllable/syllable.js";
|
|
11
|
+
/**
|
|
12
|
+
* Unihan's reading lists, ranked against a syllable.
|
|
13
|
+
*/
|
|
14
|
+
export declare class VariantRanking {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(unihanReadings: ReadonlyMap<string, UnihanReadings>);
|
|
17
|
+
/**
|
|
18
|
+
* The best-ranked candidate, or the character itself where there are none.
|
|
19
|
+
*/
|
|
20
|
+
best(candidates: readonly string[], hans: string, syllable: Syllable | undefined): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=traditional-ranking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traditional-ranking.d.ts","sourceRoot":"","sources":["../../src/dictionary/traditional-ranking.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;GAEG;AACH,qBAAa,cAAc;;IAIzB,YAAY,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAE9D;IAmDD;;OAEG;IACH,IAAI,CACF,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAC7B,MAAM,CAaR;CACF"}
|