@kensio/pinyinjs 1.9.2 → 1.9.4
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/data/core.entries +3 -3
- package/data/full.entries +10423 -10423
- package/data/manifest.json +6 -6
- package/data/standard.entries +1148 -1148
- package/dist/decode/cai-rule.d.ts +25 -0
- package/dist/decode/cai-rule.d.ts.map +1 -0
- package/dist/decode/cai-rule.js +78 -0
- package/dist/decode/cai-rule.js.map +1 -0
- package/dist/decode/dou-rule.d.ts +23 -0
- package/dist/decode/dou-rule.d.ts.map +1 -0
- package/dist/decode/dou-rule.js +40 -0
- package/dist/decode/dou-rule.js.map +1 -0
- package/dist/decode/erhua-rule.d.ts +26 -0
- package/dist/decode/erhua-rule.d.ts.map +1 -0
- package/dist/decode/erhua-rule.js +34 -0
- package/dist/decode/erhua-rule.js.map +1 -0
- package/dist/decode/ge-rule.d.ts +23 -0
- package/dist/decode/ge-rule.d.ts.map +1 -0
- package/dist/decode/ge-rule.js +77 -0
- package/dist/decode/ge-rule.js.map +1 -0
- package/dist/decode/hua-modified.d.ts +19 -0
- package/dist/decode/hua-modified.d.ts.map +1 -0
- package/dist/decode/hua-modified.js +62 -0
- package/dist/decode/hua-modified.js.map +1 -0
- package/dist/decode/hua-rule.d.ts +2 -1
- package/dist/decode/hua-rule.d.ts.map +1 -1
- package/dist/decode/hua-rule.js +5 -1
- package/dist/decode/hua-rule.js.map +1 -1
- package/dist/decode/hua-words.d.ts +14 -0
- package/dist/decode/hua-words.d.ts.map +1 -1
- package/dist/decode/hua-words.js +67 -0
- package/dist/decode/hua-words.js.map +1 -1
- package/dist/decode/mei-rule.d.ts +22 -0
- package/dist/decode/mei-rule.d.ts.map +1 -0
- package/dist/decode/mei-rule.js +95 -0
- package/dist/decode/mei-rule.js.map +1 -0
- package/dist/decode/name-count-rule.d.ts +15 -0
- package/dist/decode/name-count-rule.d.ts.map +1 -0
- package/dist/decode/name-count-rule.js +81 -0
- package/dist/decode/name-count-rule.js.map +1 -0
- package/dist/decode/polyphone-rules.d.ts +3 -1
- package/dist/decode/polyphone-rules.d.ts.map +1 -1
- package/dist/decode/polyphone-rules.js +3 -1
- package/dist/decode/polyphone-rules.js.map +1 -1
- package/dist/decode/reading-rules.d.ts +5 -22
- package/dist/decode/reading-rules.d.ts.map +1 -1
- package/dist/decode/reading-rules.js +15 -35
- package/dist/decode/reading-rules.js.map +1 -1
- package/dist/dictionary/entry-invariants.d.ts.map +1 -1
- package/dist/dictionary/entry-invariants.js +16 -13
- package/dist/dictionary/entry-invariants.js.map +1 -1
- package/dist/dictionary/merge-types.d.ts +3 -0
- package/dist/dictionary/merge-types.d.ts.map +1 -1
- package/dist/dictionary/merge-types.js.map +1 -1
- package/dist/dictionary/merge-word.d.ts.map +1 -1
- package/dist/dictionary/merge-word.js +2 -2
- package/dist/dictionary/merge-word.js.map +1 -1
- package/dist/dictionary/merge.d.ts.map +1 -1
- package/dist/dictionary/merge.js +2 -0
- package/dist/dictionary/merge.js.map +1 -1
- package/dist/dictionary/proper-noun.d.ts +14 -1
- package/dist/dictionary/proper-noun.d.ts.map +1 -1
- package/dist/dictionary/proper-noun.js +46 -7
- package/dist/dictionary/proper-noun.js.map +1 -1
- 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/sources/cedict.d.ts +8 -0
- package/dist/sources/cedict.d.ts.map +1 -1
- package/dist/sources/cedict.js +11 -0
- package/dist/sources/cedict.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 才能 that is 才 *only then* and 能 *can*, and not the noun *talent*.
|
|
3
|
+
*
|
|
4
|
+
* 才能 is a word, *talent* or *ability*, and every source counts it. The same
|
|
5
|
+
* two characters are far more often the adverb 才 and the modal 能 in front of
|
|
6
|
+
* a verb: 怎样才能提高爆发力, 必须先完成这件事才能回家, 到北方才能吃到真正的饺子.
|
|
7
|
+
* The decode read every one of them as the noun.
|
|
8
|
+
*/
|
|
9
|
+
import { type EdgeRule } from "./rules.js";
|
|
10
|
+
/**
|
|
11
|
+
* 才能 is taken apart where a verb is left for 能 to be the modal of.
|
|
12
|
+
*
|
|
13
|
+
* The noun is kept after a 的 or a 有, and before a 的, a 是, a degree word or
|
|
14
|
+
* the end of the run.
|
|
15
|
+
* Everywhere else the 才 is the adverb and the 能 the modal. Taking the edge
|
|
16
|
+
* away leaves the two to read as themselves. The readings are `cái néng`
|
|
17
|
+
* either way, so this changes the segmentation and the spacing.
|
|
18
|
+
*
|
|
19
|
+
* Over the 139,893 distinct Han runs of Tatoeba and the Chinese Boost example
|
|
20
|
+
* sentences, the decode read 才能 as the word in 184 runs. The rule splits 164,
|
|
21
|
+
* and one of them is wrong: 他的钢琴才能为他在音乐专家中赢得了美名 is talent before a
|
|
22
|
+
* 为 that reads like a verb.
|
|
23
|
+
*/
|
|
24
|
+
export declare const MODAL_CAI: EdgeRule;
|
|
25
|
+
//# sourceMappingURL=cai-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cai-rule.d.ts","sourceRoot":"","sources":["../../src/decode/cai-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAEL,KAAK,QAAQ,EAId,MAAM,YAAY,CAAC;AAwDpB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,EAAE,QAUvB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 才能 that is 才 *only then* and 能 *can*, and not the noun *talent*.
|
|
3
|
+
*
|
|
4
|
+
* 才能 is a word, *talent* or *ability*, and every source counts it. The same
|
|
5
|
+
* two characters are far more often the adverb 才 and the modal 能 in front of
|
|
6
|
+
* a verb: 怎样才能提高爆发力, 必须先完成这件事才能回家, 到北方才能吃到真正的饺子.
|
|
7
|
+
* The decode read every one of them as the noun.
|
|
8
|
+
*/
|
|
9
|
+
import { tagOf, wordsEndingAt, wordsStartingAt, } from "./rules.js";
|
|
10
|
+
/**
|
|
11
|
+
* The word, in both scripts.
|
|
12
|
+
*/
|
|
13
|
+
const TALENT = new Set(["才能"]);
|
|
14
|
+
/**
|
|
15
|
+
* The characters that close a word in front of the noun.
|
|
16
|
+
*
|
|
17
|
+
* 的 makes 才能 something owned or described (他的才能, 一定的才能), and 有 is
|
|
18
|
+
* having it (有才能, 富有才能, 具有才能, 很有才能). 才 and 能 can follow neither.
|
|
19
|
+
*/
|
|
20
|
+
const BEFORE_NOUN = new Set(["的", "有"]);
|
|
21
|
+
/**
|
|
22
|
+
* What can follow the noun and not the modal.
|
|
23
|
+
*
|
|
24
|
+
* 能 needs a verb after it, so a 的 (有才能的人) or the end of the run (你很有才能,
|
|
25
|
+
* 她具有卓越才能) leaves it nothing to be the modal of. A 是 or a degree word
|
|
26
|
+
* says something about the talent (音乐才能是可以培养的, 她的唱歌才能非常出众).
|
|
27
|
+
*/
|
|
28
|
+
const AFTER_NOUN = new Set(["的", "是", "很", "非常", "十分"]);
|
|
29
|
+
/**
|
|
30
|
+
* Whether a longer word ends at the 才, and would take it once 才能 is gone.
|
|
31
|
+
*
|
|
32
|
+
* 处方才能买 is 处方 and then 才能, and taking the edge away let 方才 *just
|
|
33
|
+
* now* take the 才, reading 处方 as `chù fāng`. 刚才能 and 人才能 have the same
|
|
34
|
+
* shape. Which word the 才 belongs to there is a question this rule cannot
|
|
35
|
+
* answer, so it leaves the decode as it was. Only a tagged word counts, since
|
|
36
|
+
* the full tier holds untagged keys such as 时才 that no decode would choose.
|
|
37
|
+
*/
|
|
38
|
+
function isClaimed(context, from) {
|
|
39
|
+
return wordsEndingAt(context, from + 1).some((word) => word.length > 1 && tagOf(context, word) !== "");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Whether the context at a 才能 says it is the noun.
|
|
43
|
+
*/
|
|
44
|
+
function isNoun(context, from, to) {
|
|
45
|
+
if (wordsEndingAt(context, from).some((word) => BEFORE_NOUN.has(word.at(-1) ?? ""))) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
// Every word starting there is asked, since the longest hides the one the
|
|
49
|
+
// rule is looking for: 音乐才能是否可以培养 has 是否 wrapped around its 是.
|
|
50
|
+
const next = wordsStartingAt(context, to);
|
|
51
|
+
return next.length === 0 || next.some((word) => AFTER_NOUN.has(word));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 才能 is taken apart where a verb is left for 能 to be the modal of.
|
|
55
|
+
*
|
|
56
|
+
* The noun is kept after a 的 or a 有, and before a 的, a 是, a degree word or
|
|
57
|
+
* the end of the run.
|
|
58
|
+
* Everywhere else the 才 is the adverb and the 能 the modal. Taking the edge
|
|
59
|
+
* away leaves the two to read as themselves. The readings are `cái néng`
|
|
60
|
+
* either way, so this changes the segmentation and the spacing.
|
|
61
|
+
*
|
|
62
|
+
* Over the 139,893 distinct Han runs of Tatoeba and the Chinese Boost example
|
|
63
|
+
* sentences, the decode read 才能 as the word in 184 runs. The rule splits 164,
|
|
64
|
+
* and one of them is wrong: 他的钢琴才能为他在音乐专家中赢得了美名 is talent before a
|
|
65
|
+
* 为 that reads like a verb.
|
|
66
|
+
*/
|
|
67
|
+
export const MODAL_CAI = {
|
|
68
|
+
name: "modal-cai",
|
|
69
|
+
verdictFor: (context) => {
|
|
70
|
+
const { edge } = context;
|
|
71
|
+
return TALENT.has(edge.text) &&
|
|
72
|
+
!isClaimed(context, edge.from) &&
|
|
73
|
+
!isNoun(context, edge.from, edge.to)
|
|
74
|
+
? "forbid"
|
|
75
|
+
: "keep";
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=cai-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cai-rule.js","sourceRoot":"","sources":["../../src/decode/cai-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAGL,KAAK,EACL,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAExD;;;;;;;;GAQG;AACH,SAAS,SAAS,CAAC,OAAoB,EAAE,IAAY;IACnD,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CACzD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,OAAoB,EAAE,IAAY,EAAE,EAAU;IAC5D,IACE,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACnC,EACD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0EAA0E;IAC1E,+DAA+D;IAC/D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,SAAS,GAAa;IACjC,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,CAAC,OAAoB,EAAE,EAAE;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;YAC9B,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACpC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,CAAC;IACb,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 都 that is the adverb *all*, read into a place name in front of it.
|
|
3
|
+
*
|
|
4
|
+
* 花都 is a district of Guangzhou, `Huādū`, and the dictionary holds it as a
|
|
5
|
+
* proper noun. In running text it is nearly always 花 *flowers* and 都 *all*:
|
|
6
|
+
* 花都开了, 公园里的花都开了, 所有的花都是纸做的. The decode read the name,
|
|
7
|
+
* capital and `dū` included.
|
|
8
|
+
*/
|
|
9
|
+
import { type EdgeRule } from "./rules.js";
|
|
10
|
+
/**
|
|
11
|
+
* 花都 is taken apart where no noun follows it.
|
|
12
|
+
*
|
|
13
|
+
* The district names what it holds: 花都区, 花都机场. Where a verb, an
|
|
14
|
+
* adverb, a 是 or the end of the run follows, the 都 is the adverb and sums up
|
|
15
|
+
* the flowers. Taking the edge away leaves 花 and 都 to read as themselves,
|
|
16
|
+
* `huā dōu`.
|
|
17
|
+
*
|
|
18
|
+
* Over the 139,893 distinct Han runs of Tatoeba and the Chinese Boost example
|
|
19
|
+
* sentences, the decode read 花都 as the name in 11 runs, and none of them was
|
|
20
|
+
* the district.
|
|
21
|
+
*/
|
|
22
|
+
export declare const SUMMING_DOU: EdgeRule;
|
|
23
|
+
//# sourceMappingURL=dou-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dou-rule.d.ts","sourceRoot":"","sources":["../../src/decode/dou-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,YAAY,CAAC;AAYpB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,EAAE,QASzB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 都 that is the adverb *all*, read into a place name in front of it.
|
|
3
|
+
*
|
|
4
|
+
* 花都 is a district of Guangzhou, `Huādū`, and the dictionary holds it as a
|
|
5
|
+
* proper noun. In running text it is nearly always 花 *flowers* and 都 *all*:
|
|
6
|
+
* 花都开了, 公园里的花都开了, 所有的花都是纸做的. The decode read the name,
|
|
7
|
+
* capital and `dū` included.
|
|
8
|
+
*/
|
|
9
|
+
import { tagOf, wordStartingAt, } from "./rules.js";
|
|
10
|
+
/**
|
|
11
|
+
* The place names whose first character is a common noun that 都 can sum up.
|
|
12
|
+
*/
|
|
13
|
+
const NAMES = new Set(["花都"]);
|
|
14
|
+
/**
|
|
15
|
+
* The tag prefix jieba gives a noun.
|
|
16
|
+
*/
|
|
17
|
+
const NOUN_TAG = "n";
|
|
18
|
+
/**
|
|
19
|
+
* 花都 is taken apart where no noun follows it.
|
|
20
|
+
*
|
|
21
|
+
* The district names what it holds: 花都区, 花都机场. Where a verb, an
|
|
22
|
+
* adverb, a 是 or the end of the run follows, the 都 is the adverb and sums up
|
|
23
|
+
* the flowers. Taking the edge away leaves 花 and 都 to read as themselves,
|
|
24
|
+
* `huā dōu`.
|
|
25
|
+
*
|
|
26
|
+
* Over the 139,893 distinct Han runs of Tatoeba and the Chinese Boost example
|
|
27
|
+
* sentences, the decode read 花都 as the name in 11 runs, and none of them was
|
|
28
|
+
* the district.
|
|
29
|
+
*/
|
|
30
|
+
export const SUMMING_DOU = {
|
|
31
|
+
name: "summing-dou",
|
|
32
|
+
verdictFor: (context) => {
|
|
33
|
+
const { edge } = context;
|
|
34
|
+
return NAMES.has(edge.text) &&
|
|
35
|
+
!tagOf(context, wordStartingAt(context, edge.to)).startsWith(NOUN_TAG)
|
|
36
|
+
? "forbid"
|
|
37
|
+
: "keep";
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=dou-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dou-rule.js","sourceRoot":"","sources":["../../src/decode/dou-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAGL,KAAK,EACL,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAE9B;;GAEG;AACH,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,WAAW,GAAa;IACnC,IAAI,EAAE,aAAa;IACnB,UAAU,EAAE,CAAC,OAAoB,EAAE,EAAE;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;YACtE,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,CAAC;IACb,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 儿 that belongs to the word in front of it.
|
|
3
|
+
*/
|
|
4
|
+
import type { EdgeRule } from "./rules.js";
|
|
5
|
+
/**
|
|
6
|
+
* 儿 does not stand on its own where the dictionary attests the 儿化.
|
|
7
|
+
*
|
|
8
|
+
* 儿化 is a per-word dictionary fact taken from CC-CEDICT's explicit `r5`
|
|
9
|
+
* token, and 2,009 of the 2,067 keys ending in 儿 carry it. What that leaves is
|
|
10
|
+
* an edge: 这边儿, 上边儿 and 旁边儿 are all listed and 那边儿 is not, so
|
|
11
|
+
* 我得跑到那边儿去 read the 儿 as a syllable of its own — `nàbian ér` — and the
|
|
12
|
+
* decode was choosing between 那边 plus 儿 and 那 plus 边儿 on frequency alone.
|
|
13
|
+
*
|
|
14
|
+
* This forbids the bare 儿 edge when the character in front of it makes an
|
|
15
|
+
* attested 儿化 word, so the only paths left are the ones that absorb it. That
|
|
16
|
+
* asserts nothing the dictionary does not already say — 边儿 is `biānr` because
|
|
17
|
+
* CC-CEDICT says so — which is what separates it from synthesising 儿化 with a
|
|
18
|
+
* suffix rule, the thing ORTHOGRAPHY.md rejects and the old project got wrong.
|
|
19
|
+
*
|
|
20
|
+
* Measured over the same 88,866 lines it fires 7 times, and all 7 are right:
|
|
21
|
+
* 照片儿, 出门儿, 热点儿, 辣味儿, 晚会儿, 针管儿, 碍事儿. It is deliberately
|
|
22
|
+
* silent on the 20 bare 儿 with no attested 儿化 behind them, which are 马儿,
|
|
23
|
+
* 门铃儿 and a row of Mongol names transliterated with 儿.
|
|
24
|
+
*/
|
|
25
|
+
export declare const ATTESTED_ERHUA: EdgeRule;
|
|
26
|
+
//# sourceMappingURL=erhua-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erhua-rule.d.ts","sourceRoot":"","sources":["../../src/decode/erhua-rule.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,cAAc,EAAE,QAY5B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 儿 does not stand on its own where the dictionary attests the 儿化.
|
|
3
|
+
*
|
|
4
|
+
* 儿化 is a per-word dictionary fact taken from CC-CEDICT's explicit `r5`
|
|
5
|
+
* token, and 2,009 of the 2,067 keys ending in 儿 carry it. What that leaves is
|
|
6
|
+
* an edge: 这边儿, 上边儿 and 旁边儿 are all listed and 那边儿 is not, so
|
|
7
|
+
* 我得跑到那边儿去 read the 儿 as a syllable of its own — `nàbian ér` — and the
|
|
8
|
+
* decode was choosing between 那边 plus 儿 and 那 plus 边儿 on frequency alone.
|
|
9
|
+
*
|
|
10
|
+
* This forbids the bare 儿 edge when the character in front of it makes an
|
|
11
|
+
* attested 儿化 word, so the only paths left are the ones that absorb it. That
|
|
12
|
+
* asserts nothing the dictionary does not already say — 边儿 is `biānr` because
|
|
13
|
+
* CC-CEDICT says so — which is what separates it from synthesising 儿化 with a
|
|
14
|
+
* suffix rule, the thing ORTHOGRAPHY.md rejects and the old project got wrong.
|
|
15
|
+
*
|
|
16
|
+
* Measured over the same 88,866 lines it fires 7 times, and all 7 are right:
|
|
17
|
+
* 照片儿, 出门儿, 热点儿, 辣味儿, 晚会儿, 针管儿, 碍事儿. It is deliberately
|
|
18
|
+
* silent on the 20 bare 儿 with no attested 儿化 behind them, which are 马儿,
|
|
19
|
+
* 门铃儿 and a row of Mongol names transliterated with 儿.
|
|
20
|
+
*/
|
|
21
|
+
export const ATTESTED_ERHUA = {
|
|
22
|
+
name: "attested-erhua",
|
|
23
|
+
verdictFor: (context) => {
|
|
24
|
+
const { characters, edge } = context;
|
|
25
|
+
if (edge.text !== "儿" || edge.from === 0) {
|
|
26
|
+
return "keep";
|
|
27
|
+
}
|
|
28
|
+
/* c8 ignore next -- the edge starts inside the run it was built from */
|
|
29
|
+
const absorbed = `${characters[edge.from - 1] ?? ""}儿`;
|
|
30
|
+
const reading = context.dictionary.lookup(absorbed)?.reading;
|
|
31
|
+
return (reading?.at(-1)?.erhua ?? false) ? "forbid" : "keep";
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=erhua-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erhua-rule.js","sourceRoot":"","sources":["../../src/decode/erhua-rule.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAa;IACtC,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE,CAAC,OAAoB,EAAE,EAAE;QACnC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,wEAAwE;QACxE,MAAM,QAAQ,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAC7D,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 个人 whose 个 is counting one 人, and not the word *individual*.
|
|
3
|
+
*
|
|
4
|
+
* {@link import("./measure-rule.js").COUNTED_MEASURE} takes 个人 apart after a
|
|
5
|
+
* number, so 三个人 is three people. A bare 个 with no number at all stands for
|
|
6
|
+
* 一个 after a verb that introduces somebody, and the measure rule has nothing
|
|
7
|
+
* to go on there: 门口有个人, 想找个人聊聊天, 我今天雇了个人.
|
|
8
|
+
*/
|
|
9
|
+
import { type EdgeRule } from "./rules.js";
|
|
10
|
+
/**
|
|
11
|
+
* 个人 is taken apart where an introducing verb makes its 个 count one 人.
|
|
12
|
+
*
|
|
13
|
+
* Taking the edge away leaves 个 and 人 to read as themselves. The readings
|
|
14
|
+
* are `gè rén` either way, so this changes the segmentation and the spacing.
|
|
15
|
+
*
|
|
16
|
+
* Over the 139,893 distinct Han runs of Tatoeba and the Chinese Boost example
|
|
17
|
+
* sentences, the decode kept 个人 as one word in 61 runs. The rule splits 12,
|
|
18
|
+
* and every one of them is somebody. A rough number in front (十几个人,
|
|
19
|
+
* 一百多个人) is left alone, because taking the edge away there moves the 个
|
|
20
|
+
* onto the 几 and reads 十 几个 人.
|
|
21
|
+
*/
|
|
22
|
+
export declare const COUNTED_GE: EdgeRule;
|
|
23
|
+
//# sourceMappingURL=ge-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ge-rule.d.ts","sourceRoot":"","sources":["../../src/decode/ge-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,YAAY,CAAC;AAoDpB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,EAAE,QASxB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The 个人 whose 个 is counting one 人, and not the word *individual*.
|
|
3
|
+
*
|
|
4
|
+
* {@link import("./measure-rule.js").COUNTED_MEASURE} takes 个人 apart after a
|
|
5
|
+
* number, so 三个人 is three people. A bare 个 with no number at all stands for
|
|
6
|
+
* 一个 after a verb that introduces somebody, and the measure rule has nothing
|
|
7
|
+
* to go on there: 门口有个人, 想找个人聊聊天, 我今天雇了个人.
|
|
8
|
+
*/
|
|
9
|
+
import { tagOf, wordStartingAt, } from "./rules.js";
|
|
10
|
+
/**
|
|
11
|
+
* The word, in both scripts.
|
|
12
|
+
*/
|
|
13
|
+
const INDIVIDUAL = new Set(["个人", "個人"]);
|
|
14
|
+
/**
|
|
15
|
+
* The verbs that bring an unnamed somebody into a sentence.
|
|
16
|
+
*
|
|
17
|
+
* 有个人 is *somebody*, 找个人 and 叫个人 are finding and sending one, 雇了个人
|
|
18
|
+
* is hiring one and 换了个人 is becoming somebody else.
|
|
19
|
+
*/
|
|
20
|
+
const INTRODUCING = new Set([
|
|
21
|
+
"有",
|
|
22
|
+
"找",
|
|
23
|
+
"叫",
|
|
24
|
+
"请",
|
|
25
|
+
"請",
|
|
26
|
+
"雇",
|
|
27
|
+
"换",
|
|
28
|
+
"換",
|
|
29
|
+
"派",
|
|
30
|
+
]);
|
|
31
|
+
/**
|
|
32
|
+
* The aspect particle that can sit between the verb and the 个.
|
|
33
|
+
*/
|
|
34
|
+
const PERFECTIVE = "了";
|
|
35
|
+
/**
|
|
36
|
+
* The tag prefix jieba gives a noun.
|
|
37
|
+
*/
|
|
38
|
+
const NOUN_TAG = "n";
|
|
39
|
+
/**
|
|
40
|
+
* Whether a verb that introduces somebody stands in front of a 个人, with or
|
|
41
|
+
* without a 了 after it.
|
|
42
|
+
*
|
|
43
|
+
* The word after the 个人 is asked about too. 个人 in front of a noun is the
|
|
44
|
+
* modifier *personal* (我有个人问题, 有个人信息), and only a verb, a particle
|
|
45
|
+
* or the end of the run leaves the 人 to be the person.
|
|
46
|
+
*/
|
|
47
|
+
function isIntroduced(context, from, to) {
|
|
48
|
+
const { characters } = context;
|
|
49
|
+
const verb = characters[from - 1] === PERFECTIVE ? from - 2 : from - 1;
|
|
50
|
+
if (!INTRODUCING.has(characters[verb] ?? "")) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return !tagOf(context, wordStartingAt(context, to)).startsWith(NOUN_TAG);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 个人 is taken apart where an introducing verb makes its 个 count one 人.
|
|
57
|
+
*
|
|
58
|
+
* Taking the edge away leaves 个 and 人 to read as themselves. The readings
|
|
59
|
+
* are `gè rén` either way, so this changes the segmentation and the spacing.
|
|
60
|
+
*
|
|
61
|
+
* Over the 139,893 distinct Han runs of Tatoeba and the Chinese Boost example
|
|
62
|
+
* sentences, the decode kept 个人 as one word in 61 runs. The rule splits 12,
|
|
63
|
+
* and every one of them is somebody. A rough number in front (十几个人,
|
|
64
|
+
* 一百多个人) is left alone, because taking the edge away there moves the 个
|
|
65
|
+
* onto the 几 and reads 十 几个 人.
|
|
66
|
+
*/
|
|
67
|
+
export const COUNTED_GE = {
|
|
68
|
+
name: "counted-ge",
|
|
69
|
+
verdictFor: (context) => {
|
|
70
|
+
const { edge } = context;
|
|
71
|
+
return INDIVIDUAL.has(edge.text) &&
|
|
72
|
+
isIntroduced(context, edge.from, edge.to)
|
|
73
|
+
? "forbid"
|
|
74
|
+
: "keep";
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=ge-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ge-rule.js","sourceRoot":"","sources":["../../src/decode/ge-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAGL,KAAK,EACL,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACJ,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;GAEG;AACH,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,OAAoB,EAAE,IAAY,EAAE,EAAU;IAClE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACvE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,UAAU,GAAa;IAClC,IAAI,EAAE,YAAY;IAClB,UAAU,EAAE,CAAC,OAAoB,EAAE,EAAE;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,CAAC;IACb,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type EdgeContext } from "./rules.js";
|
|
2
|
+
/**
|
|
3
|
+
* Whether the 的 follows an adjective of speech that somebody said.
|
|
4
|
+
*
|
|
5
|
+
* The adjective can carry a degree (很蠢, 这么卑鄙), and before it stands a
|
|
6
|
+
* speaker (他刻薄的话), a verb of speaking (说出这么卑鄙的话, 说了很蠢的话) or
|
|
7
|
+
* another 的 (我说过的最愚蠢的话). A bare 难听的话 is left to the conditional.
|
|
8
|
+
*/
|
|
9
|
+
export declare function describesSpeech(context: EdgeContext, from: number): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Whether the 话 is the words something is put in: 用通俗的话解释.
|
|
12
|
+
*
|
|
13
|
+
* A 用 in the few characters before the 的, standing as a word of its own, and
|
|
14
|
+
* a verb of explaining at the 话's end or one character on (再说一遍,
|
|
15
|
+
* 做解释). 用电脑的话就快多了 has no such verb and stays the conditional, and so
|
|
16
|
+
* does 有用的话, whose 用 is half of another word.
|
|
17
|
+
*/
|
|
18
|
+
export declare function explainsIn(context: EdgeContext, from: number, to: number): boolean;
|
|
19
|
+
//# sourceMappingURL=hua-modified.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hua-modified.d.ts","sourceRoot":"","sources":["../../src/decode/hua-modified.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,YAAY,CAAC;AAWpB;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyB3E;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,OAAO,CAmBT"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the modifier before a 的 says about the 话 after it: 他刻薄的话,
|
|
3
|
+
* 说了很蠢的话, 用通俗的话解释.
|
|
4
|
+
*/
|
|
5
|
+
import { toCharacters } from "../script/characters.js";
|
|
6
|
+
import { wordEndingAt, wordsEndingAt, wordStartingAt, } from "./rules.js";
|
|
7
|
+
import { at } from "./hua-speaking.js";
|
|
8
|
+
import { DEGREE, EXPLAINING, OF_SPEECH, PERSONS, SPEAKING, SPEAKING_TAIL, } from "./hua-words.js";
|
|
9
|
+
/**
|
|
10
|
+
* Whether the 的 follows an adjective of speech that somebody said.
|
|
11
|
+
*
|
|
12
|
+
* The adjective can carry a degree (很蠢, 这么卑鄙), and before it stands a
|
|
13
|
+
* speaker (他刻薄的话), a verb of speaking (说出这么卑鄙的话, 说了很蠢的话) or
|
|
14
|
+
* another 的 (我说过的最愚蠢的话). A bare 难听的话 is left to the conditional.
|
|
15
|
+
*/
|
|
16
|
+
export function describesSpeech(context, from) {
|
|
17
|
+
const quality = wordsEndingAt(context, from, 2).find((word) => OF_SPEECH.has(word));
|
|
18
|
+
if (quality === undefined) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
let start = from - toCharacters(quality).length;
|
|
22
|
+
const degree = wordsEndingAt(context, start, 2).find((word) => DEGREE.has(word));
|
|
23
|
+
if (degree !== undefined) {
|
|
24
|
+
start -= toCharacters(degree).length;
|
|
25
|
+
}
|
|
26
|
+
if (at(context, start - 1) === "的" ||
|
|
27
|
+
wordsEndingAt(context, start, 2).some((word) => PERSONS.has(word))) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
let verb = start - 1;
|
|
31
|
+
while (verb > start - 4 && SPEAKING_TAIL.has(at(context, verb))) {
|
|
32
|
+
verb -= 1;
|
|
33
|
+
}
|
|
34
|
+
return SPEAKING.has(at(context, verb));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether the 话 is the words something is put in: 用通俗的话解释.
|
|
38
|
+
*
|
|
39
|
+
* A 用 in the few characters before the 的, standing as a word of its own, and
|
|
40
|
+
* a verb of explaining at the 话's end or one character on (再说一遍,
|
|
41
|
+
* 做解释). 用电脑的话就快多了 has no such verb and stays the conditional, and so
|
|
42
|
+
* does 有用的话, whose 用 is half of another word.
|
|
43
|
+
*/
|
|
44
|
+
export function explainsIn(context, from, to) {
|
|
45
|
+
let uses = false;
|
|
46
|
+
for (let index = from - 1; index >= Math.max(0, from - 5); index--) {
|
|
47
|
+
const character = at(context, index);
|
|
48
|
+
if (character === "的") {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (character === "用" && wordEndingAt(context, index + 1, 2) === "用") {
|
|
52
|
+
uses = true;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return (uses &&
|
|
57
|
+
[to, to + 1].some((index) => {
|
|
58
|
+
const word = wordStartingAt(context, index);
|
|
59
|
+
return word !== undefined && EXPLAINING.includes(word);
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=hua-modified.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hua-modified.js","sourceRoot":"","sources":["../../src/decode/hua-modified.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,8 @@ import { type EdgeRule } from "./rules.js";
|
|
|
5
5
|
* The conditional is the default, since it is what the word is, and the rule
|
|
6
6
|
* names the contexts where it cannot be: a 吗 or 里 after the 话, a time the
|
|
7
7
|
* words were said, a verb of speaking before the 的, a kind of words that verb
|
|
8
|
-
* is saying, a 句 counting them,
|
|
8
|
+
* is saying, a 句 counting them, an adjective of speech, the words something
|
|
9
|
+
* is explained in, or a person whose words they are. Taking the edge away leaves 的 and 话
|
|
9
10
|
* to read as themselves, which they already did, so this changes the spacing
|
|
10
11
|
* and the segmentation rather than any syllable: `shuō de huà`, not
|
|
11
12
|
* `shuō dehuà`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hua-rule.d.ts","sourceRoot":"","sources":["../../src/decode/hua-rule.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,QAAQ,EAId,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hua-rule.d.ts","sourceRoot":"","sources":["../../src/decode/hua-rule.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,QAAQ,EAId,MAAM,YAAY,CAAC;AAuDpB;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,EAAE,QAoBtB,CAAC"}
|
package/dist/decode/hua-rule.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { toCharacters } from "../script/characters.js";
|
|
11
11
|
import { tagOf, wordEndingAt, wordsEndingAt, } from "./rules.js";
|
|
12
12
|
import { DE_HUA, AFTER_NOUN, PERSONS, OWNER_TAGS, RECEIVING, NEGATION, RECEIVING_TAIL, EARLIER, } from "./hua-words.js";
|
|
13
|
+
import { describesSpeech, explainsIn } from "./hua-modified.js";
|
|
13
14
|
import { at, followsSpeaking, isCounted, saysKind } from "./hua-speaking.js";
|
|
14
15
|
/**
|
|
15
16
|
* Whether the 的 marks whose words they are, 他的话 and 听老师的话.
|
|
@@ -53,7 +54,8 @@ function isOwned(context, from, to) {
|
|
|
53
54
|
* The conditional is the default, since it is what the word is, and the rule
|
|
54
55
|
* names the contexts where it cannot be: a 吗 or 里 after the 话, a time the
|
|
55
56
|
* words were said, a verb of speaking before the 的, a kind of words that verb
|
|
56
|
-
* is saying, a 句 counting them,
|
|
57
|
+
* is saying, a 句 counting them, an adjective of speech, the words something
|
|
58
|
+
* is explained in, or a person whose words they are. Taking the edge away leaves 的 and 话
|
|
57
59
|
* to read as themselves, which they already did, so this changes the spacing
|
|
58
60
|
* and the segmentation rather than any syllable: `shuō de huà`, not
|
|
59
61
|
* `shuō dehuà`.
|
|
@@ -75,6 +77,8 @@ export const NOUN_HUA = {
|
|
|
75
77
|
followsSpeaking(context, from) ||
|
|
76
78
|
saysKind(context, from) ||
|
|
77
79
|
isCounted(context, from) ||
|
|
80
|
+
describesSpeech(context, from) ||
|
|
81
|
+
explainsIn(context, from, to) ||
|
|
78
82
|
isOwned(context, from, to)
|
|
79
83
|
? "forbid"
|
|
80
84
|
: "keep";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hua-rule.js","sourceRoot":"","sources":["../../src/decode/hua-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAGL,KAAK,EACL,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,UAAU,EACV,SAAS,EACT,QAAQ,EACR,cAAc,EACd,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7E;;;;;;;;;;;GAWG;AACH,SAAS,OAAO,CAAC,OAAoB,EAAE,IAAY,EAAE,EAAU;IAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,IACE,CAAC,QAAQ;QACT,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAC3E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;IACxC,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,KAAK,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,IAAI,CAAC,CAAC;IACZ,CAAC;IACD,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAC3E,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"hua-rule.js","sourceRoot":"","sources":["../../src/decode/hua-rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,4 +70,18 @@ export declare const RECEIVING_TAIL: Set<string>;
|
|
|
70
70
|
* When the words were said, which a conditional cannot be about: 刚才的话.
|
|
71
71
|
*/
|
|
72
72
|
export declare const EARLIER: Set<string>;
|
|
73
|
+
/**
|
|
74
|
+
* The adjectives that describe what was said, 刻薄的话 and 难听的话.
|
|
75
|
+
*
|
|
76
|
+
* Only adjectives that hardly describe a person or a state. 你累的话 and
|
|
77
|
+
* 你无聊的话 are conditionals, so 累 and 无聊 stay out.
|
|
78
|
+
*/
|
|
79
|
+
export declare const OF_SPEECH: Set<string>;
|
|
80
|
+
/** The degree an adjective of speech can carry: 很蠢, 最愚蠢, 这么卑鄙. */
|
|
81
|
+
export declare const DEGREE: Set<string>;
|
|
82
|
+
/**
|
|
83
|
+
* The verbs of explaining that follow the words something is put in:
|
|
84
|
+
* 用通俗的话解释, 用简练的话介绍.
|
|
85
|
+
*/
|
|
86
|
+
export declare const EXPLAINING: string[];
|
|
73
87
|
//# sourceMappingURL=hua-words.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hua-words.d.ts","sourceRoot":"","sources":["../../src/decode/hua-words.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sEAAsE;AACtE,eAAO,MAAM,MAAM,aAAwB,CAAC;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,aAAqC,CAAC;AAE7D,0DAA0D;AAC1D,eAAO,MAAM,QAAQ,aAAgC,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,aASvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,MAAM,aAAgC,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,aAAa,aASxB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,MAAM,aASjB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,IAAI,aAQf,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,OAAO,aAoBlB,CAAC;AAEH,yDAAyD;AACzD,eAAO,MAAM,UAAU,QAAyB,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"hua-words.d.ts","sourceRoot":"","sources":["../../src/decode/hua-words.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sEAAsE;AACtE,eAAO,MAAM,MAAM,aAAwB,CAAC;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,aAAqC,CAAC;AAE7D,0DAA0D;AAC1D,eAAO,MAAM,QAAQ,aAAgC,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,aASvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,MAAM,aAAgC,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,aAAa,aASxB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,MAAM,aASjB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,IAAI,aAQf,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,OAAO,aAoBlB,CAAC;AAEH,yDAAyD;AACzD,eAAO,MAAM,UAAU,QAAyB,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,aAqCpB,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,QAAQ,QAAY,CAAC;AAElC,4EAA4E;AAC5E,eAAO,MAAM,cAAc,aAAsB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,OAAO,aAAoC,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,aAwBpB,CAAC;AAEH,kEAAkE;AAClE,eAAO,MAAM,MAAM,aASjB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,UAAU,UAgBtB,CAAC"}
|
package/dist/decode/hua-words.js
CHANGED
|
@@ -141,6 +141,10 @@ export const RECEIVING = new Set([
|
|
|
141
141
|
"聽不懂",
|
|
142
142
|
"判断",
|
|
143
143
|
"判斷",
|
|
144
|
+
"印证",
|
|
145
|
+
"印證",
|
|
146
|
+
"证实",
|
|
147
|
+
"證實",
|
|
144
148
|
"记得",
|
|
145
149
|
"記得",
|
|
146
150
|
"因为",
|
|
@@ -158,4 +162,67 @@ export const RECEIVING_TAIL = new Set(["了", "完"]);
|
|
|
158
162
|
* When the words were said, which a conditional cannot be about: 刚才的话.
|
|
159
163
|
*/
|
|
160
164
|
export const EARLIER = new Set(["刚才", "剛才", "刚刚", "剛剛"]);
|
|
165
|
+
/**
|
|
166
|
+
* The adjectives that describe what was said, 刻薄的话 and 难听的话.
|
|
167
|
+
*
|
|
168
|
+
* Only adjectives that hardly describe a person or a state. 你累的话 and
|
|
169
|
+
* 你无聊的话 are conditionals, so 累 and 无聊 stay out.
|
|
170
|
+
*/
|
|
171
|
+
export const OF_SPEECH = new Set([
|
|
172
|
+
"刻薄",
|
|
173
|
+
"卑鄙",
|
|
174
|
+
"愚蠢",
|
|
175
|
+
"蠢",
|
|
176
|
+
"难听",
|
|
177
|
+
"難聽",
|
|
178
|
+
"好听",
|
|
179
|
+
"好聽",
|
|
180
|
+
"动听",
|
|
181
|
+
"動聽",
|
|
182
|
+
"中听",
|
|
183
|
+
"中聽",
|
|
184
|
+
"粗鲁",
|
|
185
|
+
"粗魯",
|
|
186
|
+
"粗俗",
|
|
187
|
+
"下流",
|
|
188
|
+
"肉麻",
|
|
189
|
+
"恶毒",
|
|
190
|
+
"惡毒",
|
|
191
|
+
"刺耳",
|
|
192
|
+
"尖酸",
|
|
193
|
+
"伤人",
|
|
194
|
+
"傷人",
|
|
195
|
+
]);
|
|
196
|
+
/** The degree an adjective of speech can carry: 很蠢, 最愚蠢, 这么卑鄙. */
|
|
197
|
+
export const DEGREE = new Set([
|
|
198
|
+
"很",
|
|
199
|
+
"最",
|
|
200
|
+
"更",
|
|
201
|
+
"太",
|
|
202
|
+
"多么",
|
|
203
|
+
"多麼",
|
|
204
|
+
"如此",
|
|
205
|
+
...MANNER,
|
|
206
|
+
]);
|
|
207
|
+
/**
|
|
208
|
+
* The verbs of explaining that follow the words something is put in:
|
|
209
|
+
* 用通俗的话解释, 用简练的话介绍.
|
|
210
|
+
*/
|
|
211
|
+
export const EXPLAINING = [
|
|
212
|
+
"解释",
|
|
213
|
+
"解釋",
|
|
214
|
+
"介绍",
|
|
215
|
+
"介紹",
|
|
216
|
+
"说",
|
|
217
|
+
"說",
|
|
218
|
+
"讲",
|
|
219
|
+
"講",
|
|
220
|
+
"表达",
|
|
221
|
+
"表達",
|
|
222
|
+
"描述",
|
|
223
|
+
"概括",
|
|
224
|
+
"回答",
|
|
225
|
+
"写",
|
|
226
|
+
"寫",
|
|
227
|
+
];
|
|
161
228
|
//# sourceMappingURL=hua-words.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hua-words.js","sourceRoot":"","sources":["../../src/decode/hua-words.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hua-words.js","sourceRoot":"","sources":["../../src/decode/hua-words.ts"],"names":[],"mappings":"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"}
|