@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,154 @@
|
|
|
1
|
+
import { READING_CHARGE } from "./lattice.js";
|
|
2
|
+
/**
|
|
3
|
+
* What an edge a hint brought with it costs, in both decodes.
|
|
4
|
+
*
|
|
5
|
+
* Zero, because a caller naming a reading is the strongest evidence the decode
|
|
6
|
+
* has. The other branch of {@link applyHints} says so already by overwriting a
|
|
7
|
+
* dictionary entry's reading where a hint names the same stretch, and an edge
|
|
8
|
+
* with no entry behind it has to say the same thing through its cost.
|
|
9
|
+
*
|
|
10
|
+
* It was {@link import("./lattice-types.js").UNKNOWN_COST} until
|
|
11
|
+
* {@link READING_CHARGE} came down, which worked only while one edge beat two
|
|
12
|
+
* whatever they cost: 玩儿 hinted as `wánr` went back to `wán ér` the moment
|
|
13
|
+
* frequency could speak.
|
|
14
|
+
*/
|
|
15
|
+
const HINT_COST = 0;
|
|
16
|
+
/**
|
|
17
|
+
* The same hints with every position moved along by an offset.
|
|
18
|
+
*
|
|
19
|
+
* Word hints match on what is written and so are carried over untouched; only
|
|
20
|
+
* the positional ones are counted from somewhere. Used where a run is decoded
|
|
21
|
+
* with context in front of it, which moves the run's own characters up the
|
|
22
|
+
* lattice by the length of that context.
|
|
23
|
+
*/
|
|
24
|
+
export function shiftHints(hints, by) {
|
|
25
|
+
return {
|
|
26
|
+
words: hints.words,
|
|
27
|
+
at: new Map([...hints.at].map(([at, syllable]) => [at + by, syllable])),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The hints that fall inside a run, with their positions made relative to it.
|
|
32
|
+
*
|
|
33
|
+
* A caller counts positions from the start of the whole text, while a run is
|
|
34
|
+
* decoded on its own, so the positions have to be moved to where the run put
|
|
35
|
+
* them — and the ones naming a character in some other run dropped, rather than
|
|
36
|
+
* landing on whatever happens to sit at that index here.
|
|
37
|
+
*/
|
|
38
|
+
export function hintsWithin(hints, from, length) {
|
|
39
|
+
const at = new Map();
|
|
40
|
+
for (const [position, syllable] of hints.at) {
|
|
41
|
+
if (position >= from && position < from + length) {
|
|
42
|
+
at.set(position - from, syllable);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return { words: hints.words, at };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Whether a hint's characters are what stands at a position.
|
|
49
|
+
*/
|
|
50
|
+
function matchesAt(hint, characters, at) {
|
|
51
|
+
return hint.characters.every((character, index) => characters[at + index] === character);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A caller's readings, put into a lattice that was built without them.
|
|
55
|
+
*
|
|
56
|
+
* Two kinds of hint with deliberately different reach, which is the whole of
|
|
57
|
+
* the semantics:
|
|
58
|
+
*
|
|
59
|
+
* A **word** hint is an assertion about the text it names, so it rewrites the
|
|
60
|
+
* edge spanning exactly those characters and supplies the single-character
|
|
61
|
+
* edges underneath it. It says nothing about a *longer* word that happens to
|
|
62
|
+
* contain it — a bare 长 hint leaves 校长 as `xiàozhǎng`, because the dictionary
|
|
63
|
+
* knowing 校长 is better evidence about that stretch than a caller's remark
|
|
64
|
+
* about one of its characters. That is what makes a corrections table safe to
|
|
65
|
+
* accumulate: entries do not reach into words nobody was thinking about.
|
|
66
|
+
*
|
|
67
|
+
* A **positional** hint is an assertion about one character of one text, and it
|
|
68
|
+
* is the escape hatch precisely because nothing outranks it: it rewrites every
|
|
69
|
+
* edge covering that position, the enclosing word included. Only a reading of
|
|
70
|
+
* one syllable per character can be rewritten this way; a 儿化 edge is a single
|
|
71
|
+
* claim about its whole span and there is no one syllable in it to replace.
|
|
72
|
+
*
|
|
73
|
+
* Nothing is invented that a caller did not write, and nothing is dropped: an
|
|
74
|
+
* edge whose reading no hint touches comes through as it was.
|
|
75
|
+
*/
|
|
76
|
+
export function applyHints(lattice, hints) {
|
|
77
|
+
const { characters } = lattice;
|
|
78
|
+
/** The word hint covering a position, and how far into it that position is. */
|
|
79
|
+
const wordAt = (at) => {
|
|
80
|
+
for (const hint of hints.words) {
|
|
81
|
+
if (hint.reading.length !== hint.characters.length) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
for (let held = 0; held < hint.characters.length; held++) {
|
|
85
|
+
if (at - held >= 0 && matchesAt(hint, characters, at - held)) {
|
|
86
|
+
return { hint, held };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
};
|
|
92
|
+
const rewrite = (edge) => {
|
|
93
|
+
const span = edge.to - edge.from;
|
|
94
|
+
// A word hint naming exactly this stretch replaces its reading outright,
|
|
95
|
+
// which is the only way a hint can reach a word the dictionary already has
|
|
96
|
+
// an opinion about: 银行 asserted as `yín xíng` has to beat `yínháng`.
|
|
97
|
+
const exact = hints.words.find((hint) => hint.characters.length === span &&
|
|
98
|
+
matchesAt(hint, characters, edge.from));
|
|
99
|
+
let reading = exact === undefined ? edge.reading : exact.reading;
|
|
100
|
+
// Everything below needs one syllable per character to have a syllable to
|
|
101
|
+
// put anywhere.
|
|
102
|
+
if (reading.length === span) {
|
|
103
|
+
reading = reading.map((syllable, index) => {
|
|
104
|
+
const at = edge.from + index;
|
|
105
|
+
const positional = hints.at.get(at);
|
|
106
|
+
if (positional !== undefined) {
|
|
107
|
+
return positional;
|
|
108
|
+
}
|
|
109
|
+
if (span > 1) {
|
|
110
|
+
return syllable;
|
|
111
|
+
}
|
|
112
|
+
// Single-character edges also take what a longer word hint says about
|
|
113
|
+
// this position, so that the split path reads the same as the whole.
|
|
114
|
+
const found = wordAt(at);
|
|
115
|
+
return found?.hint.reading[found.held] ?? syllable;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return reading === edge.reading ? edge : { ...edge, reading };
|
|
119
|
+
};
|
|
120
|
+
return {
|
|
121
|
+
characters,
|
|
122
|
+
edges: lattice.edges.map((edges, at) => {
|
|
123
|
+
const rewritten = edges.map((edge) => rewrite(edge));
|
|
124
|
+
// A hint spanning characters no edge covers has nowhere to be written, so
|
|
125
|
+
// it brings its own edge: 玩儿 as `wánr` where the dictionary lacks it.
|
|
126
|
+
const spanning = hints.words.find((hint) => hint.reading.length !== hint.characters.length &&
|
|
127
|
+
matchesAt(hint, characters, at) &&
|
|
128
|
+
!rewritten.some((edge) => edge.to === at + hint.characters.length));
|
|
129
|
+
if (spanning === undefined) {
|
|
130
|
+
return rewritten;
|
|
131
|
+
}
|
|
132
|
+
const to = at + spanning.characters.length;
|
|
133
|
+
return [
|
|
134
|
+
...rewritten,
|
|
135
|
+
{
|
|
136
|
+
from: at,
|
|
137
|
+
to,
|
|
138
|
+
text: spanning.characters.join(""),
|
|
139
|
+
reading: spanning.reading,
|
|
140
|
+
cost: HINT_COST,
|
|
141
|
+
readingCost: HINT_COST + READING_CHARGE,
|
|
142
|
+
isProperNoun: false,
|
|
143
|
+
partOfSpeech: "",
|
|
144
|
+
// No dictionary entry backs this one — that is the whole reason it
|
|
145
|
+
// had to be brought along — so it reports itself as the fallback it
|
|
146
|
+
// is. A hint written over an edge that *was* backed keeps that edge's
|
|
147
|
+
// own answer, since the entry still covers those characters.
|
|
148
|
+
isKnown: false,
|
|
149
|
+
},
|
|
150
|
+
];
|
|
151
|
+
}),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=hint-lattice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hint-lattice.js","sourceRoot":"","sources":["../../src/decode/hint-lattice.ts"],"names":[],"mappings":"AAQA,OAAO,EAAkC,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9E;;;;;;;;;;;;GAYG;AACH,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAoB,EAAE,EAAU;IACzD,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;KACxE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,KAAoB,EACpB,IAAY,EACZ,MAAc;IAEd,MAAM,EAAE,GAAG,IAAI,GAAG,EAAoB,CAAC;IACvC,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;YACjD,EAAE,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAChB,IAAc,EACd,UAA6B,EAC7B,EAAU;IAEV,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAC1B,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,SAAS,CAC3D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,KAAoB;IAC/D,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAE/B,+EAA+E;IAC/E,MAAM,MAAM,GAAG,CAAC,EAAU,EAAgD,EAAE;QAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBACnD,SAAS;YACX,CAAC;YACD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;gBACzD,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;oBAC7D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAe,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAEjC,yEAAyE;QACzE,2EAA2E;QAC3E,qEAAqE;QACrE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI;YAC/B,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CACzC,CAAC;QACF,IAAI,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAEjE,0EAA0E;QAC1E,gBAAgB;QAChB,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACxC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC7B,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;oBACb,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBACD,sEAAsE;gBACtE,qEAAqE;gBACrE,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzB,OAAO,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;IAChE,CAAC,CAAC;IAEF,OAAO;QACL,UAAU;QACV,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,0EAA0E;YAC1E,sEAAsE;YACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC/B,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM;gBAC9C,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;gBAC/B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CACrE,CAAC;YACF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;YAC3C,OAAO;gBACL,GAAG,SAAS;gBACZ;oBACE,IAAI,EAAE,EAAE;oBACR,EAAE;oBACF,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,SAAS,GAAG,cAAc;oBACvC,YAAY,EAAE,KAAK;oBACnB,YAAY,EAAE,EAAE;oBAChB,mEAAmE;oBACnE,oEAAoE;oBACpE,sEAAsE;oBACtE,6DAA6D;oBAC7D,OAAO,EAAE,KAAK;iBACf;aACF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
package/dist/decode/hints.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type Syllable } from "../syllable/syllable.js";
|
|
2
|
-
import { type Lattice } from "./lattice.js";
|
|
3
2
|
/**
|
|
4
3
|
* A reading a caller asserts for a word, wherever that word occurs.
|
|
5
4
|
*
|
|
@@ -68,7 +67,7 @@ export interface ResolvedHints {
|
|
|
68
67
|
/**
|
|
69
68
|
* One word hint, with its characters and reading already taken apart.
|
|
70
69
|
*/
|
|
71
|
-
interface WordHint {
|
|
70
|
+
export interface WordHint {
|
|
72
71
|
readonly characters: readonly string[];
|
|
73
72
|
readonly reading: readonly Syllable[];
|
|
74
73
|
}
|
|
@@ -92,47 +91,5 @@ export declare function readHintReading(reading: string, subject: string): reado
|
|
|
92
91
|
* longest-wins rule the dictionary itself is read by.
|
|
93
92
|
*/
|
|
94
93
|
export declare function resolveHints(hints: ReadingHints): ResolvedHints;
|
|
95
|
-
|
|
96
|
-
* The same hints with every position moved along by an offset.
|
|
97
|
-
*
|
|
98
|
-
* Word hints match on what is written and so are carried over untouched; only
|
|
99
|
-
* the positional ones are counted from somewhere. Used where a run is decoded
|
|
100
|
-
* with context in front of it, which moves the run's own characters up the
|
|
101
|
-
* lattice by the length of that context.
|
|
102
|
-
*/
|
|
103
|
-
export declare function shiftHints(hints: ResolvedHints, by: number): ResolvedHints;
|
|
104
|
-
/**
|
|
105
|
-
* The hints that fall inside a run, with their positions made relative to it.
|
|
106
|
-
*
|
|
107
|
-
* A caller counts positions from the start of the whole text, while a run is
|
|
108
|
-
* decoded on its own, so the positions have to be moved to where the run put
|
|
109
|
-
* them — and the ones naming a character in some other run dropped, rather than
|
|
110
|
-
* landing on whatever happens to sit at that index here.
|
|
111
|
-
*/
|
|
112
|
-
export declare function hintsWithin(hints: ResolvedHints, from: number, length: number): ResolvedHints;
|
|
113
|
-
/**
|
|
114
|
-
* A caller's readings, put into a lattice that was built without them.
|
|
115
|
-
*
|
|
116
|
-
* Two kinds of hint with deliberately different reach, which is the whole of
|
|
117
|
-
* the semantics:
|
|
118
|
-
*
|
|
119
|
-
* A **word** hint is an assertion about the text it names, so it rewrites the
|
|
120
|
-
* edge spanning exactly those characters and supplies the single-character
|
|
121
|
-
* edges underneath it. It says nothing about a *longer* word that happens to
|
|
122
|
-
* contain it — a bare 长 hint leaves 校长 as `xiàozhǎng`, because the dictionary
|
|
123
|
-
* knowing 校长 is better evidence about that stretch than a caller's remark
|
|
124
|
-
* about one of its characters. That is what makes a corrections table safe to
|
|
125
|
-
* accumulate: entries do not reach into words nobody was thinking about.
|
|
126
|
-
*
|
|
127
|
-
* A **positional** hint is an assertion about one character of one text, and it
|
|
128
|
-
* is the escape hatch precisely because nothing outranks it: it rewrites every
|
|
129
|
-
* edge covering that position, the enclosing word included. Only a reading of
|
|
130
|
-
* one syllable per character can be rewritten this way; a 儿化 edge is a single
|
|
131
|
-
* claim about its whole span and there is no one syllable in it to replace.
|
|
132
|
-
*
|
|
133
|
-
* Nothing is invented that a caller did not write, and nothing is dropped: an
|
|
134
|
-
* edge whose reading no hint touches comes through as it was.
|
|
135
|
-
*/
|
|
136
|
-
export declare function applyHints(lattice: Lattice, hints: ResolvedHints): Lattice;
|
|
137
|
-
export {};
|
|
94
|
+
export { applyHints, hintsWithin, shiftHints } from "./hint-lattice.js";
|
|
138
95
|
//# sourceMappingURL=hints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hints.d.ts","sourceRoot":"","sources":["../../src/decode/hints.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"hints.d.ts","sourceRoot":"","sources":["../../src/decode/hints.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGtE;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GACpB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAChC,SAAS,WAAW,EAAE,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;CACvC;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,SAAS,QAAQ,EAAE,CAYrB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAwC/D;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/decode/hints.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { toCharacters } from "../script/characters.js";
|
|
2
2
|
import { readSyllable } from "../syllable/syllable.js";
|
|
3
3
|
import { NEUTRAL_TONE } from "../tone/tone.js";
|
|
4
|
-
import { READING_CHARGE, UNKNOWN_COST, } from "./lattice.js";
|
|
5
4
|
/**
|
|
6
5
|
* Whether a hint names a position rather than a word.
|
|
7
6
|
*/
|
|
@@ -73,142 +72,5 @@ export function resolveHints(hints) {
|
|
|
73
72
|
words.sort((left, right) => right.characters.length - left.characters.length);
|
|
74
73
|
return { words, at };
|
|
75
74
|
}
|
|
76
|
-
|
|
77
|
-
* The same hints with every position moved along by an offset.
|
|
78
|
-
*
|
|
79
|
-
* Word hints match on what is written and so are carried over untouched; only
|
|
80
|
-
* the positional ones are counted from somewhere. Used where a run is decoded
|
|
81
|
-
* with context in front of it, which moves the run's own characters up the
|
|
82
|
-
* lattice by the length of that context.
|
|
83
|
-
*/
|
|
84
|
-
export function shiftHints(hints, by) {
|
|
85
|
-
return {
|
|
86
|
-
words: hints.words,
|
|
87
|
-
at: new Map([...hints.at].map(([at, syllable]) => [at + by, syllable])),
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* The hints that fall inside a run, with their positions made relative to it.
|
|
92
|
-
*
|
|
93
|
-
* A caller counts positions from the start of the whole text, while a run is
|
|
94
|
-
* decoded on its own, so the positions have to be moved to where the run put
|
|
95
|
-
* them — and the ones naming a character in some other run dropped, rather than
|
|
96
|
-
* landing on whatever happens to sit at that index here.
|
|
97
|
-
*/
|
|
98
|
-
export function hintsWithin(hints, from, length) {
|
|
99
|
-
const at = new Map();
|
|
100
|
-
for (const [position, syllable] of hints.at) {
|
|
101
|
-
if (position >= from && position < from + length) {
|
|
102
|
-
at.set(position - from, syllable);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return { words: hints.words, at };
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Whether a hint's characters are what stands at a position.
|
|
109
|
-
*/
|
|
110
|
-
function matchesAt(hint, characters, at) {
|
|
111
|
-
return hint.characters.every((character, index) => characters[at + index] === character);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* A caller's readings, put into a lattice that was built without them.
|
|
115
|
-
*
|
|
116
|
-
* Two kinds of hint with deliberately different reach, which is the whole of
|
|
117
|
-
* the semantics:
|
|
118
|
-
*
|
|
119
|
-
* A **word** hint is an assertion about the text it names, so it rewrites the
|
|
120
|
-
* edge spanning exactly those characters and supplies the single-character
|
|
121
|
-
* edges underneath it. It says nothing about a *longer* word that happens to
|
|
122
|
-
* contain it — a bare 长 hint leaves 校长 as `xiàozhǎng`, because the dictionary
|
|
123
|
-
* knowing 校长 is better evidence about that stretch than a caller's remark
|
|
124
|
-
* about one of its characters. That is what makes a corrections table safe to
|
|
125
|
-
* accumulate: entries do not reach into words nobody was thinking about.
|
|
126
|
-
*
|
|
127
|
-
* A **positional** hint is an assertion about one character of one text, and it
|
|
128
|
-
* is the escape hatch precisely because nothing outranks it: it rewrites every
|
|
129
|
-
* edge covering that position, the enclosing word included. Only a reading of
|
|
130
|
-
* one syllable per character can be rewritten this way; a 儿化 edge is a single
|
|
131
|
-
* claim about its whole span and there is no one syllable in it to replace.
|
|
132
|
-
*
|
|
133
|
-
* Nothing is invented that a caller did not write, and nothing is dropped: an
|
|
134
|
-
* edge whose reading no hint touches comes through as it was.
|
|
135
|
-
*/
|
|
136
|
-
export function applyHints(lattice, hints) {
|
|
137
|
-
const { characters } = lattice;
|
|
138
|
-
/** The word hint covering a position, and how far into it that position is. */
|
|
139
|
-
const wordAt = (at) => {
|
|
140
|
-
for (const hint of hints.words) {
|
|
141
|
-
if (hint.reading.length !== hint.characters.length) {
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
for (let held = 0; held < hint.characters.length; held++) {
|
|
145
|
-
if (at - held >= 0 && matchesAt(hint, characters, at - held)) {
|
|
146
|
-
return { hint, held };
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return undefined;
|
|
151
|
-
};
|
|
152
|
-
const rewrite = (edge) => {
|
|
153
|
-
const span = edge.to - edge.from;
|
|
154
|
-
// A word hint naming exactly this stretch replaces its reading outright,
|
|
155
|
-
// which is the only way a hint can reach a word the dictionary already has
|
|
156
|
-
// an opinion about: 银行 asserted as `yín xíng` has to beat `yínháng`.
|
|
157
|
-
const exact = hints.words.find((hint) => hint.characters.length === span &&
|
|
158
|
-
matchesAt(hint, characters, edge.from));
|
|
159
|
-
let reading = exact === undefined ? edge.reading : exact.reading;
|
|
160
|
-
// Everything below needs one syllable per character to have a syllable to
|
|
161
|
-
// put anywhere.
|
|
162
|
-
if (reading.length === span) {
|
|
163
|
-
reading = reading.map((syllable, index) => {
|
|
164
|
-
const at = edge.from + index;
|
|
165
|
-
const positional = hints.at.get(at);
|
|
166
|
-
if (positional !== undefined) {
|
|
167
|
-
return positional;
|
|
168
|
-
}
|
|
169
|
-
if (span > 1) {
|
|
170
|
-
return syllable;
|
|
171
|
-
}
|
|
172
|
-
// Single-character edges also take what a longer word hint says about
|
|
173
|
-
// this position, so that the split path reads the same as the whole.
|
|
174
|
-
const found = wordAt(at);
|
|
175
|
-
return found?.hint.reading[found.held] ?? syllable;
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
return reading === edge.reading ? edge : { ...edge, reading };
|
|
179
|
-
};
|
|
180
|
-
return {
|
|
181
|
-
characters,
|
|
182
|
-
edges: lattice.edges.map((edges, at) => {
|
|
183
|
-
const rewritten = edges.map((edge) => rewrite(edge));
|
|
184
|
-
// A hint spanning characters no edge covers has nowhere to be written, so
|
|
185
|
-
// it brings its own edge: 玩儿 as `wánr` where the dictionary lacks it.
|
|
186
|
-
const spanning = hints.words.find((hint) => hint.reading.length !== hint.characters.length &&
|
|
187
|
-
matchesAt(hint, characters, at) &&
|
|
188
|
-
!rewritten.some((edge) => edge.to === at + hint.characters.length));
|
|
189
|
-
if (spanning === undefined) {
|
|
190
|
-
return rewritten;
|
|
191
|
-
}
|
|
192
|
-
const to = at + spanning.characters.length;
|
|
193
|
-
return [
|
|
194
|
-
...rewritten,
|
|
195
|
-
{
|
|
196
|
-
from: at,
|
|
197
|
-
to,
|
|
198
|
-
text: spanning.characters.join(""),
|
|
199
|
-
reading: spanning.reading,
|
|
200
|
-
cost: UNKNOWN_COST,
|
|
201
|
-
readingCost: UNKNOWN_COST + READING_CHARGE,
|
|
202
|
-
isProperNoun: false,
|
|
203
|
-
partOfSpeech: "",
|
|
204
|
-
// No dictionary entry backs this one — that is the whole reason it
|
|
205
|
-
// had to be brought along — so it reports itself as the fallback it
|
|
206
|
-
// is. A hint written over an edge that *was* backed keeps that edge's
|
|
207
|
-
// own answer, since the entry still covers those characters.
|
|
208
|
-
isKnown: false,
|
|
209
|
-
},
|
|
210
|
-
];
|
|
211
|
-
}),
|
|
212
|
-
};
|
|
213
|
-
}
|
|
75
|
+
export { applyHints, hintsWithin, shiftHints } from "./hint-lattice.js";
|
|
214
76
|
//# sourceMappingURL=hints.js.map
|
package/dist/decode/hints.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hints.js","sourceRoot":"","sources":["../../src/decode/hints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAiB,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"hints.js","sourceRoot":"","sources":["../../src/decode/hints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a 教 is teaching or is the noun 教.
|
|
3
|
+
*
|
|
4
|
+
* Teaching takes an object or is followed by aspect, and only a verb takes
|
|
5
|
+
* either, so the tags around it are the evidence.
|
|
6
|
+
*/
|
|
7
|
+
import type { Syllable } from "../syllable/syllable.js";
|
|
8
|
+
import { type EdgeContext, type EdgeRule } from "./rules.js";
|
|
9
|
+
/**
|
|
10
|
+
* Whether a syllable is `jiāo`, the verbal reading of 教.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isJiao(syllable: Syllable | undefined): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* What a 教 that is teaching governs: the thing or the person taught.
|
|
15
|
+
*
|
|
16
|
+
* A pronoun, a common noun, a name or one of the tags jieba gives a subject —
|
|
17
|
+
* 教我, 教英语, 教历史, 教孩子, 教玛丽. `ns` is deliberately absent, since the
|
|
18
|
+
* only 教 with a place tag after it over the corpus is 教青局, an office.
|
|
19
|
+
*/
|
|
20
|
+
export declare const TAUGHT_TAGS: Set<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Whether the 教 at a position is teaching something to somebody.
|
|
23
|
+
*
|
|
24
|
+
* The object is what says so, which is the same shape the modal 得 rule takes:
|
|
25
|
+
* a 教 with a pronoun, a noun or a name after it is governing it, and a 教 with
|
|
26
|
+
* 了, 过, 着 or 得 after it is a verb whatever follows that. A particle in front
|
|
27
|
+
* of it rules it out, since a verb does not follow one.
|
|
28
|
+
*
|
|
29
|
+
* {@link GOVERNING} is the case where nothing follows to look at.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isTeachingAt(context: EdgeContext, at: number): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* 教 read as `jiāo` where it is teaching rather than a religion.
|
|
34
|
+
*
|
|
35
|
+
* The dictionary stores 教 as `jiào` with `jiāo` as an alternate, and `jiào` is
|
|
36
|
+
* right for the compounds — 教育, 教师, 宗教, 主教 — which are words and reach
|
|
37
|
+
* their reading through the word. What is left is the 教 that stands as a word
|
|
38
|
+
* of its own, and that one is the verb: 他在北京大学教了三年书 came out
|
|
39
|
+
* `jiàole sān nián shū`, and 我教英语, 谁教你法语 and 她教我如何游泳 with it.
|
|
40
|
+
* 教书 is a word and was always `jiāo shū`; nothing carried that across a 了.
|
|
41
|
+
*
|
|
42
|
+
* See {@link isTeachingAt} for what decides it. Forcing the single-character
|
|
43
|
+
* edge is not enough on its own, because a reading spanning two characters
|
|
44
|
+
* carries its own 教 into the position: 王老师教我们汉语 read `jiào` off 师教,
|
|
45
|
+
* and 来教我 off 来教. Those are pairs the dictionary holds with no part of
|
|
46
|
+
* speech and at the cost of a word nothing has ever counted — a reading rather
|
|
47
|
+
* than a word — so a *tagged* word ending in 教 is left alone, which is every
|
|
48
|
+
* one that matters: 任教, 宗教, 主教, 佛教, 传教, 执教, 请教, 家教.
|
|
49
|
+
*
|
|
50
|
+
* Measured over 88,866 lines of Tatoeba and zh.wikipedia, 181 教 decode as a
|
|
51
|
+
* word of their own and every one of them read `jiào`. This moves 162 to
|
|
52
|
+
* `jiāo` and is wrong on three: 统一教创始人, 方法教深思 and 做到了教政分离,
|
|
53
|
+
* where a nominal compound takes an object's shape, the last of them because
|
|
54
|
+
* 做到了 is a word and so the 了 in front is not a particle to look at. Of the
|
|
55
|
+
* 17 it leaves, 8 are right — 诸教中, 教外别传, 董教总, 风教, 教青局 twice, a
|
|
56
|
+
* 教室 reached through a bad split, and a 教 used as a bare noun — and 9 are
|
|
57
|
+
* misses, where jieba tags the object something this does not name.
|
|
58
|
+
*
|
|
59
|
+
* {@link GOVERNING} is four of that 162 and was added later: 能教教我,
|
|
60
|
+
* 要教一節課, 也會教像拉丁語, 這在學校是不教的. 有 is pointedly outside it,
|
|
61
|
+
* since 有教无类 is `yǒujiào wúlèi`.
|
|
62
|
+
*/
|
|
63
|
+
export declare const TEACHING_JIAO: EdgeRule;
|
|
64
|
+
//# sourceMappingURL=jiao-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jiao-rule.d.ts","sourceRoot":"","sources":["../../src/decode/jiao-rule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAId,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAI9D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,aAA8C,CAAC;AAkCvE;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAUtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,aAAa,EAAE,QAiB3B,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { ASPECT, PARTICLE_TAG, tagOf, wordEndingAt, wordStartingAt, } from "./rules.js";
|
|
2
|
+
/**
|
|
3
|
+
* Whether a syllable is `jiāo`, the verbal reading of 教.
|
|
4
|
+
*/
|
|
5
|
+
export function isJiao(syllable) {
|
|
6
|
+
return (syllable?.initial === "j" && syllable.final === "iao" && syllable.tone === 1);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* What a 教 that is teaching governs: the thing or the person taught.
|
|
10
|
+
*
|
|
11
|
+
* A pronoun, a common noun, a name or one of the tags jieba gives a subject —
|
|
12
|
+
* 教我, 教英语, 教历史, 教孩子, 教玛丽. `ns` is deliberately absent, since the
|
|
13
|
+
* only 教 with a place tag after it over the corpus is 教青局, an office.
|
|
14
|
+
*/
|
|
15
|
+
export const TAUGHT_TAGS = new Set(["r", "n", "nz", "nr", "nt", "ng"]);
|
|
16
|
+
/**
|
|
17
|
+
* The words that can only be governing a verb, whatever comes after them.
|
|
18
|
+
*
|
|
19
|
+
* The far side of the context, for the 教 that teaches nothing named:
|
|
20
|
+
* 他怎么教,我都学不会, 你没能力教, 这在学校是不教的, 有时也会教. A modal or a
|
|
21
|
+
* negator has to be followed by a verb, so the 教 after one is the verb even
|
|
22
|
+
* where nothing at all follows it.
|
|
23
|
+
*
|
|
24
|
+
* Written out rather than taken from a tag, for the reason the 长 rule gives:
|
|
25
|
+
* jieba calls 会 `v` along with every other verb and 怎么 `r` along with every
|
|
26
|
+
* pronoun, so neither tag names this set.
|
|
27
|
+
*/
|
|
28
|
+
const GOVERNING = new Set([
|
|
29
|
+
"不",
|
|
30
|
+
"能",
|
|
31
|
+
"会",
|
|
32
|
+
"會",
|
|
33
|
+
"要",
|
|
34
|
+
"想",
|
|
35
|
+
"该",
|
|
36
|
+
"該",
|
|
37
|
+
"也",
|
|
38
|
+
"别",
|
|
39
|
+
"別",
|
|
40
|
+
"没",
|
|
41
|
+
"沒",
|
|
42
|
+
"怎么",
|
|
43
|
+
"怎麼",
|
|
44
|
+
"怎样",
|
|
45
|
+
"怎樣",
|
|
46
|
+
]);
|
|
47
|
+
/**
|
|
48
|
+
* Whether the 教 at a position is teaching something to somebody.
|
|
49
|
+
*
|
|
50
|
+
* The object is what says so, which is the same shape the modal 得 rule takes:
|
|
51
|
+
* a 教 with a pronoun, a noun or a name after it is governing it, and a 教 with
|
|
52
|
+
* 了, 过, 着 or 得 after it is a verb whatever follows that. A particle in front
|
|
53
|
+
* of it rules it out, since a verb does not follow one.
|
|
54
|
+
*
|
|
55
|
+
* {@link GOVERNING} is the case where nothing follows to look at.
|
|
56
|
+
*/
|
|
57
|
+
export function isTeachingAt(context, at) {
|
|
58
|
+
const before = wordEndingAt(context, at);
|
|
59
|
+
if (tagOf(context, before).startsWith(PARTICLE_TAG)) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return (GOVERNING.has(before ?? "") ||
|
|
63
|
+
ASPECT.has(context.characters[at + 1] ?? "") ||
|
|
64
|
+
TAUGHT_TAGS.has(tagOf(context, wordStartingAt(context, at + 1))));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 教 read as `jiāo` where it is teaching rather than a religion.
|
|
68
|
+
*
|
|
69
|
+
* The dictionary stores 教 as `jiào` with `jiāo` as an alternate, and `jiào` is
|
|
70
|
+
* right for the compounds — 教育, 教师, 宗教, 主教 — which are words and reach
|
|
71
|
+
* their reading through the word. What is left is the 教 that stands as a word
|
|
72
|
+
* of its own, and that one is the verb: 他在北京大学教了三年书 came out
|
|
73
|
+
* `jiàole sān nián shū`, and 我教英语, 谁教你法语 and 她教我如何游泳 with it.
|
|
74
|
+
* 教书 is a word and was always `jiāo shū`; nothing carried that across a 了.
|
|
75
|
+
*
|
|
76
|
+
* See {@link isTeachingAt} for what decides it. Forcing the single-character
|
|
77
|
+
* edge is not enough on its own, because a reading spanning two characters
|
|
78
|
+
* carries its own 教 into the position: 王老师教我们汉语 read `jiào` off 师教,
|
|
79
|
+
* and 来教我 off 来教. Those are pairs the dictionary holds with no part of
|
|
80
|
+
* speech and at the cost of a word nothing has ever counted — a reading rather
|
|
81
|
+
* than a word — so a *tagged* word ending in 教 is left alone, which is every
|
|
82
|
+
* one that matters: 任教, 宗教, 主教, 佛教, 传教, 执教, 请教, 家教.
|
|
83
|
+
*
|
|
84
|
+
* Measured over 88,866 lines of Tatoeba and zh.wikipedia, 181 教 decode as a
|
|
85
|
+
* word of their own and every one of them read `jiào`. This moves 162 to
|
|
86
|
+
* `jiāo` and is wrong on three: 统一教创始人, 方法教深思 and 做到了教政分离,
|
|
87
|
+
* where a nominal compound takes an object's shape, the last of them because
|
|
88
|
+
* 做到了 is a word and so the 了 in front is not a particle to look at. Of the
|
|
89
|
+
* 17 it leaves, 8 are right — 诸教中, 教外别传, 董教总, 风教, 教青局 twice, a
|
|
90
|
+
* 教室 reached through a bad split, and a 教 used as a bare noun — and 9 are
|
|
91
|
+
* misses, where jieba tags the object something this does not name.
|
|
92
|
+
*
|
|
93
|
+
* {@link GOVERNING} is four of that 162 and was added later: 能教教我,
|
|
94
|
+
* 要教一節課, 也會教像拉丁語, 這在學校是不教的. 有 is pointedly outside it,
|
|
95
|
+
* since 有教无类 is `yǒujiào wúlèi`.
|
|
96
|
+
*/
|
|
97
|
+
export const TEACHING_JIAO = {
|
|
98
|
+
name: "teaching-jiao",
|
|
99
|
+
verdictFor: (context) => {
|
|
100
|
+
const { edge } = context;
|
|
101
|
+
if (edge.text === "教") {
|
|
102
|
+
return isJiao(edge.reading[0]) && isTeachingAt(context, edge.from)
|
|
103
|
+
? "force"
|
|
104
|
+
: "keep";
|
|
105
|
+
}
|
|
106
|
+
return edge.partOfSpeech === "" &&
|
|
107
|
+
edge.text.endsWith("教") &&
|
|
108
|
+
edge.reading.length === edge.to - edge.from &&
|
|
109
|
+
!isJiao(edge.reading.at(-1)) &&
|
|
110
|
+
isTeachingAt(context, edge.to - 1)
|
|
111
|
+
? "forbid"
|
|
112
|
+
: "keep";
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=jiao-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jiao-rule.js","sourceRoot":"","sources":["../../src/decode/jiao-rule.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,MAAM,EACN,YAAY,EAGZ,KAAK,EACL,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,QAA8B;IACnD,OAAO,CACL,QAAQ,EAAE,OAAO,KAAK,GAAG,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,CAC7E,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvE;;;;;;;;;;;GAWG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB,EAAE,EAAU;IAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,IAAI,EAAE,eAAe;IACrB,UAAU,EAAE,CAAC,OAAoB,EAAE,EAAE;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChE,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,MAAM,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,KAAK,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;YAC3C,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,CAAC;IACb,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the lattice cost, forwards and backwards.
|
|
3
|
+
*
|
|
4
|
+
* The two sweeps a confidence score is read off: the cheapest way into every
|
|
5
|
+
* position and the cheapest way out of it. An edge is uncertain exactly where
|
|
6
|
+
* some rival edge over the same characters costs nearly as little.
|
|
7
|
+
*/
|
|
8
|
+
import type { ReadingUnit } from "./locking.js";
|
|
9
|
+
import type { Lattice, LatticeEdge } from "./lattice.js";
|
|
10
|
+
import type { CostOf } from "./viterbi.js";
|
|
11
|
+
/**
|
|
12
|
+
* One distinct reading claimed in a stretch, and what claiming it costs.
|
|
13
|
+
*/
|
|
14
|
+
export interface ScoredClaim {
|
|
15
|
+
readonly unit: ReadingUnit;
|
|
16
|
+
readonly cost: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Every distinct reading claimed in a stretch, and the stretch's own best cost.
|
|
20
|
+
*/
|
|
21
|
+
export interface ScoredStretch {
|
|
22
|
+
readonly claims: ReadonlyMap<string, ScoredClaim>;
|
|
23
|
+
readonly best: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The edges leaving one position.
|
|
27
|
+
*/
|
|
28
|
+
export declare function edgesAt(lattice: Lattice, at: number): readonly LatticeEdge[];
|
|
29
|
+
/**
|
|
30
|
+
* Every edge lying wholly inside a stretch.
|
|
31
|
+
*/
|
|
32
|
+
export declare function edgesInside(lattice: Lattice, from: number, to: number): readonly LatticeEdge[];
|
|
33
|
+
/**
|
|
34
|
+
* Cheapest cost of reaching each position in a stretch from its start.
|
|
35
|
+
*/
|
|
36
|
+
export declare function forwardCosts(lattice: Lattice, from: number, to: number, costOf: CostOf): readonly number[];
|
|
37
|
+
/**
|
|
38
|
+
* Cheapest cost of reaching the end of a stretch from each position in it.
|
|
39
|
+
*/
|
|
40
|
+
export declare function backwardCosts(lattice: Lattice, from: number, to: number, costOf: CostOf): readonly number[];
|
|
41
|
+
/**
|
|
42
|
+
* Price every distinct reading a stretch offers.
|
|
43
|
+
*
|
|
44
|
+
* A claim is priced by the cheapest path through the whole stretch that makes
|
|
45
|
+
* it, which is what makes the figures comparable: a reading can be expensive
|
|
46
|
+
* because it forces expensive readings around it as much as because it is
|
|
47
|
+
* itself unlikely. One forward sweep and one backward sweep give that for every
|
|
48
|
+
* edge at once, which is the same work the decode already does in one
|
|
49
|
+
* direction.
|
|
50
|
+
*/
|
|
51
|
+
export declare function scoreClaims(lattice: Lattice, from: number, to: number, costOf: CostOf): ScoredStretch;
|
|
52
|
+
/**
|
|
53
|
+
* What a unit beat: the claims overlapping its span, other than its own.
|
|
54
|
+
*/
|
|
55
|
+
//# sourceMappingURL=lattice-costs.d.ts.map
|