@kensio/pinyinjs 1.7.11 → 1.7.13
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/decode/reading-rules.d.ts +1 -0
- package/dist/decode/reading-rules.d.ts.map +1 -1
- package/dist/decode/reading-rules.js +3 -0
- package/dist/decode/reading-rules.js.map +1 -1
- package/dist/decode/split-rule.d.ts +43 -0
- package/dist/decode/split-rule.d.ts.map +1 -0
- package/dist/decode/split-rule.js +174 -0
- package/dist/decode/split-rule.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/orthography/apostrophe.d.ts.map +1 -1
- package/dist/orthography/apostrophe.js +13 -5
- package/dist/orthography/apostrophe.js.map +1 -1
- package/dist/syllable/run-tables.d.ts +45 -0
- package/dist/syllable/run-tables.d.ts.map +1 -0
- package/dist/syllable/run-tables.js +103 -0
- package/dist/syllable/run-tables.js.map +1 -0
- package/dist/syllable/segment-run.d.ts +10 -0
- package/dist/syllable/segment-run.d.ts.map +1 -0
- package/dist/syllable/segment-run.js +116 -0
- package/dist/syllable/segment-run.js.map +1 -0
- package/dist/syllable/split.d.ts.map +1 -1
- package/dist/syllable/split.js +3 -72
- package/dist/syllable/split.js.map +1 -1
- package/dist/tone/tone-mark.d.ts +8 -0
- package/dist/tone/tone-mark.d.ts.map +1 -1
- package/dist/tone/tone-mark.js +10 -0
- package/dist/tone/tone-mark.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,6 +2,7 @@ export { MODAL_DE, PARTICLE_DE, POTENTIAL_DE } from "./de-rule.js";
|
|
|
2
2
|
export { TAXI_DI } from "./taxi-rule.js";
|
|
3
3
|
export { EXPERIENTIAL_GUO } from "./guo-rule.js";
|
|
4
4
|
export { TEACHING_JIAO } from "./jiao-rule.js";
|
|
5
|
+
export { SEPARATED_COMPOUND } from "./split-rule.js";
|
|
5
6
|
import { type EdgeRule } from "./rules.js";
|
|
6
7
|
/**
|
|
7
8
|
* 儿 does not stand on its own where the dictionary attests the 儿化.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reading-rules.d.ts","sourceRoot":"","sources":["../../src/decode/reading-rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reading-rules.d.ts","sourceRoot":"","sources":["../../src/decode/reading-rules.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,cAAc,EAAE,QAY5B,CAAC;AAsCF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,eAAe,EAAE,QAuB7B,CAAC;AAIF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,QAAQ,EAY5C,CAAC"}
|
|
@@ -3,10 +3,12 @@ import { MODAL_DE, PARTICLE_DE, POTENTIAL_DE } from "./de-rule.js";
|
|
|
3
3
|
import { TAXI_DI } from "./taxi-rule.js";
|
|
4
4
|
import { EXPERIENTIAL_GUO } from "./guo-rule.js";
|
|
5
5
|
import { TEACHING_JIAO } from "./jiao-rule.js";
|
|
6
|
+
import { SEPARATED_COMPOUND } from "./split-rule.js";
|
|
6
7
|
export { MODAL_DE, PARTICLE_DE, POTENTIAL_DE } from "./de-rule.js";
|
|
7
8
|
export { TAXI_DI } from "./taxi-rule.js";
|
|
8
9
|
export { EXPERIENTIAL_GUO } from "./guo-rule.js";
|
|
9
10
|
export { TEACHING_JIAO } from "./jiao-rule.js";
|
|
11
|
+
export { SEPARATED_COMPOUND } from "./split-rule.js";
|
|
10
12
|
import { toCharacters } from "../script/characters.js";
|
|
11
13
|
import { tagOf, wordEndingAt, } from "./rules.js";
|
|
12
14
|
/**
|
|
@@ -141,5 +143,6 @@ export const READING_RULES = [
|
|
|
141
143
|
ADJECTIVAL_CHANG,
|
|
142
144
|
PLAYING_TAN,
|
|
143
145
|
EXPERIENTIAL_GUO,
|
|
146
|
+
SEPARATED_COMPOUND,
|
|
144
147
|
];
|
|
145
148
|
//# sourceMappingURL=reading-rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reading-rules.js","sourceRoot":"","sources":["../../src/decode/reading-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"reading-rules.js","sourceRoot":"","sources":["../../src/decode/reading-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type EdgeRule } from "./rules.js";
|
|
2
|
+
/**
|
|
3
|
+
* A 离合词 keeps its reading when a 量词 is pushed into the middle of it.
|
|
4
|
+
*
|
|
5
|
+
* 请假 is `qǐngjià` and 请个假 came out `qǐng gè jiǎ`, because the word the
|
|
6
|
+
* reading hangs on is no longer there to be matched and each half falls back on
|
|
7
|
+
* its character's default. 睡个觉 went to `jué`, 弹个琴 to `dàn`, 教个书 to
|
|
8
|
+
* `jiào` and 有个空 to `kōng`, all of them the reading the compound exists to
|
|
9
|
+
* rule out. Nothing here is new about the characters. The dictionary already
|
|
10
|
+
* holds `jià` as an alternate of 假 and already states that 请假 is `qǐng jià`.
|
|
11
|
+
* What was missing is that the second fact reaches the first across a 个.
|
|
12
|
+
*
|
|
13
|
+
* A 离合词 is a verb and its object written as one word, so the halves come
|
|
14
|
+
* apart and take an infix between them the way no other compound does. The
|
|
15
|
+
* classifier is the commonest infix, and that is what makes the shape
|
|
16
|
+
* decidable. See {@link separatedSyllableAt} for the three conditions and
|
|
17
|
+
* {@link CLASSIFIER} for why no other 量词 is in.
|
|
18
|
+
*
|
|
19
|
+
* Both halves are settled, because either can be the polyphone. 请个假 and
|
|
20
|
+
* 睡个觉 misread the tail, 弹个琴 and 教个书 the head.
|
|
21
|
+
*
|
|
22
|
+
* Measured over the same 88,866 lines of Tatoeba and zh.wikipedia the other
|
|
23
|
+
* rules were sized against, 2,018 head-个-tail shapes have a dictionary pair
|
|
24
|
+
* behind them. The conditions admit 3 and all 3 are corrections (请个假 to
|
|
25
|
+
* `jià`, 打个折 to `zhé` and 睡個覺 to `jiào`). The 66 they decline are pairs the
|
|
26
|
+
* index happens to hold (两个都 off 两都, 一个和 off 一和, 那个是 off 那是,
|
|
27
|
+
* 一个只 off 一只), where no word was ever split in two, and the verb-head
|
|
28
|
+
* condition alone accounts for 44 of them.
|
|
29
|
+
*
|
|
30
|
+
* The one real firing given up is 瞅个空 for `kòng`, which 瞅空 would carry if
|
|
31
|
+
* an untagged pair were allowed to. It goes with 是个甚, and that trade is the
|
|
32
|
+
* right way round, since the corpus has one of each and admitting untagged
|
|
33
|
+
* pairs opens the rule to 720,000 keys nobody counted.
|
|
34
|
+
*
|
|
35
|
+
* The measurement is thin because the shape is rare in written text, so the
|
|
36
|
+
* conditions were sized against the dictionary as well. 2,994 tagged pairs with
|
|
37
|
+
* a verb in front hold a half whose reading differs from its character's
|
|
38
|
+
* default, and they are led by 认为, 获得, 关系 and 告诉, none of which any 个
|
|
39
|
+
* can be pushed into. The rule never reaches them, since it fires on a 个 that
|
|
40
|
+
* is written rather than on a pair that exists.
|
|
41
|
+
*/
|
|
42
|
+
export declare const SEPARATED_COMPOUND: EdgeRule;
|
|
43
|
+
//# sourceMappingURL=split-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-rule.d.ts","sourceRoot":"","sources":["../../src/decode/split-rule.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,YAAY,CAAC;AA+HpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAehC,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a 离合词 is read once a 量词 has been pushed into the middle of it.
|
|
3
|
+
*
|
|
4
|
+
* 请假 is one word and carries one reading. 请个假 is the same word with a
|
|
5
|
+
* classifier inside it, and the halves are left standing on their own.
|
|
6
|
+
*/
|
|
7
|
+
import { isSameSyllable } from "../dictionary/entry.js";
|
|
8
|
+
import { toCharacters } from "../script/characters.js";
|
|
9
|
+
import { tagOf, wordsStartingAt, } from "./rules.js";
|
|
10
|
+
/**
|
|
11
|
+
* The classifier that separates the halves, in both scripts.
|
|
12
|
+
*
|
|
13
|
+
* 个 alone, and the measurement below is the reason. Every other 量词 was tried
|
|
14
|
+
* and the noise buried the signal. The dictionary tags 道, 名, 家, 子, 口 and 集
|
|
15
|
+
* `q` too, and those spend almost all of their time as ordinary morphemes, so
|
|
16
|
+
* 知道了 read its 了 as `liǎo` off 知了 and 有道理 its 理 as `lǐ` off 有理.
|
|
17
|
+
* Widening to the whole `q` tag carries the rule from 3 firings to 109, of
|
|
18
|
+
* which 46 are that one 知道了.
|
|
19
|
+
*
|
|
20
|
+
* 下 and 回 are outside it for a different reason. Both separate a compound
|
|
21
|
+
* readily enough, but both also head a directional complement, and 坐下来,
|
|
22
|
+
* 拿回来 and 生下来 all end in a 来 that is neutral where the compound behind
|
|
23
|
+
* them says `lái`. Adding the pair costs 34 wrong firings to gain none.
|
|
24
|
+
*/
|
|
25
|
+
const CLASSIFIER = new Set(["个", "個"]);
|
|
26
|
+
/**
|
|
27
|
+
* The tag prefix jieba gives a verb.
|
|
28
|
+
*
|
|
29
|
+
* A prefix, so that `vn` and `vd` are in. 有空 is tagged `vn`.
|
|
30
|
+
*/
|
|
31
|
+
const VERB_TAG = "v";
|
|
32
|
+
/**
|
|
33
|
+
* The two halves a classifier separates at a position, or undefined.
|
|
34
|
+
*
|
|
35
|
+
* The position is one half of the pair and the classifier says which. A 个 in
|
|
36
|
+
* front of it makes it the tail, and a 个 behind it makes it the head. Both are
|
|
37
|
+
* wanted, because either half can be the polyphone. 请个假 misreads the 假 and
|
|
38
|
+
* 弹个琴 the 弹.
|
|
39
|
+
*/
|
|
40
|
+
function separatedAt(context, at) {
|
|
41
|
+
const { characters } = context;
|
|
42
|
+
if (CLASSIFIER.has(characters[at + 1] ?? "") && at + 2 < characters.length) {
|
|
43
|
+
return {
|
|
44
|
+
/* c8 ignore next -- both positions are inside the run just measured */
|
|
45
|
+
word: `${characters[at] ?? ""}${characters[at + 2] ?? ""}`,
|
|
46
|
+
offset: 0,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (CLASSIFIER.has(characters[at - 1] ?? "") && at >= 2) {
|
|
50
|
+
return {
|
|
51
|
+
/* c8 ignore next -- both positions are inside the run just measured */
|
|
52
|
+
word: `${characters[at - 2] ?? ""}${characters[at] ?? ""}`,
|
|
53
|
+
offset: 1,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Whether a tagged word of more than one character starts at a position.
|
|
60
|
+
*
|
|
61
|
+
* The guard that keeps the rule off a 个 that is counting the word after it.
|
|
62
|
+
* 我看见那儿有个奇怪的女人 has 有奇 behind it, a key meaning *and a fraction
|
|
63
|
+
* more*, and forcing its `jī` onto a 奇 that opens 奇怪 is the one wrong firing
|
|
64
|
+
* the corpus offers. A tag is asked for and not merely a key, because the full
|
|
65
|
+
* tier holds 720,000 of them and 打个折么 finds 折么 that way. The tag is the
|
|
66
|
+
* record that somebody counted the word.
|
|
67
|
+
*/
|
|
68
|
+
function opensTaggedWord(context, at) {
|
|
69
|
+
return wordsStartingAt(context, at).some((word) => toCharacters(word).length > 1 && tagOf(context, word) !== "");
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The syllable a separated compound gives one of its halves, or undefined.
|
|
73
|
+
*
|
|
74
|
+
* Three things have to hold, and each one is carrying its weight over the
|
|
75
|
+
* corpus. The pair has to be a word the dictionary tags, since an untagged key
|
|
76
|
+
* is a reading somebody recorded rather than a word anybody counted, and
|
|
77
|
+
* 是个甚么 finds 是甚 that way and would read its 甚 as `shèn`. The character in
|
|
78
|
+
* front has to be a verb. That is what separates 请个假 from 一个只, 两个都 and
|
|
79
|
+
* 八个行, where the 个 counts the numeral in front of it and the pair behind is
|
|
80
|
+
* an accident. And the far half has to stand clear of a tagged word of its own,
|
|
81
|
+
* for the reason {@link opensTaggedWord} gives.
|
|
82
|
+
*/
|
|
83
|
+
function separatedSyllableAt(context, at) {
|
|
84
|
+
const separated = separatedAt(context, at);
|
|
85
|
+
if (separated === undefined) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
const { word, offset } = separated;
|
|
89
|
+
const entry = context.dictionary.lookup(word);
|
|
90
|
+
if (entry?.reading.length !== 2 || entry.partOfSpeech === "") {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
const [head = ""] = toCharacters(word);
|
|
94
|
+
if (!tagOf(context, head).startsWith(VERB_TAG)) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const tail = offset === 1 ? at : at + 2;
|
|
98
|
+
return opensTaggedWord(context, tail) ? undefined : entry.reading[offset];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Whether a pair the dictionary holds carries the unseparated reading across.
|
|
102
|
+
*
|
|
103
|
+
* Forcing the single-character edge settles nothing on its own, for the reason
|
|
104
|
+
* {@link TEACHING_JIAO} gives. A reading spanning two characters brings its own
|
|
105
|
+
* half with it. 能给我打个折么 read `shémǒ` off 折么, a key the dictionary holds
|
|
106
|
+
* with no part of speech and at the cost of a word nothing has ever counted.
|
|
107
|
+
* A *tagged* word is left alone, which is every one that matters.
|
|
108
|
+
*/
|
|
109
|
+
function carriesReading(context, edge) {
|
|
110
|
+
if (edge.partOfSpeech !== "" || edge.reading.length !== edge.to - edge.from) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
return edge.reading.some((syllable, offset) => {
|
|
114
|
+
const said = separatedSyllableAt(context, edge.from + offset);
|
|
115
|
+
return said !== undefined && !isSameSyllable(syllable, said);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* A 离合词 keeps its reading when a 量词 is pushed into the middle of it.
|
|
120
|
+
*
|
|
121
|
+
* 请假 is `qǐngjià` and 请个假 came out `qǐng gè jiǎ`, because the word the
|
|
122
|
+
* reading hangs on is no longer there to be matched and each half falls back on
|
|
123
|
+
* its character's default. 睡个觉 went to `jué`, 弹个琴 to `dàn`, 教个书 to
|
|
124
|
+
* `jiào` and 有个空 to `kōng`, all of them the reading the compound exists to
|
|
125
|
+
* rule out. Nothing here is new about the characters. The dictionary already
|
|
126
|
+
* holds `jià` as an alternate of 假 and already states that 请假 is `qǐng jià`.
|
|
127
|
+
* What was missing is that the second fact reaches the first across a 个.
|
|
128
|
+
*
|
|
129
|
+
* A 离合词 is a verb and its object written as one word, so the halves come
|
|
130
|
+
* apart and take an infix between them the way no other compound does. The
|
|
131
|
+
* classifier is the commonest infix, and that is what makes the shape
|
|
132
|
+
* decidable. See {@link separatedSyllableAt} for the three conditions and
|
|
133
|
+
* {@link CLASSIFIER} for why no other 量词 is in.
|
|
134
|
+
*
|
|
135
|
+
* Both halves are settled, because either can be the polyphone. 请个假 and
|
|
136
|
+
* 睡个觉 misread the tail, 弹个琴 and 教个书 the head.
|
|
137
|
+
*
|
|
138
|
+
* Measured over the same 88,866 lines of Tatoeba and zh.wikipedia the other
|
|
139
|
+
* rules were sized against, 2,018 head-个-tail shapes have a dictionary pair
|
|
140
|
+
* behind them. The conditions admit 3 and all 3 are corrections (请个假 to
|
|
141
|
+
* `jià`, 打个折 to `zhé` and 睡個覺 to `jiào`). The 66 they decline are pairs the
|
|
142
|
+
* index happens to hold (两个都 off 两都, 一个和 off 一和, 那个是 off 那是,
|
|
143
|
+
* 一个只 off 一只), where no word was ever split in two, and the verb-head
|
|
144
|
+
* condition alone accounts for 44 of them.
|
|
145
|
+
*
|
|
146
|
+
* The one real firing given up is 瞅个空 for `kòng`, which 瞅空 would carry if
|
|
147
|
+
* an untagged pair were allowed to. It goes with 是个甚, and that trade is the
|
|
148
|
+
* right way round, since the corpus has one of each and admitting untagged
|
|
149
|
+
* pairs opens the rule to 720,000 keys nobody counted.
|
|
150
|
+
*
|
|
151
|
+
* The measurement is thin because the shape is rare in written text, so the
|
|
152
|
+
* conditions were sized against the dictionary as well. 2,994 tagged pairs with
|
|
153
|
+
* a verb in front hold a half whose reading differs from its character's
|
|
154
|
+
* default, and they are led by 认为, 获得, 关系 and 告诉, none of which any 个
|
|
155
|
+
* can be pushed into. The rule never reaches them, since it fires on a 个 that
|
|
156
|
+
* is written rather than on a pair that exists.
|
|
157
|
+
*/
|
|
158
|
+
export const SEPARATED_COMPOUND = {
|
|
159
|
+
name: "separated-compound",
|
|
160
|
+
verdictFor: (context) => {
|
|
161
|
+
const { edge } = context;
|
|
162
|
+
if (edge.to - edge.from !== 1 || edge.reading.length !== 1) {
|
|
163
|
+
return carriesReading(context, edge) ? "forbid" : "keep";
|
|
164
|
+
}
|
|
165
|
+
const said = separatedSyllableAt(context, edge.from);
|
|
166
|
+
const here = edge.reading[0];
|
|
167
|
+
/* c8 ignore next -- a one-syllable reading has a syllable at zero */
|
|
168
|
+
if (said === undefined || here === undefined) {
|
|
169
|
+
return "keep";
|
|
170
|
+
}
|
|
171
|
+
return isSameSyllable(here, said) ? "force" : "keep";
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=split-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-rule.js","sourceRoot":"","sources":["../../src/decode/split-rule.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ export type { ReadingProjection, ReadingUnit } from "./decode/locking.js";
|
|
|
51
51
|
export { applyEdgeRules, tagOf, wordEndingAt, wordStartingAt, } from "./decode/rules.js";
|
|
52
52
|
export type { EdgeContext, EdgeRule, EdgeVerdict } from "./decode/rules.js";
|
|
53
53
|
export type { PositionalReading, ReadingHint, ReadingHints, WordReading, } from "./decode/hints.js";
|
|
54
|
-
export { ADJECTIVAL_CHANG, ATTESTED_ERHUA, COUNTED_MEASURE, EXPERIENTIAL_GUO, MODAL_DE, PARTICLE_DE, PLAYING_TAN, POTENTIAL_DE, READING_RULES, TAXI_DI, TEACHING_JIAO, } from "./decode/reading-rules.js";
|
|
54
|
+
export { ADJECTIVAL_CHANG, ATTESTED_ERHUA, COUNTED_MEASURE, EXPERIENTIAL_GUO, MODAL_DE, PARTICLE_DE, PLAYING_TAN, POTENTIAL_DE, READING_RULES, SEPARATED_COMPOUND, TAXI_DI, TEACHING_JIAO, } from "./decode/reading-rules.js";
|
|
55
55
|
export { readingCost, shortestPath, spacingCost } from "./decode/viterbi.js";
|
|
56
56
|
export type { CostOf } from "./decode/viterbi.js";
|
|
57
57
|
export type { DecodedWord, ScoredWord, WordSeparator } from "./decode/word.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ export { buildScriptTables } from "./dictionary/script-tables.js";
|
|
|
31
31
|
export { allEdges, buildLattice, cutPoints, READING_CHARGE, } from "./decode/lattice.js";
|
|
32
32
|
export { isSettled, projectReadings, settledUnits, unitsOf, } from "./decode/locking.js";
|
|
33
33
|
export { applyEdgeRules, tagOf, wordEndingAt, wordStartingAt, } from "./decode/rules.js";
|
|
34
|
-
export { ADJECTIVAL_CHANG, ATTESTED_ERHUA, COUNTED_MEASURE, EXPERIENTIAL_GUO, MODAL_DE, PARTICLE_DE, PLAYING_TAN, POTENTIAL_DE, READING_RULES, TAXI_DI, TEACHING_JIAO, } from "./decode/reading-rules.js";
|
|
34
|
+
export { ADJECTIVAL_CHANG, ATTESTED_ERHUA, COUNTED_MEASURE, EXPERIENTIAL_GUO, MODAL_DE, PARTICLE_DE, PLAYING_TAN, POTENTIAL_DE, READING_RULES, SEPARATED_COMPOUND, TAXI_DI, TEACHING_JIAO, } from "./decode/reading-rules.js";
|
|
35
35
|
export { readingCost, shortestPath, spacingCost } from "./decode/viterbi.js";
|
|
36
36
|
export { cardinalHanzi, LARGEST_CARDINAL } from "./numerals/cardinal.js";
|
|
37
37
|
export { DIGIT_CHARACTERS, numeralSyllable, QUANTITY_CHARACTERS, UNIT_VALUES, yaoSyllable, } from "./numerals/characters.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apostrophe.d.ts","sourceRoot":"","sources":["../../src/orthography/apostrophe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"apostrophe.d.ts","sourceRoot":"","sources":["../../src/orthography/apostrophe.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAgC9D;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,KAAK,GAAE,eAA0B,GAChC,MAAM,CAER;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,KAAK,GAAE,eAA0B,GAChC,SAAS,MAAM,EAAE,CAcnB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { stripToneMarks } from "../tone/tone-mark.js";
|
|
1
2
|
import { isSeparableStart } from "../syllable/separation.js";
|
|
2
3
|
import { splitSyllables } from "../syllable/split.js";
|
|
3
4
|
/**
|
|
@@ -10,14 +11,21 @@ const APOSTROPHE = "'";
|
|
|
10
11
|
* apostrophes.
|
|
11
12
|
*
|
|
12
13
|
* Asked of the reader rather than of a rule, by putting the question to the
|
|
13
|
-
* same splitter that parses input: `
|
|
14
|
-
* needs nothing, where `
|
|
14
|
+
* same splitter that parses input: `haiou` comes apart as `hai` + `ou` and so
|
|
15
|
+
* needs nothing, where `Xian` reads as the single syllable `xian` and does.
|
|
15
16
|
* A word the splitter cannot read at all counts as ambiguous.
|
|
17
|
+
*
|
|
18
|
+
* Asked of the letters, with the tone marks stripped off first. The splitter
|
|
19
|
+
* reads a mark as evidence of where a syllable ends, which would answer that
|
|
20
|
+
* `Xīān` is clear enough and leave 西安 without its 隔音符号. The apostrophe is
|
|
21
|
+
* there for the letters, and a text that writes no tones at all needs it just
|
|
22
|
+
* the same.
|
|
16
23
|
*/
|
|
17
24
|
function isUnambiguous(syllables) {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
const toneless = syllables.map((syllable) => stripToneMarks(syllable));
|
|
26
|
+
const split = splitSyllables(toneless.join(""));
|
|
27
|
+
return (split?.length === toneless.length &&
|
|
28
|
+
split.every((read, at) => read === toneless[at]));
|
|
21
29
|
}
|
|
22
30
|
/**
|
|
23
31
|
* Join a word's syllables, writing the 隔音符号 where the orthography wants it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apostrophe.js","sourceRoot":"","sources":["../../src/orthography/apostrophe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAYtD;;;GAGG;AACH,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB
|
|
1
|
+
{"version":3,"file":"apostrophe.js","sourceRoot":"","sources":["../../src/orthography/apostrophe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAYtD;;;GAGG;AACH,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;;;;;;;;;;GAcG;AACH,SAAS,aAAa,CAAC,SAA4B;IACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,OAAO,CACL,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM;QACjC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,SAA4B,EAC5B,KAAK,GAAoB,QAAQ;IAEjC,OAAO,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CACtB,SAA4B,EAC5B,KAAK,GAAoB,QAAQ;IAEjC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAC5C,EAAE,GAAG,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC;QAClC,CAAC,CAAC,GAAG,UAAU,GAAG,QAAQ,EAAE;QAC5B,CAAC,CAAC,QAAQ,CACb,CAAC;IAEF,IACE,KAAK,KAAK,OAAO;QACjB,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EACpD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,KAAK,UAAU,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type Syllable } from "./syllable.js";
|
|
2
|
+
/**
|
|
3
|
+
* How long a written syllable can be, and so how far ahead a reading looks.
|
|
4
|
+
*
|
|
5
|
+
* The longest spelling in the inventory is `zhuang` at six letters, and the
|
|
6
|
+
* rest is what hangs off one: the r of 儿化, a tone digit or the raised form of
|
|
7
|
+
* it, `u:` where ü is typed that way, and a combining mark where the input
|
|
8
|
+
* arrives decomposed. Two of those cannot both be there, which leaves the
|
|
9
|
+
* longest piece worth reading two characters short of this.
|
|
10
|
+
*/
|
|
11
|
+
export declare const LONGEST_SYLLABLE: number;
|
|
12
|
+
/**
|
|
13
|
+
* What the two passes over a run share.
|
|
14
|
+
*
|
|
15
|
+
* Both try the same pieces, and reading one costs a Unicode normalisation and
|
|
16
|
+
* a walk through the tables, so each piece is read once and remembered.
|
|
17
|
+
* `marksBefore` counts the tone marks in front of every position, which turns
|
|
18
|
+
* counting the marks on a piece into a subtraction, and `isSeparableAt` says
|
|
19
|
+
* of every position whether a syllable starting there would need an apostrophe
|
|
20
|
+
* before it.
|
|
21
|
+
*/
|
|
22
|
+
export interface RunTables {
|
|
23
|
+
readonly marksBefore: readonly number[];
|
|
24
|
+
readonly isSeparableAt: readonly boolean[];
|
|
25
|
+
readonly syllables: Map<string, Syllable | undefined>;
|
|
26
|
+
readonly wellMarked: Map<string, boolean>;
|
|
27
|
+
readonly attested: Map<string, boolean>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The tables for one run, read off its characters in a single pass.
|
|
31
|
+
*/
|
|
32
|
+
export declare function tablesFor(run: string): RunTables;
|
|
33
|
+
/**
|
|
34
|
+
* Read a piece of the run as a syllable, remembering what it read.
|
|
35
|
+
*/
|
|
36
|
+
export declare function readPiece(tables: RunTables, piece: string): Syllable | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Whether a piece is a syllable of the language, remembering the answer.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isPieceAttested(tables: RunTables, piece: string, syllable: Syllable): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Whether a piece writes its tone mark in place, remembering the answer.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isPieceWellMarked(tables: RunTables, piece: string, syllable: Syllable): boolean;
|
|
45
|
+
//# sourceMappingURL=run-tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tables.d.ts","sourceRoot":"","sources":["../../src/syllable/run-tables.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,eAAe,CAAC;AAEvB;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,QACgD,CAAC;AAiC9E;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,SAAS,OAAO,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAiBhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,GACZ,QAAQ,GAAG,SAAS,CAQtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAQT"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What one run's search reads once and then remembers.
|
|
3
|
+
*
|
|
4
|
+
* The questions `segment-run.ts` asks of a candidate piece, and how long a
|
|
5
|
+
* piece can be worth asking about at all.
|
|
6
|
+
*/
|
|
7
|
+
import { countToneMarks } from "../tone/tone-mark.js";
|
|
8
|
+
import { ATTESTED_SYLLABLES, DICTIONARY_SYLLABLES } from "./inventory.js";
|
|
9
|
+
import { isSeparableStart } from "./separation.js";
|
|
10
|
+
import { normaliseUmlaut, readSyllable, writeSyllable, writeSyllableSpelling, } from "./syllable.js";
|
|
11
|
+
/**
|
|
12
|
+
* How long a written syllable can be, and so how far ahead a reading looks.
|
|
13
|
+
*
|
|
14
|
+
* The longest spelling in the inventory is `zhuang` at six letters, and the
|
|
15
|
+
* rest is what hangs off one: the r of 儿化, a tone digit or the raised form of
|
|
16
|
+
* it, `u:` where ü is typed that way, and a combining mark where the input
|
|
17
|
+
* arrives decomposed. Two of those cannot both be there, which leaves the
|
|
18
|
+
* longest piece worth reading two characters short of this.
|
|
19
|
+
*/
|
|
20
|
+
export const LONGEST_SYLLABLE = Math.max(...[...ATTESTED_SYLLABLES].map((spelling) => spelling.length)) + 4;
|
|
21
|
+
/**
|
|
22
|
+
* Whether a syllable is one Mandarin actually uses.
|
|
23
|
+
*
|
|
24
|
+
* {@link readSyllable} asks only whether an initial and a final can be put
|
|
25
|
+
* together, which is a wider question: `tia` passes it and is not a syllable of
|
|
26
|
+
* the language. The 儿化 suffix is set aside before the check, since the
|
|
27
|
+
* inventory lists base syllables and `wanr` is `wan` with an r on it.
|
|
28
|
+
*/
|
|
29
|
+
function isAttestedSyllable(syllable) {
|
|
30
|
+
return DICTIONARY_SYLLABLES.has(writeSyllableSpelling({ ...syllable, erhua: false }));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Whether a spelling writes its tone mark where the orthography puts it.
|
|
34
|
+
*
|
|
35
|
+
* `xīa` reads as x + ia in the first tone, which pinyin writes `xiā`, so the
|
|
36
|
+
* mark sits a letter early. Read on its own that is a slip worth tolerating,
|
|
37
|
+
* and {@link readSyllable} tolerates it. Inside a longer run it is also what
|
|
38
|
+
* two syllables written without a boundary look like, `xīan1` being 西安 half
|
|
39
|
+
* typed, and the search weighs the two readings by what they cost.
|
|
40
|
+
*/
|
|
41
|
+
function isWellMarked(spelling, syllable) {
|
|
42
|
+
return (countToneMarks(spelling) === 0 ||
|
|
43
|
+
writeSyllable(syllable) ===
|
|
44
|
+
normaliseUmlaut(spelling).normalize("NFC").toLowerCase());
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The tables for one run, read off its characters in a single pass.
|
|
48
|
+
*/
|
|
49
|
+
export function tablesFor(run) {
|
|
50
|
+
const marksBefore = [0];
|
|
51
|
+
const isSeparableAt = [];
|
|
52
|
+
let marks = 0;
|
|
53
|
+
for (let at = 0; at < run.length; at++) {
|
|
54
|
+
const character = run.charAt(at);
|
|
55
|
+
marks += countToneMarks(character);
|
|
56
|
+
marksBefore.push(marks);
|
|
57
|
+
isSeparableAt.push(isSeparableStart(character));
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
marksBefore,
|
|
61
|
+
isSeparableAt,
|
|
62
|
+
syllables: new Map(),
|
|
63
|
+
wellMarked: new Map(),
|
|
64
|
+
attested: new Map(),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Read a piece of the run as a syllable, remembering what it read.
|
|
69
|
+
*/
|
|
70
|
+
export function readPiece(tables, piece) {
|
|
71
|
+
const read = tables.syllables.get(piece);
|
|
72
|
+
if (read !== undefined || tables.syllables.has(piece)) {
|
|
73
|
+
return read;
|
|
74
|
+
}
|
|
75
|
+
const syllable = readSyllable(piece);
|
|
76
|
+
tables.syllables.set(piece, syllable);
|
|
77
|
+
return syllable;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Whether a piece is a syllable of the language, remembering the answer.
|
|
81
|
+
*/
|
|
82
|
+
export function isPieceAttested(tables, piece, syllable) {
|
|
83
|
+
const known = tables.attested.get(piece);
|
|
84
|
+
if (known !== undefined) {
|
|
85
|
+
return known;
|
|
86
|
+
}
|
|
87
|
+
const attested = isAttestedSyllable(syllable);
|
|
88
|
+
tables.attested.set(piece, attested);
|
|
89
|
+
return attested;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Whether a piece writes its tone mark in place, remembering the answer.
|
|
93
|
+
*/
|
|
94
|
+
export function isPieceWellMarked(tables, piece, syllable) {
|
|
95
|
+
const known = tables.wellMarked.get(piece);
|
|
96
|
+
if (known !== undefined) {
|
|
97
|
+
return known;
|
|
98
|
+
}
|
|
99
|
+
const wellMarked = isWellMarked(piece, syllable);
|
|
100
|
+
tables.wellMarked.set(piece, wellMarked);
|
|
101
|
+
return wellMarked;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=run-tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tables.js","sourceRoot":"","sources":["../../src/syllable/run-tables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Segment a run, honouring the apostrophe rule where it can be honoured.
|
|
3
|
+
*
|
|
4
|
+
* The separated reading wins every tie, so the rule holds wherever it can. It
|
|
5
|
+
* gives way only to a cheaper reading, which is a reading leaving fewer tone
|
|
6
|
+
* marks out of place: `xīan1` reads as `xīa` + `n1` under the rule, and as `xī`
|
|
7
|
+
* + `an1` without it, and the mark on `xī` is what says the second is meant.
|
|
8
|
+
*/
|
|
9
|
+
export declare function segmentRun(run: string): readonly string[] | undefined;
|
|
10
|
+
//# sourceMappingURL=segment-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-run.d.ts","sourceRoot":"","sources":["../../src/syllable/segment-run.ts"],"names":[],"mappings":"AAoIA;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAgBrE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading a run of pinyin with no boundaries written in it.
|
|
3
|
+
*
|
|
4
|
+
* `split.ts` deals with the boundaries a word does write, the apostrophes and
|
|
5
|
+
* the hyphens, and hands each run between them here. What happens here is a
|
|
6
|
+
* search: every way of cutting the run into syllables, scored, with the
|
|
7
|
+
* cheapest kept. This is the syllables inside one word, and not
|
|
8
|
+
* `decode/segment.ts`, which is the words inside a text.
|
|
9
|
+
*/
|
|
10
|
+
import { isPieceAttested, isPieceWellMarked, LONGEST_SYLLABLE, readPiece, tablesFor, } from "./run-tables.js";
|
|
11
|
+
/**
|
|
12
|
+
* Read a run of pinyin with no explicit boundaries as syllables, as cheaply as
|
|
13
|
+
* it can be read.
|
|
14
|
+
*
|
|
15
|
+
* Works longest-first, which is what the orthography assumes: an apostrophe is
|
|
16
|
+
* required exactly where the longest-first reading would be wrong, so `xian` is
|
|
17
|
+
* one syllable and 西安 must be written `Xī'ān` to be read as two. Cost breaks
|
|
18
|
+
* that habit only where a tone mark says the boundary lies elsewhere, and ties
|
|
19
|
+
* go to the longer piece, so a run with every mark in place reads as it always
|
|
20
|
+
* did.
|
|
21
|
+
*
|
|
22
|
+
* `isSeparated` carries the other half of the apostrophe rule. Longest-first
|
|
23
|
+
* alone reads `guórén` as `guór'én` and `huángěi` as `huáng'ěi`, both of which
|
|
24
|
+
* the missing apostrophe rules out — so a run is first read with a/o/e barred
|
|
25
|
+
* from starting any syllable but the first, and only falls back to plain
|
|
26
|
+
* longest-first where that finds nothing or costs more. The fallback is what
|
|
27
|
+
* keeps input tolerant: `hǎiōu` is written wrong, and still reads as two
|
|
28
|
+
* syllables.
|
|
29
|
+
*
|
|
30
|
+
* The separated pass also holds out for real syllables rather than merely
|
|
31
|
+
* well-formed ones, because barring a vowel otherwise pushes it into nonsense:
|
|
32
|
+
* `Tiānānmén` would come apart as `tiā nān mén` where `tiā` is not a syllable
|
|
33
|
+
* of the language at all.
|
|
34
|
+
*
|
|
35
|
+
* Read back to front, one suffix at a time, since without that a long run of
|
|
36
|
+
* ambiguous syllables would backtrack exponentially.
|
|
37
|
+
*
|
|
38
|
+
* Reports whether either of the separated pass's own rules ever ruled a piece
|
|
39
|
+
* out, which is what tells {@link segmentRun} that the fallback has nothing
|
|
40
|
+
* new to find.
|
|
41
|
+
*/
|
|
42
|
+
function readRun(run, tables, isSeparated) {
|
|
43
|
+
const readings = Array.from({
|
|
44
|
+
length: run.length + 1,
|
|
45
|
+
});
|
|
46
|
+
readings[run.length] = { syllables: [], cost: 0 };
|
|
47
|
+
let wasConstrained = false;
|
|
48
|
+
for (let at = run.length - 1; at >= 0; at--) {
|
|
49
|
+
let best;
|
|
50
|
+
const furthest = Math.min(run.length, at + LONGEST_SYLLABLE);
|
|
51
|
+
for (let end = furthest; end > at; end--) {
|
|
52
|
+
const rest = readings[end];
|
|
53
|
+
if (rest === undefined) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// A piece costs a point at least, so a candidate that cannot come in
|
|
57
|
+
// under the best reading so far is not worth reading at all. Ties are
|
|
58
|
+
// pruned with the rest, which is what leaves them to the longer piece.
|
|
59
|
+
if (best !== undefined && rest.cost + 1 >= best.cost) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
// A syllable is written with one tone, so a second mark is a second
|
|
63
|
+
// syllable: `dìèr` is 第二 with the apostrophe left out.
|
|
64
|
+
/* c8 ignore next 2 -- unreachable: both indices are inside the run */
|
|
65
|
+
const marks = (tables.marksBefore[end] ?? 0) - (tables.marksBefore[at] ?? 0);
|
|
66
|
+
if (marks > 1) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (isSeparated && tables.isSeparableAt[end] === true) {
|
|
70
|
+
wasConstrained = true;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const piece = run.slice(at, end);
|
|
74
|
+
const syllable = readPiece(tables, piece);
|
|
75
|
+
if (syllable === undefined) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (isSeparated && !isPieceAttested(tables, piece, syllable)) {
|
|
79
|
+
wasConstrained = true;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const cost = rest.cost +
|
|
83
|
+
(marks === 0 || isPieceWellMarked(tables, piece, syllable) ? 1 : 2);
|
|
84
|
+
if (best === undefined || cost < best.cost) {
|
|
85
|
+
best = { syllables: [piece, ...rest.syllables], cost };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
readings[at] = best;
|
|
89
|
+
}
|
|
90
|
+
return { reading: readings[0], wasConstrained };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Segment a run, honouring the apostrophe rule where it can be honoured.
|
|
94
|
+
*
|
|
95
|
+
* The separated reading wins every tie, so the rule holds wherever it can. It
|
|
96
|
+
* gives way only to a cheaper reading, which is a reading leaving fewer tone
|
|
97
|
+
* marks out of place: `xīan1` reads as `xīa` + `n1` under the rule, and as `xī`
|
|
98
|
+
* + `an1` without it, and the mark on `xī` is what says the second is meant.
|
|
99
|
+
*/
|
|
100
|
+
export function segmentRun(run) {
|
|
101
|
+
const tables = tablesFor(run);
|
|
102
|
+
const separated = readRun(run, tables, true);
|
|
103
|
+
// Where neither of the separated pass's rules ever ruled a piece out, the two
|
|
104
|
+
// passes were choosing between the same readings and reached the same one.
|
|
105
|
+
if (separated.reading !== undefined && !separated.wasConstrained) {
|
|
106
|
+
return separated.reading.syllables;
|
|
107
|
+
}
|
|
108
|
+
const loose = readRun(run, tables, false).reading;
|
|
109
|
+
if (separated.reading === undefined) {
|
|
110
|
+
return loose?.syllables;
|
|
111
|
+
}
|
|
112
|
+
return loose !== undefined && loose.cost < separated.reading.cost
|
|
113
|
+
? loose.syllables
|
|
114
|
+
: separated.reading.syllables;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=segment-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-run.js","sourceRoot":"","sources":["../../src/syllable/segment-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../src/syllable/split.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../src/syllable/split.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAU5D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAe1E;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,QAAQ,EAAE,GAAG,SAAS,CAgBtE"}
|
package/dist/syllable/split.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { isSyllable, readSyllable, writeSyllableSpelling, } from "./syllable.js";
|
|
1
|
+
import { segmentRun } from "./segment-run.js";
|
|
2
|
+
import { readSyllable } from "./syllable.js";
|
|
4
3
|
/**
|
|
5
4
|
* Characters that mark a syllable boundary explicitly.
|
|
6
5
|
*
|
|
@@ -8,74 +7,6 @@ import { isSyllable, readSyllable, writeSyllableSpelling, } from "./syllable.js"
|
|
|
8
7
|
* reduplicated word or a 成语 written 2+2.
|
|
9
8
|
*/
|
|
10
9
|
const SYLLABLE_SEPARATORS = /['’‘-]/u;
|
|
11
|
-
/**
|
|
12
|
-
* Whether a spelling is a syllable Mandarin actually uses.
|
|
13
|
-
*
|
|
14
|
-
* {@link isSyllable} asks only whether an initial and a final can be put
|
|
15
|
-
* together, which is a wider question: `tia` passes it and is not a syllable of
|
|
16
|
-
* the language. The 儿化 suffix is set aside before the check, since the
|
|
17
|
-
* inventory lists base syllables and `wanr` is `wan` with an r on it.
|
|
18
|
-
*/
|
|
19
|
-
function isAttestedSyllable(text) {
|
|
20
|
-
const syllable = readSyllable(text);
|
|
21
|
-
return (syllable !== undefined &&
|
|
22
|
-
DICTIONARY_SYLLABLES.has(writeSyllableSpelling({ ...syllable, erhua: false })));
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Split a run of pinyin with no explicit boundaries into syllables.
|
|
26
|
-
*
|
|
27
|
-
* Works longest-first, which is what the orthography assumes: an apostrophe is
|
|
28
|
-
* required exactly where the longest-first reading would be wrong, so `xian` is
|
|
29
|
-
* one syllable and 西安 must be written `Xī'ān` to be read as two.
|
|
30
|
-
*
|
|
31
|
-
* `isSeparated` carries the other half of that rule. Longest-first alone reads
|
|
32
|
-
* `guórén` as `guór'én` and `huángěi` as `huáng'ěi`, both of which the missing
|
|
33
|
-
* apostrophe rules out — so a run is first segmented with a/o/e barred from
|
|
34
|
-
* starting any syllable but the first, and only falls back to plain
|
|
35
|
-
* longest-first when that finds nothing. The fallback is what keeps input
|
|
36
|
-
* tolerant: `hǎiōu` is written wrong, and still reads as two syllables.
|
|
37
|
-
*
|
|
38
|
-
* The strict pass also holds out for real syllables rather than merely
|
|
39
|
-
* well-formed ones, because barring a vowel otherwise pushes it into nonsense:
|
|
40
|
-
* `Tiānānmén` would come apart as `tiā nān mén` where `tiā` is not a syllable
|
|
41
|
-
* of the language at all.
|
|
42
|
-
*
|
|
43
|
-
* Memoised on the suffix being segmented, since without it a long run of
|
|
44
|
-
* ambiguous syllables would backtrack exponentially.
|
|
45
|
-
*/
|
|
46
|
-
function segmentRun(run, memo, isSeparated) {
|
|
47
|
-
if (run === "") {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
const cached = memo.get(run);
|
|
51
|
-
if (cached !== undefined || memo.has(run)) {
|
|
52
|
-
return cached;
|
|
53
|
-
}
|
|
54
|
-
let found;
|
|
55
|
-
for (let length = run.length; length >= 1; length--) {
|
|
56
|
-
const head = run.slice(0, length);
|
|
57
|
-
if (isSeparated ? !isAttestedSyllable(head) : !isSyllable(head)) {
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
const tail = run.slice(length);
|
|
61
|
-
if (isSeparated && isSeparableStart(tail)) {
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
const rest = segmentRun(tail, memo, isSeparated);
|
|
65
|
-
if (rest !== undefined) {
|
|
66
|
-
found = [head, ...rest];
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
memo.set(run, found);
|
|
71
|
-
return found;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Segment a run, honouring the apostrophe rule where it can be honoured.
|
|
75
|
-
*/
|
|
76
|
-
function segment(run) {
|
|
77
|
-
return segmentRun(run, new Map(), true) ?? segmentRun(run, new Map(), false);
|
|
78
|
-
}
|
|
79
10
|
/**
|
|
80
11
|
* Split a written pinyin word into its syllables.
|
|
81
12
|
*
|
|
@@ -89,7 +20,7 @@ export function splitSyllables(word) {
|
|
|
89
20
|
if (run === "") {
|
|
90
21
|
continue;
|
|
91
22
|
}
|
|
92
|
-
const segmented =
|
|
23
|
+
const segmented = segmentRun(run);
|
|
93
24
|
if (segmented === undefined) {
|
|
94
25
|
return undefined;
|
|
95
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split.js","sourceRoot":"","sources":["../../src/syllable/split.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"split.js","sourceRoot":"","sources":["../../src/syllable/split.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAiB,MAAM,eAAe,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAClD,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,0EAA0E;QAC1E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/tone/tone-mark.d.ts
CHANGED
|
@@ -15,6 +15,14 @@ export declare function toneDiacritic(tone: Tone): string;
|
|
|
15
15
|
* The diaeresis of ü is preserved, so ǚ becomes ü rather than u.
|
|
16
16
|
*/
|
|
17
17
|
export declare function stripToneMarks(text: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* How many tone diacritics a text carries.
|
|
20
|
+
*
|
|
21
|
+
* A syllable is written with one tone, so a second mark on a run of letters is
|
|
22
|
+
* a second syllable inside it: `dìèr` is 第二 with the apostrophe left out
|
|
23
|
+
* rather than any syllable of the language.
|
|
24
|
+
*/
|
|
25
|
+
export declare function countToneMarks(text: string): number;
|
|
18
26
|
/**
|
|
19
27
|
* How each tone is written raised.
|
|
20
28
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tone-mark.d.ts","sourceRoot":"","sources":["../../src/tone/tone-mark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AA2CpD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,CAMtD,CAAC;AAiBH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAQ5D;AA8BD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,GAAG,SAAS,GACrB,MAAM,CAoBR"}
|
|
1
|
+
{"version":3,"file":"tone-mark.d.ts","sourceRoot":"","sources":["../../src/tone/tone-mark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AA2CpD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,CAMtD,CAAC;AAiBH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAQ5D;AA8BD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,GAAG,SAAS,GACrB,MAAM,CAoBR"}
|
package/dist/tone/tone-mark.js
CHANGED
|
@@ -58,6 +58,16 @@ export function stripToneMarks(text) {
|
|
|
58
58
|
.replaceAll(toneDiacriticPattern, "")
|
|
59
59
|
.normalize("NFC");
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* How many tone diacritics a text carries.
|
|
63
|
+
*
|
|
64
|
+
* A syllable is written with one tone, so a second mark on a run of letters is
|
|
65
|
+
* a second syllable inside it: `dìèr` is 第二 with the apostrophe left out
|
|
66
|
+
* rather than any syllable of the language.
|
|
67
|
+
*/
|
|
68
|
+
export function countToneMarks(text) {
|
|
69
|
+
return text.normalize("NFD").match(toneDiacriticPattern)?.length ?? 0;
|
|
70
|
+
}
|
|
61
71
|
/**
|
|
62
72
|
* How each tone is written raised.
|
|
63
73
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tone-mark.js","sourceRoot":"","sources":["../../src/tone/tone-mark.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tone-mark.js","sourceRoot":"","sources":["../../src/tone/tone-mark.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kensio/pinyinjs",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.13",
|
|
4
4
|
"description": "Chinese hanzi to pinyin conversion",
|
|
5
5
|
"repository": "https://github.com/KensioSoftware/pinyinjs",
|
|
6
6
|
"homepage": "https://pinyinjs.dev",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"conventional-changelog-conventionalcommits": "9.3.1",
|
|
70
70
|
"fta-cli": "^3.0.0",
|
|
71
71
|
"jiti": "^2.7.0",
|
|
72
|
-
"oxfmt": "^0.
|
|
72
|
+
"oxfmt": "^0.66.0",
|
|
73
73
|
"oxlint": "^1.77.0",
|
|
74
74
|
"oxlint-tsgolint": "^7.0.2001",
|
|
75
75
|
"semantic-release": "25.0.9",
|