@kensio/pinyinjs 1.7.4 → 1.7.5
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/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/confidence.d.ts.map +1 -1
- package/dist/decode/confidence.js +3 -118
- 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 +66 -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/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 +140 -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 +58 -0
- package/dist/decode/jiao-rule.d.ts.map +1 -0
- package/dist/decode/jiao-rule.js +76 -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 +82 -0
- package/dist/decode/lattice-types.d.ts.map +1 -0
- package/dist/decode/lattice-types.js +44 -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 +31 -0
- package/dist/decode/polyphone-rules.d.ts.map +1 -0
- package/dist/decode/polyphone-rules.js +159 -0
- package/dist/decode/polyphone-rules.js.map +1 -0
- package/dist/decode/reading-rules.d.ts +2 -97
- package/dist/decode/reading-rules.d.ts.map +1 -1
- package/dist/decode/reading-rules.js +4 -365
- 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/sandhi-tones.d.ts +69 -0
- package/dist/decode/sandhi-tones.d.ts.map +1 -0
- package/dist/decode/sandhi-tones.js +88 -0
- package/dist/decode/sandhi-tones.js.map +1 -0
- package/dist/decode/sandhi.d.ts +1 -1
- package/dist/decode/sandhi.d.ts.map +1 -1
- package/dist/decode/sandhi.js +1 -81
- 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 +28 -0
- package/dist/decode/write-run.d.ts.map +1 -0
- package/dist/decode/write-run.js +77 -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 +80 -0
- package/dist/dictionary/cedict-senses.d.ts.map +1 -0
- package/dist/dictionary/cedict-senses.js +114 -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/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 +121 -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-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 +30 -713
- 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 +38 -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/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 +1 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Saying a clock time out loud.
|
|
3
|
+
*
|
|
4
|
+
* A time is not read the way the same digits would be anywhere else: 6:30 is
|
|
5
|
+
* 六点三十分 rather than the digits in order, the 分 is written even where a
|
|
6
|
+
* speaker would drop it, and the hour takes 两 where a bare 2 takes 二.
|
|
7
|
+
*/
|
|
8
|
+
import { numeralHanzi, readNumeralHanzi, } from "./numerals.js";
|
|
9
|
+
import { HOURS_IN_A_DAY, MINUTES_IN_AN_HOUR, TIME } from "./numeral-shapes.js";
|
|
10
|
+
/**
|
|
11
|
+
* The minute below which the zero is said: 6:05 is 六点零五分.
|
|
12
|
+
*/
|
|
13
|
+
const SPOKEN_ZERO_BELOW = 10;
|
|
14
|
+
/**
|
|
15
|
+
* The hour that is 两 rather than 二.
|
|
16
|
+
*
|
|
17
|
+
* Two o'clock is 两点 and never 二点, which is the same 两 that counts things —
|
|
18
|
+
* an hour is a quantity of hours. It is the only hour this applies to, since
|
|
19
|
+
* 12:00 is 十二点 with the 二 inside a larger number.
|
|
20
|
+
*/
|
|
21
|
+
const LIANG_HOUR = 2;
|
|
22
|
+
/**
|
|
23
|
+
* A time written out in 汉字: 6:30 is 六点三十分.
|
|
24
|
+
*
|
|
25
|
+
* The 分 is written even though a speaker often drops it, because without it
|
|
26
|
+
* 六点三十 is the decimal 6.30 said aloud — the same 点 does both jobs, and the
|
|
27
|
+
* 分 is the only thing that separates them. On the hour it is left off
|
|
28
|
+
* instead, since 六点零零分 is not something anybody says.
|
|
29
|
+
*/
|
|
30
|
+
export function timeHanzi(hours, minutes, options) {
|
|
31
|
+
const counted = { ...options, style: "cardinal" };
|
|
32
|
+
const hour = hours === LIANG_HOUR ? "两" : numeralHanzi(hours, counted);
|
|
33
|
+
const minute = minutes === 0 ? "" : numeralHanzi(minutes, counted);
|
|
34
|
+
/* c8 ignore next 3 -- an hour is 0 to 23 and a minute 0 to 59, and the
|
|
35
|
+
cardinal reader counts every one of them */
|
|
36
|
+
if (hour === undefined || minute === undefined) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
if (minute === "") {
|
|
40
|
+
return `${hour}点`;
|
|
41
|
+
}
|
|
42
|
+
const zero = minutes < SPOKEN_ZERO_BELOW ? "零" : "";
|
|
43
|
+
return `${hour}点${zero}${minute}分`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Where a written-out time breaks into words.
|
|
47
|
+
*
|
|
48
|
+
* The hour, the 点, the minutes and the 分, which is how the same time reads
|
|
49
|
+
* when it is written 6点30分 in the first place.
|
|
50
|
+
*/
|
|
51
|
+
export function timeWords(hanzi) {
|
|
52
|
+
const [hour = "", rest = ""] = hanzi.split("点");
|
|
53
|
+
const minutes = rest.replace("分", "");
|
|
54
|
+
return minutes === ""
|
|
55
|
+
? [hour.length, 1]
|
|
56
|
+
: [hour.length, 1, minutes.length, 1];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read a digit run as a time, where that is what it is.
|
|
60
|
+
*
|
|
61
|
+
* Tried before the identifier rule, which would otherwise leave the whole
|
|
62
|
+
* thing alone: a colon between digits is exactly the mark that makes 6:30 a
|
|
63
|
+
* time rather than two numbers.
|
|
64
|
+
*/
|
|
65
|
+
export function readTime(text, from, options) {
|
|
66
|
+
TIME.lastIndex = from;
|
|
67
|
+
const found = TIME.exec(text);
|
|
68
|
+
const written = found?.[1];
|
|
69
|
+
const minutes = found?.[2];
|
|
70
|
+
if (found === null || written === undefined || minutes === undefined) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const hourValue = Number(written);
|
|
74
|
+
const minuteValue = Number(minutes);
|
|
75
|
+
if (hourValue >= HOURS_IN_A_DAY || minuteValue >= MINUTES_IN_AN_HOUR) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const hanzi = timeHanzi(hourValue, minuteValue, options);
|
|
79
|
+
const reading = hanzi === undefined ? undefined : readNumeralHanzi(hanzi, options);
|
|
80
|
+
/* c8 ignore next 3 -- the hanzi is built out of the same table that reads it
|
|
81
|
+
back, so it reads whenever it was built at all */
|
|
82
|
+
if (hanzi === undefined || reading === undefined) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
text: found[0],
|
|
87
|
+
reading,
|
|
88
|
+
hanzi,
|
|
89
|
+
style: "cardinal",
|
|
90
|
+
words: timeWords(hanzi),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/numerals/time.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,YAAY,EAEZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG/E;;GAEG;AACH,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CACvB,KAAa,EACb,OAAe,EACf,OAAuB;IAEvB,MAAM,OAAO,GAAmB,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAClE,MAAM,IAAI,GAAG,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnE;kDAC8C;IAC9C,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,OAAO,GAAG,IAAI,GAAG,CAAC;IACpB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO,GAAG,IAAI,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,OAAO,KAAK,EAAE;QACnB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CACtB,IAAY,EACZ,IAAY,EACZ,OAAuB;IAEvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,SAAS,IAAI,cAAc,IAAI,WAAW,IAAI,kBAAkB,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,OAAO,GACX,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrE;wDACoD;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,OAAO;QACP,KAAK;QACL,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { GroupingRule } from "./rule.js";
|
|
2
|
+
/**
|
|
3
|
+
* The 称呼语 GB/T 16159 writes in front of a surname.
|
|
4
|
+
*
|
|
5
|
+
* 老 and 小 only. 大 is written the same way in 大李, but it is also an ordinary
|
|
6
|
+
* adjective in front of anything at all, and it is the one that goes wrong:
|
|
7
|
+
* over 88,866 lines the three of them fire 49 times together and both clear
|
|
8
|
+
* mistakes are 大 — 泡大池 is a big pool and 那头大熊 is a big bear. Dropping it
|
|
9
|
+
* leaves 38 firings and every one visible in the sample is a real form of
|
|
10
|
+
* address.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ADDRESS_PREFIXES: Set<string>;
|
|
13
|
+
/**
|
|
14
|
+
* 老王 is `Lǎo Wáng`: the prefix takes a capital of its own.
|
|
15
|
+
*
|
|
16
|
+
* The words are already written apart — nothing here moves a boundary — and
|
|
17
|
+
* what was missing is only the capital, so this marks the prefix a proper noun
|
|
18
|
+
* and lets the writer do what it already does with one. That is why it is a
|
|
19
|
+
* grouping rule despite grouping nothing: `isProperNoun` is the flag the
|
|
20
|
+
* capital hangs off, and there is one place it is set.
|
|
21
|
+
*
|
|
22
|
+
* The surname is the evidence. A one-character word the dictionary marks a
|
|
23
|
+
* proper noun is what 老 and 小 attach to, and CC-CEDICT's capitalisation has
|
|
24
|
+
* already vetoed the tags that would otherwise let 小 in front of anything —
|
|
25
|
+
* see "jieba's 专名 tags need a second opinion" in ROADMAP.md.
|
|
26
|
+
*/
|
|
27
|
+
export declare const ADDRESS_PREFIX: GroupingRule;
|
|
28
|
+
/**
|
|
29
|
+
* jieba's tags for the two kinds of proper noun 5.1 divides.
|
|
30
|
+
*
|
|
31
|
+
* A person and an organisation. Places are `PLACE_GENERICS`' business, and `nz`
|
|
32
|
+
* is left out — both are measured out in `docs/orthography/`.
|
|
33
|
+
*/
|
|
34
|
+
//# sourceMappingURL=address-grouping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address-grouping.d.ts","sourceRoot":"","sources":["../../src/orthography/address-grouping.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,aAAsB,CAAC;AAEpD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,EAAE,YAgB5B,CAAC;AAEF;;;;;GAKG"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Joining 老 and 小 to the name they address.
|
|
3
|
+
*
|
|
4
|
+
* 老王 is one word and 老 王 is two, and only the prefix says which.
|
|
5
|
+
*/
|
|
6
|
+
import { characterCount } from "../script/characters.js";
|
|
7
|
+
/**
|
|
8
|
+
* The 称呼语 GB/T 16159 writes in front of a surname.
|
|
9
|
+
*
|
|
10
|
+
* 老 and 小 only. 大 is written the same way in 大李, but it is also an ordinary
|
|
11
|
+
* adjective in front of anything at all, and it is the one that goes wrong:
|
|
12
|
+
* over 88,866 lines the three of them fire 49 times together and both clear
|
|
13
|
+
* mistakes are 大 — 泡大池 is a big pool and 那头大熊 is a big bear. Dropping it
|
|
14
|
+
* leaves 38 firings and every one visible in the sample is a real form of
|
|
15
|
+
* address.
|
|
16
|
+
*/
|
|
17
|
+
export const ADDRESS_PREFIXES = new Set(["老", "小"]);
|
|
18
|
+
/**
|
|
19
|
+
* 老王 is `Lǎo Wáng`: the prefix takes a capital of its own.
|
|
20
|
+
*
|
|
21
|
+
* The words are already written apart — nothing here moves a boundary — and
|
|
22
|
+
* what was missing is only the capital, so this marks the prefix a proper noun
|
|
23
|
+
* and lets the writer do what it already does with one. That is why it is a
|
|
24
|
+
* grouping rule despite grouping nothing: `isProperNoun` is the flag the
|
|
25
|
+
* capital hangs off, and there is one place it is set.
|
|
26
|
+
*
|
|
27
|
+
* The surname is the evidence. A one-character word the dictionary marks a
|
|
28
|
+
* proper noun is what 老 and 小 attach to, and CC-CEDICT's capitalisation has
|
|
29
|
+
* already vetoed the tags that would otherwise let 小 in front of anything —
|
|
30
|
+
* see "jieba's 专名 tags need a second opinion" in ROADMAP.md.
|
|
31
|
+
*/
|
|
32
|
+
export const ADDRESS_PREFIX = {
|
|
33
|
+
name: "address-prefix",
|
|
34
|
+
apply: (words) => words.map((word, at) => {
|
|
35
|
+
const next = words[at + 1];
|
|
36
|
+
if (!ADDRESS_PREFIXES.has(word.text) ||
|
|
37
|
+
next === undefined ||
|
|
38
|
+
!next.isProperNoun ||
|
|
39
|
+
characterCount(next.text) !== 1 ||
|
|
40
|
+
next.separator !== undefined) {
|
|
41
|
+
return word;
|
|
42
|
+
}
|
|
43
|
+
return { ...word, isProperNoun: true };
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* jieba's tags for the two kinds of proper noun 5.1 divides.
|
|
48
|
+
*
|
|
49
|
+
* A person and an organisation. Places are `PLACE_GENERICS`' business, and `nz`
|
|
50
|
+
* is left out — both are measured out in `docs/orthography/`.
|
|
51
|
+
*/
|
|
52
|
+
//# sourceMappingURL=address-grouping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address-grouping.js","sourceRoot":"","sources":["../../src/orthography/address-grouping.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEpD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3B,IACE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,IAAI,KAAK,SAAS;YAClB,CAAC,IAAI,CAAC,YAAY;YAClB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,SAAS,KAAK,SAAS,EAC5B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC,CAAC;CACL,CAAC;AAEF;;;;;GAKG"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import type { Dictionary } from "../dictionary/dictionary.js";
|
|
2
2
|
import type { DecodedWord } from "../decode/word.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
* GB/T 16159: 他看了 is `tā kànle`, not `tā kàn le`. Safe as a rule because it
|
|
8
|
-
* only ever joins what the decode had already separated — the dictionary has no
|
|
9
|
-
* entry for 看了, so nothing the dictionary asserted is being overridden. The
|
|
10
|
-
* readings do not change either way, so the worst case is untidy spacing.
|
|
11
|
-
*/
|
|
3
|
+
import type { GroupingRule } from "./rule.js";
|
|
4
|
+
export { ADDRESS_PREFIX, NAME_PARTS, SPACED_WORD_LIST, } from "./word-grouping.js";
|
|
5
|
+
export { PLACE_GENERICS } from "./place-grouping.js";
|
|
12
6
|
export declare const ASPECT_PARTICLES: GroupingRule;
|
|
13
7
|
/**
|
|
14
8
|
* A suffix attaches to the word in front of it.
|
|
@@ -18,84 +12,6 @@ export declare const ASPECT_PARTICLES: GroupingRule;
|
|
|
18
12
|
* dictionary attached to anything.
|
|
19
13
|
*/
|
|
20
14
|
export declare const SUFFIXES: GroupingRule;
|
|
21
|
-
/**
|
|
22
|
-
* A place name's generic half is written separately, and capitalised.
|
|
23
|
-
*
|
|
24
|
-
* GB/T 16159 专名和通名分写: 南京市 is `Nánjīng Shì`, 西湖区 is `Xīhú Qū`.
|
|
25
|
-
*
|
|
26
|
-
* Two conditions keep it from running away, both of them measured against the
|
|
27
|
-
* whole dictionary rather than guessed. The word must be tagged a place name,
|
|
28
|
-
* and **the part before the generic must itself be a word** — without the
|
|
29
|
-
* second, 上山下乡 and 三街六市 are tagged `ns` and come apart as
|
|
30
|
-
* `Shàngshānxià Xiāng` and `Sānjiēliù Shì`. Together they fire on 4,798 of the
|
|
31
|
-
* dictionary's 8,781 candidates and hold back 427.
|
|
32
|
-
*
|
|
33
|
-
* The rule deliberately never touches a two-character name, so 上海 stays
|
|
34
|
-
* `Shànghǎi` and 长城 stays `Chángchéng`: there, the generic character is part
|
|
35
|
-
* of the proper name rather than a description of it, and no rule can tell the
|
|
36
|
-
* two apart — 黄河 is `Huáng Hé` and 青海 is `Qīnghǎi`.
|
|
37
|
-
*/
|
|
38
|
-
export declare const PLACE_GENERICS: GroupingRule;
|
|
39
|
-
/**
|
|
40
|
-
* Write the words GB/T 16159 spaces in a way no rule reaches.
|
|
41
|
-
*
|
|
42
|
-
* Matches longest-first at each word boundary, and only where the entry ends on
|
|
43
|
-
* a word boundary too: a table entry is a claim about a whole word or several,
|
|
44
|
-
* not about the middle of one.
|
|
45
|
-
*/
|
|
46
|
-
export declare const SPACED_WORD_LIST: GroupingRule;
|
|
47
|
-
/**
|
|
48
|
-
* 老王 is `Lǎo Wáng`: the prefix takes a capital of its own.
|
|
49
|
-
*
|
|
50
|
-
* The words are already written apart — nothing here moves a boundary — and
|
|
51
|
-
* what was missing is only the capital, so this marks the prefix a proper noun
|
|
52
|
-
* and lets the writer do what it already does with one. That is why it is a
|
|
53
|
-
* grouping rule despite grouping nothing: `isProperNoun` is the flag the
|
|
54
|
-
* capital hangs off, and there is one place it is set.
|
|
55
|
-
*
|
|
56
|
-
* The surname is the evidence. A one-character word the dictionary marks a
|
|
57
|
-
* proper noun is what 老 and 小 attach to, and CC-CEDICT's capitalisation has
|
|
58
|
-
* already vetoed the tags that would otherwise let 小 in front of anything —
|
|
59
|
-
* see "jieba's 专名 tags need a second opinion" in ROADMAP.md.
|
|
60
|
-
*/
|
|
61
|
-
export declare const ADDRESS_PREFIX: GroupingRule;
|
|
62
|
-
/**
|
|
63
|
-
* The parts of a proper name are written apart: 齐白石 is `Qí Báishí`.
|
|
64
|
-
*
|
|
65
|
-
* GB/T 16159 5.1 writes 姓 apart from 名 and a proper noun apart from its
|
|
66
|
-
* generic, each part capitalised. Both halves of that clause are this rule,
|
|
67
|
-
* because the evidence for them is the same evidence.
|
|
68
|
-
*
|
|
69
|
-
* 齐白石 and 北京大学 are dictionary entries, so the decoder produces **one**
|
|
70
|
-
* word each — and reading them as one word is what makes them read correctly at
|
|
71
|
-
* all. That makes this a *split*, and splitting contradicts the dictionary's own
|
|
72
|
-
* claim that the characters belong together. It needs a condition strong enough
|
|
73
|
-
* to survive the whole dictionary, and the obvious ones are not: a surname list
|
|
74
|
-
* takes 马克思, 高尔基, 巴赫 and 牛顿 apart, none of which is a Chinese name,
|
|
75
|
-
* and a list of generics cannot say where 上海浦东发展银行 divides.
|
|
76
|
-
*
|
|
77
|
-
* **The condition is CC-CEDICT's own capitalisation**, which states the
|
|
78
|
-
* boundaries outright: 齐白石 is `[Qi2 Bai2 shi2]`, 司马迁 `[Si1 ma3 Qian1]`,
|
|
79
|
-
* 上海交通大学 `[Shang4 hai3 Jiao1 tong1 Da4 xue2]`, and 马克思 `[Ma3 ke4 si1]`
|
|
80
|
-
* with no second capital at all. So a compound surname is recognised without a
|
|
81
|
-
* list of compound surnames, a generic without a list of generics, and a
|
|
82
|
-
* transliteration is excluded without a list of transliterations. It is the same
|
|
83
|
-
* source and the same signal the proper-noun veto already trusts — see "jieba's
|
|
84
|
-
* 专名 tags need a second opinion" in ROADMAP.md — extended from *whether* a
|
|
85
|
-
* word is a proper noun to *where* its parts divide.
|
|
86
|
-
*
|
|
87
|
-
* **Every stated boundary is cut, not only the first**, which is what separates
|
|
88
|
-
* an organisation from a person: 48% of `nt` entries carrying a boundary carry
|
|
89
|
-
* more than one, against 1.6% of `nr`. One cut would leave 上海交通大学 as
|
|
90
|
-
* `Shànghǎi Jiāotōngdàxué`.
|
|
91
|
-
*
|
|
92
|
-
* A tag is still required, because the mark is not confined to what 5.1 covers:
|
|
93
|
-
* 5,341 `ns` entries carry one, where `PLACE_GENERICS` already applies a
|
|
94
|
-
* measured condition, and `nz` carries 346 of which 第二次世界大战
|
|
95
|
-
* `[Di4 er4 Ci4 Shi4 jie4 Da4 zhan4]` divides in the wrong place. Both are
|
|
96
|
-
* measured out in `docs/orthography/`.
|
|
97
|
-
*/
|
|
98
|
-
export declare const NAME_PARTS: GroupingRule;
|
|
99
15
|
/**
|
|
100
16
|
* The rules applied by default, in order.
|
|
101
17
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../src/orthography/grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../src/orthography/grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAO9C,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AA0B5B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,eAAO,MAAM,gBAAgB,EAAE,YAO9B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,EAAE,YAItB,CAAC;AACF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAUjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,UAAU,EAAE,UAAU,EACtB,KAAK,GAAE,SAAS,YAAY,EAAmB,GAC9C,SAAS,WAAW,EAAE,CAMxB"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { characterCount, toCharacters } from "../script/characters.js";
|
|
2
1
|
import { IDIOM_HYPHENS } from "./idioms.js";
|
|
3
2
|
import { AABB_REDUPLICATION, ABAB_REDUPLICATION } from "./reduplication.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
3
|
+
import { ADDRESS_PREFIX, NAME_PARTS, SPACED_WORD_LIST, } from "./word-grouping.js";
|
|
4
|
+
export { ADDRESS_PREFIX, NAME_PARTS, SPACED_WORD_LIST, } from "./word-grouping.js";
|
|
6
5
|
/**
|
|
7
6
|
* jieba's tags for the aspect particles 了, 着 and 过.
|
|
8
7
|
*/
|
|
@@ -22,49 +21,8 @@ function isAspectHost(word) {
|
|
|
22
21
|
* jieba's tag for a suffix, which is what 们 and 者 are.
|
|
23
22
|
*/
|
|
24
23
|
const SUFFIX_TAG = "k";
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*
|
|
28
|
-
* Both scripts, since a 繁體 name is a key in its own right and never converted
|
|
29
|
-
* before lookup.
|
|
30
|
-
*/
|
|
31
|
-
const ADMINISTRATIVE_GENERICS = new Set([
|
|
32
|
-
"市",
|
|
33
|
-
"省",
|
|
34
|
-
"县",
|
|
35
|
-
"縣",
|
|
36
|
-
"区",
|
|
37
|
-
"區",
|
|
38
|
-
"镇",
|
|
39
|
-
"鎮",
|
|
40
|
-
"乡",
|
|
41
|
-
"鄉",
|
|
42
|
-
"村",
|
|
43
|
-
"州",
|
|
44
|
-
]);
|
|
45
|
-
/**
|
|
46
|
-
* Fold every word a predicate accepts into the word before it.
|
|
47
|
-
*/
|
|
48
|
-
function joinBackwards(words, isAttached) {
|
|
49
|
-
const grouped = [];
|
|
50
|
-
for (const word of words) {
|
|
51
|
-
const head = grouped.at(-1);
|
|
52
|
-
if (head !== undefined && isAttached(word, head)) {
|
|
53
|
-
grouped[grouped.length - 1] = join(head, word);
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
grouped.push(word);
|
|
57
|
-
}
|
|
58
|
-
return grouped;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* 了, 着 and 过 attach to the verb in front of them.
|
|
62
|
-
*
|
|
63
|
-
* GB/T 16159: 他看了 is `tā kànle`, not `tā kàn le`. Safe as a rule because it
|
|
64
|
-
* only ever joins what the decode had already separated — the dictionary has no
|
|
65
|
-
* entry for 看了, so nothing the dictionary asserted is being overridden. The
|
|
66
|
-
* readings do not change either way, so the worst case is untidy spacing.
|
|
67
|
-
*/
|
|
24
|
+
import { joinBackwards, PLACE_GENERICS } from "./place-grouping.js";
|
|
25
|
+
export { PLACE_GENERICS } from "./place-grouping.js";
|
|
68
26
|
export const ASPECT_PARTICLES = {
|
|
69
27
|
name: "aspect-particles",
|
|
70
28
|
apply: (words) => joinBackwards(words, (word, head) => ASPECT_TAGS.has(word.partOfSpeech) && isAspectHost(head)),
|
|
@@ -80,230 +38,6 @@ export const SUFFIXES = {
|
|
|
80
38
|
name: "suffixes",
|
|
81
39
|
apply: (words) => joinBackwards(words, (word) => word.partOfSpeech === SUFFIX_TAG),
|
|
82
40
|
};
|
|
83
|
-
/**
|
|
84
|
-
* A place name's generic half is written separately, and capitalised.
|
|
85
|
-
*
|
|
86
|
-
* GB/T 16159 专名和通名分写: 南京市 is `Nánjīng Shì`, 西湖区 is `Xīhú Qū`.
|
|
87
|
-
*
|
|
88
|
-
* Two conditions keep it from running away, both of them measured against the
|
|
89
|
-
* whole dictionary rather than guessed. The word must be tagged a place name,
|
|
90
|
-
* and **the part before the generic must itself be a word** — without the
|
|
91
|
-
* second, 上山下乡 and 三街六市 are tagged `ns` and come apart as
|
|
92
|
-
* `Shàngshānxià Xiāng` and `Sānjiēliù Shì`. Together they fire on 4,798 of the
|
|
93
|
-
* dictionary's 8,781 candidates and hold back 427.
|
|
94
|
-
*
|
|
95
|
-
* The rule deliberately never touches a two-character name, so 上海 stays
|
|
96
|
-
* `Shànghǎi` and 长城 stays `Chángchéng`: there, the generic character is part
|
|
97
|
-
* of the proper name rather than a description of it, and no rule can tell the
|
|
98
|
-
* two apart — 黄河 is `Huáng Hé` and 青海 is `Qīnghǎi`.
|
|
99
|
-
*/
|
|
100
|
-
export const PLACE_GENERICS = {
|
|
101
|
-
name: "place-generics",
|
|
102
|
-
apply: (words, dictionary) => words.flatMap((word) => {
|
|
103
|
-
const characters = toCharacters(word.text);
|
|
104
|
-
const generic = characters.at(-1) ?? "";
|
|
105
|
-
if (word.partOfSpeech !== "ns" ||
|
|
106
|
-
characters.length < 3 ||
|
|
107
|
-
!ADMINISTRATIVE_GENERICS.has(generic) ||
|
|
108
|
-
dictionary.lookup(characters.slice(0, -1).join("")) === undefined) {
|
|
109
|
-
return [word];
|
|
110
|
-
}
|
|
111
|
-
const split = splitAt(word, characters.length - 1);
|
|
112
|
-
if (split === undefined) {
|
|
113
|
-
return [word];
|
|
114
|
-
}
|
|
115
|
-
// Both halves are capitalised: 通名 is part of the name, not a common
|
|
116
|
-
// noun trailing it.
|
|
117
|
-
return split.map((part) => ({ ...part, isProperNoun: true }));
|
|
118
|
-
}),
|
|
119
|
-
};
|
|
120
|
-
/**
|
|
121
|
-
* The character span each decoded word covers, in order.
|
|
122
|
-
*/
|
|
123
|
-
function spansOf(words) {
|
|
124
|
-
let at = 0;
|
|
125
|
-
return words.map((word) => {
|
|
126
|
-
const span = { at, word };
|
|
127
|
-
at += toCharacters(word.text).length;
|
|
128
|
-
return span;
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Rewrite the words covering a span into the parts the standard writes.
|
|
133
|
-
*
|
|
134
|
-
* The readings are redistributed by character count, so this only applies where
|
|
135
|
-
* every covered word reads one syllable per character. 儿化 cannot be
|
|
136
|
-
* redistributed and is left alone.
|
|
137
|
-
*/
|
|
138
|
-
function respace(covered, parts) {
|
|
139
|
-
const reading = covered.flatMap((word) => [...word.reading]);
|
|
140
|
-
const characters = covered.flatMap((word) => toCharacters(word.text));
|
|
141
|
-
if (reading.length !== characters.length) {
|
|
142
|
-
return undefined;
|
|
143
|
-
}
|
|
144
|
-
const head = covered[0];
|
|
145
|
-
/* c8 ignore next 3 -- the caller only passes a span it matched */
|
|
146
|
-
if (head === undefined) {
|
|
147
|
-
return undefined;
|
|
148
|
-
}
|
|
149
|
-
let at = 0;
|
|
150
|
-
return parts.map((part) => {
|
|
151
|
-
const length = toCharacters(part).length;
|
|
152
|
-
const written = {
|
|
153
|
-
text: part,
|
|
154
|
-
reading: reading.slice(at, at + length),
|
|
155
|
-
isProperNoun: head.isProperNoun,
|
|
156
|
-
partOfSpeech: head.partOfSpeech,
|
|
157
|
-
isKnown: head.isKnown,
|
|
158
|
-
};
|
|
159
|
-
at += length;
|
|
160
|
-
return written;
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* The longest listed form starting at a word, with how many words it consumed.
|
|
165
|
-
*
|
|
166
|
-
* Longest-first, so 一个人 would beat 一个 if both were listed. A listed entry
|
|
167
|
-
* has to end on a word boundary too: it is a claim about whole words, not
|
|
168
|
-
* about the middle of one.
|
|
169
|
-
*/
|
|
170
|
-
function longestListedFrom(spans, index) {
|
|
171
|
-
for (let end = spans.length; end > index; end--) {
|
|
172
|
-
const covered = spans.slice(index, end).map((span) => span.word);
|
|
173
|
-
const text = covered.map((word) => word.text).join("");
|
|
174
|
-
if (characterCount(text) <= LONGEST_SPACED_WORD) {
|
|
175
|
-
const parts = SPACED_WORD_FORMS.get(text);
|
|
176
|
-
const written = parts === undefined ? undefined : respace(covered, parts);
|
|
177
|
-
if (written !== undefined) {
|
|
178
|
-
return { written, consumed: end - index - 1 };
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return undefined;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Write the words GB/T 16159 spaces in a way no rule reaches.
|
|
186
|
-
*
|
|
187
|
-
* Matches longest-first at each word boundary, and only where the entry ends on
|
|
188
|
-
* a word boundary too: a table entry is a claim about a whole word or several,
|
|
189
|
-
* not about the middle of one.
|
|
190
|
-
*/
|
|
191
|
-
export const SPACED_WORD_LIST = {
|
|
192
|
-
name: "spaced-word-list",
|
|
193
|
-
apply: (words) => {
|
|
194
|
-
const spans = spansOf(words);
|
|
195
|
-
const grouped = [];
|
|
196
|
-
for (let index = 0; index < spans.length; index++) {
|
|
197
|
-
const start = spans[index];
|
|
198
|
-
/* c8 ignore next 3 -- index stays inside the array */
|
|
199
|
-
if (start === undefined) {
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
const matched = longestListedFrom(spans, index);
|
|
203
|
-
grouped.push(...(matched?.written ?? [start.word]));
|
|
204
|
-
index += matched?.consumed ?? 0;
|
|
205
|
-
}
|
|
206
|
-
return grouped;
|
|
207
|
-
},
|
|
208
|
-
};
|
|
209
|
-
/**
|
|
210
|
-
* The 称呼语 GB/T 16159 writes in front of a surname.
|
|
211
|
-
*
|
|
212
|
-
* 老 and 小 only. 大 is written the same way in 大李, but it is also an ordinary
|
|
213
|
-
* adjective in front of anything at all, and it is the one that goes wrong:
|
|
214
|
-
* over 88,866 lines the three of them fire 49 times together and both clear
|
|
215
|
-
* mistakes are 大 — 泡大池 is a big pool and 那头大熊 is a big bear. Dropping it
|
|
216
|
-
* leaves 38 firings and every one visible in the sample is a real form of
|
|
217
|
-
* address.
|
|
218
|
-
*/
|
|
219
|
-
const ADDRESS_PREFIXES = new Set(["老", "小"]);
|
|
220
|
-
/**
|
|
221
|
-
* 老王 is `Lǎo Wáng`: the prefix takes a capital of its own.
|
|
222
|
-
*
|
|
223
|
-
* The words are already written apart — nothing here moves a boundary — and
|
|
224
|
-
* what was missing is only the capital, so this marks the prefix a proper noun
|
|
225
|
-
* and lets the writer do what it already does with one. That is why it is a
|
|
226
|
-
* grouping rule despite grouping nothing: `isProperNoun` is the flag the
|
|
227
|
-
* capital hangs off, and there is one place it is set.
|
|
228
|
-
*
|
|
229
|
-
* The surname is the evidence. A one-character word the dictionary marks a
|
|
230
|
-
* proper noun is what 老 and 小 attach to, and CC-CEDICT's capitalisation has
|
|
231
|
-
* already vetoed the tags that would otherwise let 小 in front of anything —
|
|
232
|
-
* see "jieba's 专名 tags need a second opinion" in ROADMAP.md.
|
|
233
|
-
*/
|
|
234
|
-
export const ADDRESS_PREFIX = {
|
|
235
|
-
name: "address-prefix",
|
|
236
|
-
apply: (words) => words.map((word, at) => {
|
|
237
|
-
const next = words[at + 1];
|
|
238
|
-
if (!ADDRESS_PREFIXES.has(word.text) ||
|
|
239
|
-
next === undefined ||
|
|
240
|
-
!next.isProperNoun ||
|
|
241
|
-
characterCount(next.text) !== 1 ||
|
|
242
|
-
next.separator !== undefined) {
|
|
243
|
-
return word;
|
|
244
|
-
}
|
|
245
|
-
return { ...word, isProperNoun: true };
|
|
246
|
-
}),
|
|
247
|
-
};
|
|
248
|
-
/**
|
|
249
|
-
* jieba's tags for the two kinds of proper noun 5.1 divides.
|
|
250
|
-
*
|
|
251
|
-
* A person and an organisation. Places are `PLACE_GENERICS`' business, and `nz`
|
|
252
|
-
* is left out — both are measured out in `docs/orthography/`.
|
|
253
|
-
*/
|
|
254
|
-
const DIVIDED_TAGS = new Set(["nr", "nt"]);
|
|
255
|
-
/**
|
|
256
|
-
* The parts of a proper name are written apart: 齐白石 is `Qí Báishí`.
|
|
257
|
-
*
|
|
258
|
-
* GB/T 16159 5.1 writes 姓 apart from 名 and a proper noun apart from its
|
|
259
|
-
* generic, each part capitalised. Both halves of that clause are this rule,
|
|
260
|
-
* because the evidence for them is the same evidence.
|
|
261
|
-
*
|
|
262
|
-
* 齐白石 and 北京大学 are dictionary entries, so the decoder produces **one**
|
|
263
|
-
* word each — and reading them as one word is what makes them read correctly at
|
|
264
|
-
* all. That makes this a *split*, and splitting contradicts the dictionary's own
|
|
265
|
-
* claim that the characters belong together. It needs a condition strong enough
|
|
266
|
-
* to survive the whole dictionary, and the obvious ones are not: a surname list
|
|
267
|
-
* takes 马克思, 高尔基, 巴赫 and 牛顿 apart, none of which is a Chinese name,
|
|
268
|
-
* and a list of generics cannot say where 上海浦东发展银行 divides.
|
|
269
|
-
*
|
|
270
|
-
* **The condition is CC-CEDICT's own capitalisation**, which states the
|
|
271
|
-
* boundaries outright: 齐白石 is `[Qi2 Bai2 shi2]`, 司马迁 `[Si1 ma3 Qian1]`,
|
|
272
|
-
* 上海交通大学 `[Shang4 hai3 Jiao1 tong1 Da4 xue2]`, and 马克思 `[Ma3 ke4 si1]`
|
|
273
|
-
* with no second capital at all. So a compound surname is recognised without a
|
|
274
|
-
* list of compound surnames, a generic without a list of generics, and a
|
|
275
|
-
* transliteration is excluded without a list of transliterations. It is the same
|
|
276
|
-
* source and the same signal the proper-noun veto already trusts — see "jieba's
|
|
277
|
-
* 专名 tags need a second opinion" in ROADMAP.md — extended from *whether* a
|
|
278
|
-
* word is a proper noun to *where* its parts divide.
|
|
279
|
-
*
|
|
280
|
-
* **Every stated boundary is cut, not only the first**, which is what separates
|
|
281
|
-
* an organisation from a person: 48% of `nt` entries carrying a boundary carry
|
|
282
|
-
* more than one, against 1.6% of `nr`. One cut would leave 上海交通大学 as
|
|
283
|
-
* `Shànghǎi Jiāotōngdàxué`.
|
|
284
|
-
*
|
|
285
|
-
* A tag is still required, because the mark is not confined to what 5.1 covers:
|
|
286
|
-
* 5,341 `ns` entries carry one, where `PLACE_GENERICS` already applies a
|
|
287
|
-
* measured condition, and `nz` carries 346 of which 第二次世界大战
|
|
288
|
-
* `[Di4 er4 Ci4 Shi4 jie4 Da4 zhan4]` divides in the wrong place. Both are
|
|
289
|
-
* measured out in `docs/orthography/`.
|
|
290
|
-
*/
|
|
291
|
-
export const NAME_PARTS = {
|
|
292
|
-
name: "name-parts",
|
|
293
|
-
apply: (words, dictionary) => words.flatMap((word) => {
|
|
294
|
-
const boundaries = dictionary.lookup(word.text)?.nameBoundaries ?? [];
|
|
295
|
-
if (boundaries.length === 0 || !word.isProperNoun) {
|
|
296
|
-
return [word];
|
|
297
|
-
}
|
|
298
|
-
if (!DIVIDED_TAGS.has(word.partOfSpeech)) {
|
|
299
|
-
return [word];
|
|
300
|
-
}
|
|
301
|
-
const parts = divideAt(word, boundaries);
|
|
302
|
-
// Every part is a proper noun in its own right, so each takes a capital:
|
|
303
|
-
// `Qí Báishí`, `Běijīng Dàxué`.
|
|
304
|
-
return parts.map((part) => ({ ...part, isProperNoun: true }));
|
|
305
|
-
}),
|
|
306
|
-
};
|
|
307
41
|
/**
|
|
308
42
|
* The rules applied by default, in order.
|
|
309
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../src/orthography/grouping.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../src/orthography/grouping.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEhD;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,IAAiB;IACrC,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,GAAG,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,aAAa,CACX,KAAK,EACL,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CACzE;CACJ,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC;CACnE,CAAC;AACF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,gBAAgB;IAChB,QAAQ;IACR,cAAc;IACd,UAAU;IACV,gBAAgB;IAChB,cAAc;IACd,kBAAkB;IAClB,kBAAkB;IAClB,aAAa;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA6B,EAC7B,UAAsB,EACtB,KAAK,GAA4B,cAAc;IAE/C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Joining a place name to the generic that names its kind.
|
|
3
|
+
*
|
|
4
|
+
* 北京市 is one orthographic word and 北京 市 is two, and which it is depends
|
|
5
|
+
* on the generic rather than on the tag jieba gave the whole.
|
|
6
|
+
*/
|
|
7
|
+
import type { DecodedWord } from "../decode/word.js";
|
|
8
|
+
import { type GroupingRule } from "./rule.js";
|
|
9
|
+
/**
|
|
10
|
+
* Fold every word a predicate accepts into the word before it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function joinBackwards(words: readonly DecodedWord[], isAttached: (word: DecodedWord, head: DecodedWord) => boolean): readonly DecodedWord[];
|
|
13
|
+
/**
|
|
14
|
+
* 了, 着 and 过 attach to the verb in front of them.
|
|
15
|
+
*
|
|
16
|
+
* GB/T 16159: 他看了 is `tā kànle`, not `tā kàn le`. Safe as a rule because it
|
|
17
|
+
* only ever joins what the decode had already separated — the dictionary has no
|
|
18
|
+
* entry for 看了, so nothing the dictionary asserted is being overridden. The
|
|
19
|
+
* readings do not change either way, so the worst case is untidy spacing.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* A place name's generic half is written separately, and capitalised.
|
|
23
|
+
*
|
|
24
|
+
* GB/T 16159 专名和通名分写: 南京市 is `Nánjīng Shì`, 西湖区 is `Xīhú Qū`.
|
|
25
|
+
*
|
|
26
|
+
* Two conditions keep it from running away, both of them measured against the
|
|
27
|
+
* whole dictionary rather than guessed. The word must be tagged a place name,
|
|
28
|
+
* and **the part before the generic must itself be a word** — without the
|
|
29
|
+
* second, 上山下乡 and 三街六市 are tagged `ns` and come apart as
|
|
30
|
+
* `Shàngshānxià Xiāng` and `Sānjiēliù Shì`. Together they fire on 4,798 of the
|
|
31
|
+
* dictionary's 8,781 candidates and hold back 427.
|
|
32
|
+
*
|
|
33
|
+
* The rule deliberately never touches a two-character name, so 上海 stays
|
|
34
|
+
* `Shànghǎi` and 长城 stays `Chángchéng`: there, the generic character is part
|
|
35
|
+
* of the proper name rather than a description of it, and no rule can tell the
|
|
36
|
+
* two apart — 黄河 is `Huáng Hé` and 青海 is `Qīnghǎi`.
|
|
37
|
+
*/
|
|
38
|
+
export declare const PLACE_GENERICS: GroupingRule;
|
|
39
|
+
//# sourceMappingURL=place-grouping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"place-grouping.d.ts","sourceRoot":"","sources":["../../src/orthography/place-grouping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,WAAW,CAAC;AAuB7D;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,GAC5D,SAAS,WAAW,EAAE,CAWxB;AAED;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,cAAc,EAAE,YAsB5B,CAAC"}
|