@chaffjs/lang-en 0.8.0 → 0.10.0
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/citation.d.ts +2 -0
- package/dist/citation.d.ts.map +1 -1
- package/dist/citation.js +13 -0
- package/dist/citation.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/lexicons.d.ts.map +1 -1
- package/dist/lexicons.js +2 -0
- package/dist/lexicons.js.map +1 -1
- package/dist/number-stop.d.ts +3 -0
- package/dist/number-stop.d.ts.map +1 -0
- package/dist/number-stop.js +23 -0
- package/dist/number-stop.js.map +1 -0
- package/dist/pos.d.ts.map +1 -1
- package/dist/pos.js +56 -5
- package/dist/pos.js.map +1 -1
- package/dist/proper-noun.d.ts +6 -0
- package/dist/proper-noun.d.ts.map +1 -0
- package/dist/proper-noun.js +23 -0
- package/dist/proper-noun.js.map +1 -0
- package/dist/stative-participle.d.ts +19 -0
- package/dist/stative-participle.d.ts.map +1 -0
- package/dist/stative-participle.js +23 -0
- package/dist/stative-participle.js.map +1 -0
- package/dist/structure.js +2 -2
- package/dist/structure.js.map +1 -1
- package/lexicons/article.yaml +8 -0
- package/lexicons/common-acronym.yaml +72 -0
- package/lexicons/comparison-marker.yaml +9 -0
- package/lexicons/date-stamp-label.yaml +15 -0
- package/lexicons/definition-marker.yaml +14 -0
- package/lexicons/definition-verb.yaml +5 -0
- package/lexicons/degree-adverb.yaml +7 -0
- package/lexicons/doubled-word.yaml +30 -0
- package/lexicons/lead-in.yaml +8 -0
- package/lexicons/object-or-possessive.yaml +7 -0
- package/lexicons/stative-participle.yaml +25 -0
- package/lexicons/superlative-scope.yaml +10 -0
- package/package.json +1 -1
- package/src/citation.ts +15 -0
- package/src/index.ts +4 -3
- package/src/lexicons.ts +3 -0
- package/src/number-stop.ts +28 -0
- package/src/pos.ts +69 -5
- package/src/proper-noun.ts +21 -0
- package/src/stative-participle.ts +43 -0
- package/src/structure.ts +2 -2
package/dist/citation.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export type ListMember = {
|
|
|
7
7
|
* is one; after a singular ("Section 3 and 4 days") only one where the list goes on or ends.
|
|
8
8
|
*/
|
|
9
9
|
export declare const listMembers: (rest: string, plural: boolean) => ListMember[];
|
|
10
|
+
/** The document cited by a tag just before a reference, as in "see [HTTP], Section 12.1". */
|
|
11
|
+
export declare const citedDocumentBefore: (text: string, start: number) => string | undefined;
|
|
10
12
|
/**
|
|
11
13
|
* The document named right after a reference, or undefined when the reference is into this document.
|
|
12
14
|
* "of this Agreement" and "of the Agreement" are this document; "of the Master Agreement" is another.
|
package/dist/citation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citation.d.ts","sourceRoot":"","sources":["../src/citation.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAmB3E;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,QAAQ,OAAO,KAAG,UAAU,EAGtB,CAAC;
|
|
1
|
+
{"version":3,"file":"citation.d.ts","sourceRoot":"","sources":["../src/citation.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAmB3E;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,QAAQ,OAAO,KAAG,UAAU,EAGtB,CAAC;AAWjD,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,GAAG,SACG,CAAC;AA2B/E;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,GAAG,SAYvE,CAAC"}
|
package/dist/citation.js
CHANGED
|
@@ -34,6 +34,16 @@ const listEnd = (rest) => listed(rest).at(-1)?.end ?? 0;
|
|
|
34
34
|
export const listMembers = (rest, plural) => listed(rest)
|
|
35
35
|
.filter((member) => plural || MEMBER_END.test(rest.slice(member.end)))
|
|
36
36
|
.map(({ start, text }) => ({ start, text }));
|
|
37
|
+
/**
|
|
38
|
+
* A citation tag in brackets, as RFCs cite: "[HTTP]", "[URI]", "[RFC8126]". Capitals and digits only, so a bracketed
|
|
39
|
+
* word of a contract ("[Company]", "[Reserved]") is not taken for another document and still has to exist here.
|
|
40
|
+
*/
|
|
41
|
+
const TAG = "(?<tag>[A-Z][A-Z0-9]{1,30})";
|
|
42
|
+
const TAG_AFTER = new RegExp(`^\\[${TAG}\\]`, "u");
|
|
43
|
+
/** "[HTTP], Section 12.1": the tag written just before the reference. */
|
|
44
|
+
const TAG_BEFORE = new RegExp(`\\[${TAG}\\],?\\s?$`, "u");
|
|
45
|
+
/** The document cited by a tag just before a reference, as in "see [HTTP], Section 12.1". */
|
|
46
|
+
export const citedDocumentBefore = (text, start) => TAG_BEFORE.exec(text.slice(Math.max(0, start - 40), start))?.groups?.["tag"];
|
|
37
47
|
const CAPITALISED = /^[A-Z][\w'’-]*/u;
|
|
38
48
|
/**
|
|
39
49
|
* How a document names itself. "Section 3 of the Agreement" in an agreement means this one.
|
|
@@ -70,6 +80,9 @@ export const citedDocumentAfter = (text, end) => {
|
|
|
70
80
|
const of = OF.exec(rest.slice(listed));
|
|
71
81
|
if (of === null)
|
|
72
82
|
return undefined;
|
|
83
|
+
const tag = TAG_AFTER.exec(rest.slice(listed + of[0].length))?.groups?.["tag"];
|
|
84
|
+
if (tag !== undefined)
|
|
85
|
+
return tag;
|
|
73
86
|
const words = titleWords(rest.slice(listed + of[0].length));
|
|
74
87
|
if (words.length === 0)
|
|
75
88
|
return undefined;
|
package/dist/citation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citation.js","sourceRoot":"","sources":["../src/citation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"citation.js","sourceRoot":"","sources":["../src/citation.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { LanguageAdapter } from "chaffjs/plugin";
|
|
2
2
|
/**
|
|
3
|
-
* 英語は sentence-splitter
|
|
4
|
-
*
|
|
3
|
+
* 英語は sentence-splitter の既定にほぼ任せる。"Dr." "e.g." "U.S." "$3.50" を
|
|
4
|
+
* いずれも文末と誤認しない。前処理は、行の途中の番号を箇条書きと読ませないことだけ。spec §7.2。
|
|
5
5
|
*/
|
|
6
6
|
export declare const adapter: LanguageAdapter;
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,eAAe,EAA0B,MAAM,gBAAgB,CAAC;AAoB5F;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,eA4BrB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { loadLexicons } from "./lexicons.js";
|
|
2
|
+
import { unmarkNumberStops } from "./number-stop.js";
|
|
2
3
|
import { sentenceSpans } from "./sentence-split.js";
|
|
3
4
|
import { structure } from "./structure.js";
|
|
4
5
|
import { isReady, prepare, tokenize } from "./pos.js";
|
|
@@ -19,8 +20,8 @@ const withTokens = (sentence) => {
|
|
|
19
20
|
};
|
|
20
21
|
};
|
|
21
22
|
/**
|
|
22
|
-
* 英語は sentence-splitter
|
|
23
|
-
*
|
|
23
|
+
* 英語は sentence-splitter の既定にほぼ任せる。"Dr." "e.g." "U.S." "$3.50" を
|
|
24
|
+
* いずれも文末と誤認しない。前処理は、行の途中の番号を箇条書きと読ませないことだけ。spec §7.2。
|
|
24
25
|
*/
|
|
25
26
|
export const adapter = {
|
|
26
27
|
kind: "language",
|
|
@@ -49,7 +50,7 @@ export const adapter = {
|
|
|
49
50
|
lexicons: loadLexicons(),
|
|
50
51
|
structure,
|
|
51
52
|
segment: (text) => {
|
|
52
|
-
const sentences = sentenceSpans(text).map((span) => ({ span, text: text.slice(span.start, span.end) }));
|
|
53
|
+
const sentences = sentenceSpans(unmarkNumberStops(text)).map((span) => ({ span, text: text.slice(span.start, span.end) }));
|
|
53
54
|
return { sentences: isReady() ? sentences.map(withTokens) : sentences };
|
|
54
55
|
},
|
|
55
56
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGtD,2CAA2C;AAE3C,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,QAAkB,EAAY,EAAE;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC1C,OAAO;QACL,GAAG,QAAQ;QACX,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KAClJ,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAoB;IACtC,IAAI,EAAE,UAAU;IAChB,EAAE,EAAE,IAAI;IACR,UAAU,EAAE,CAAC;IACb,YAAY,EAAE;QACZ,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,IAAI;QACf,6CAA6C;QAC7C,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,MAAM;KACnB;IACD,OAAO,EAAE,CAAC,IAAkB,EAAiB,EAAE;QAC7C,0CAA0C;QAC1C,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,EAAE,CAAC,MAAc,EAAU,EAAE;QACjC,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;IAC3D,CAAC;IACD,QAAQ,EAAE,YAAY,EAAE;IACxB,SAAS;IACT,OAAO,EAAE,CAAC,IAAY,EAAgB,EAAE;QACtC,MAAM,SAAS,GAAe,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGtD,2CAA2C;AAE3C,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,QAAkB,EAAY,EAAE;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC1C,OAAO;QACL,GAAG,QAAQ;QACX,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KAClJ,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAoB;IACtC,IAAI,EAAE,UAAU;IAChB,EAAE,EAAE,IAAI;IACR,UAAU,EAAE,CAAC;IACb,YAAY,EAAE;QACZ,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,IAAI;QACf,6CAA6C;QAC7C,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,MAAM;KACnB;IACD,OAAO,EAAE,CAAC,IAAkB,EAAiB,EAAE;QAC7C,0CAA0C;QAC1C,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,EAAE,CAAC,MAAc,EAAU,EAAE;QACjC,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;IAC3D,CAAC;IACD,QAAQ,EAAE,YAAY,EAAE;IACxB,SAAS;IACT,OAAO,EAAE,CAAC,IAAY,EAAgB,EAAE;QACtC,MAAM,SAAS,GAAe,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvI,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC1E,CAAC;CACF,CAAC"}
|
package/dist/lexicons.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicons.d.ts","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"lexicons.d.ts","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,gBAAgB,CAAC;AAoB5D;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAK,MAAY,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAQ7D,CAAC"}
|
package/dist/lexicons.js
CHANGED
|
@@ -4,6 +4,7 @@ import { dirname, join } from "node:path";
|
|
|
4
4
|
import { parse } from "yaml";
|
|
5
5
|
const DIR = join(dirname(fileURLToPath(import.meta.url)), "..", "lexicons");
|
|
6
6
|
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7
|
+
const POSITIONS = ["before", "after"];
|
|
7
8
|
const toEntry = (raw) => {
|
|
8
9
|
if (!isRecord(raw) || typeof raw["pattern"] !== "string")
|
|
9
10
|
return undefined;
|
|
@@ -13,6 +14,7 @@ const toEntry = (raw) => {
|
|
|
13
14
|
pattern: raw["pattern"],
|
|
14
15
|
weight: typeof weight === "number" ? weight : undefined,
|
|
15
16
|
instead_of: typeof instead === "string" ? instead : undefined,
|
|
17
|
+
position: POSITIONS.find((position) => position === raw["position"]),
|
|
16
18
|
};
|
|
17
19
|
};
|
|
18
20
|
/**
|
package/dist/lexicons.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicons.js","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAE5I,MAAM,OAAO,GAAG,CAAC,GAAY,EAA4B,EAAE;IACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC3E,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;QACvB,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACvD,UAAU,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"lexicons.js","sourceRoot":"","sources":["../src/lexicons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAE5I,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAE/C,MAAM,OAAO,GAAG,CAAC,GAAY,EAA4B,EAAE;IACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC3E,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;QACvB,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACvD,UAAU,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC7D,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC;KACrE,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,GAAG,EAA2B,EAAE,CACzE,WAAW,CAAC,GAAG,CAAC;KACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACxC,MAAM,CAA0B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IAC7C,MAAM,GAAG,GAAY,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IAClG,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACnF,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC,EAAE,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-stop.d.ts","sourceRoot":"","sources":["../src/number-stop.ts"],"names":[],"mappings":"AAyBA,mCAAmC;AACnC,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MACiG,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sentence-splitter は空白の後の「数字だけ + ピリオド」を、どこにあっても箇条書きの番号と読み、そこで文を切らない。
|
|
3
|
+
* 「in the spring of 2026. We shipped」が 1 文になる。
|
|
4
|
+
*
|
|
5
|
+
* 行の途中にあり、次の語が大文字で始まる番号は文末である。その数字だけを同じ長さの英字に替えて分割器に渡し、
|
|
6
|
+
* 普通の語として読ませる。長さが変わらないので、返る span は元の文字列にそのまま当てはまる。
|
|
7
|
+
* 行頭の番号(「1. First」)と、次が大文字でない番号は替えない。
|
|
8
|
+
*/
|
|
9
|
+
const NUMBER_WORD = /(?<=\s)\d+(?=\.\s)/g;
|
|
10
|
+
// 次の語の頭。開き括弧・引用符の後の大文字も文頭である。
|
|
11
|
+
const CAPITAL_AFTER_SPACE = /\s+[\p{Ps}\p{Pi}"']*\p{Lu}/uy;
|
|
12
|
+
// 分割器の略語表に n だけでできた語は無い。数字の代わりに置いても、略語として読まれない。
|
|
13
|
+
const PLAIN_LETTER = "n";
|
|
14
|
+
const lineStartOf = (text, index) => Math.max(text.lastIndexOf("\n", index - 1), text.lastIndexOf("\r", index - 1)) + 1;
|
|
15
|
+
const isFirstOnLine = (text, index) => text.slice(lineStartOf(text, index), index).trim() === "";
|
|
16
|
+
const capitalFollows = (text, dot) => {
|
|
17
|
+
CAPITAL_AFTER_SPACE.lastIndex = dot + 1;
|
|
18
|
+
return CAPITAL_AFTER_SPACE.test(text);
|
|
19
|
+
};
|
|
20
|
+
const isSentenceEnd = (text, index, digits) => !isFirstOnLine(text, index) && capitalFollows(text, index + digits.length);
|
|
21
|
+
/** 文末の番号の数字を英字に替えた文字列。長さは変わらない。 */
|
|
22
|
+
export const unmarkNumberStops = (text) => text.replace(NUMBER_WORD, (digits, index) => (isSentenceEnd(text, index, digits) ? PLAIN_LETTER.repeat(digits.length) : digits));
|
|
23
|
+
//# sourceMappingURL=number-stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-stop.js","sourceRoot":"","sources":["../src/number-stop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAC1C,8BAA8B;AAC9B,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAC3D,gDAAgD;AAChD,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEhJ,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAa,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAE1H,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,GAAW,EAAW,EAAE;IAC5D,mBAAmB,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;IACxC,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,MAAc,EAAW,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE3J,mCAAmC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE,CACxD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAc,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
package/dist/pos.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../src/pos.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../src/pos.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AA+E5C,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,KAAG,MAAiE,CAAC;AAyFrG,eAAO,MAAM,OAAO,QAAO,IAE1B,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,OAAoC,CAAC;AAwBhE,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,KAAK,EAAE,GAAG,SAIjD,CAAC"}
|
package/dist/pos.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
|
+
import { loadLexicons } from "./lexicons.js";
|
|
3
|
+
import { properNounChecked } from "./proper-noun.js";
|
|
4
|
+
import { isStativeParticiple, stativeVocabulary } from "./stative-participle.js";
|
|
2
5
|
const require = createRequire(import.meta.url);
|
|
3
6
|
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
4
7
|
const isCallable = (value) => typeof value === "function";
|
|
@@ -77,12 +80,60 @@ export const upos = (tag) => (PUNCTUATION.has(tag) ? "PUNCT" : (BY_TAG[tag] ?? "
|
|
|
77
80
|
const SKIPPABLE = new Set(["RB", "RBR", "RBS", "CC", ","]);
|
|
78
81
|
const BE = new Set(["be", "am", "is", "are", "was", "were", "been", "being"]);
|
|
79
82
|
const isBe = (entry) => BE.has(entry.lemma ?? entry.value.toLowerCase()) || BE.has(entry.value.toLowerCase());
|
|
83
|
+
/** 過去分詞の前の be の位置。無ければ -1。 */
|
|
84
|
+
const beBefore = (tagged, at) => {
|
|
85
|
+
const head = tagged.slice(0, at).findLastIndex((entry) => !SKIPPABLE.has(entry.pos));
|
|
86
|
+
const entry = tagged[head];
|
|
87
|
+
return entry !== undefined && isBe(entry) ? head : -1;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* 関係節の中で名詞を修飾しているだけの受動。日本語の predicateOnly と同じ判断で、英語は修飾が名詞の後ろに来る。
|
|
91
|
+
* 「the report that was published」は動作主を隠しているのではなく名詞の説明なので、書き手に直す余地がない。
|
|
92
|
+
* 文の述語の受動(The decision was made.)は残す。名詞の後ろの being(the request being closed)は
|
|
93
|
+
* 動名詞の主語であることも多く、関係節と見分けられないので残す。
|
|
94
|
+
*/
|
|
95
|
+
const AUXILIARY_CHAIN = new Set(["RB", "RBR", "RBS", "MD"]);
|
|
96
|
+
const HAVE = new Set(["have", "has", "had", "having"]);
|
|
97
|
+
const isAuxiliary = (entry) => AUXILIARY_CHAIN.has(entry.pos) || isBe(entry) || HAVE.has(entry.value.toLowerCase());
|
|
98
|
+
/** 関係代名詞の前に立って、それが指す語。the report / those / anything。 */
|
|
99
|
+
const NOMINAL_TAG = new Set(["NN", "NNS", "NNP", "NNPS", "PRP", "CD", "DT"]);
|
|
100
|
+
const RELATIVE_TAG = new Set(["WDT", "WP"]);
|
|
101
|
+
const inRelativeClause = (tagged, be) => {
|
|
102
|
+
const lead = tagged.slice(0, be).findLastIndex((entry) => !isAuxiliary(entry));
|
|
103
|
+
const relative = tagged[lead];
|
|
104
|
+
if (relative === undefined || !RELATIVE_TAG.has(relative.pos))
|
|
105
|
+
return false;
|
|
106
|
+
// 文頭の That was decided. / Which was chosen? は、前に指す名詞が無いので述語。
|
|
107
|
+
const antecedent = tagged.slice(0, lead).findLast((entry) => entry.pos !== ",");
|
|
108
|
+
return antecedent !== undefined && NOMINAL_TAG.has(antecedent.pos);
|
|
109
|
+
};
|
|
110
|
+
const LEXICONS = loadLexicons();
|
|
111
|
+
const STATIVE = stativeVocabulary(LEXICONS);
|
|
80
112
|
const isPassive = (tagged, at) => {
|
|
81
113
|
if (tagged[at]?.pos !== "VBN")
|
|
82
114
|
return false;
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
115
|
+
const be = beBefore(tagged, at);
|
|
116
|
+
return be !== -1 && !inRelativeClause(tagged, be) && !isStativeParticiple(tagged, at, STATIVE);
|
|
117
|
+
};
|
|
118
|
+
const wordsOf = (name) => new Set((LEXICONS[name] ?? []).map((entry) => entry.pattern.toLowerCase()));
|
|
119
|
+
const ARTICLES = wordsOf("article");
|
|
120
|
+
/** 目的語にも所有にもなる語(give her the book / her book)。解析器はいつも PRP$ と付けるので、所有とは言えない。 */
|
|
121
|
+
const OBJECT_OR_POSSESSIVE = wordsOf("object-or-possessive");
|
|
122
|
+
const POSSESSIVE_TAG = new Set(["PRP$", "WP$"]);
|
|
123
|
+
/** 冠詞(PronType=Art)と所有の語(Poss=Yes)は、名詞の前に一つしか立たない。二つ並ぶ our the platform は書き損じ。 */
|
|
124
|
+
const determinerFeatures = (entry) => {
|
|
125
|
+
if (POSSESSIVE_TAG.has(entry.pos))
|
|
126
|
+
return OBJECT_OR_POSSESSIVE.has(entry.value.toLowerCase()) ? {} : { features: { Poss: "Yes" } };
|
|
127
|
+
return entry.pos === "DT" && ARTICLES.has(entry.value.toLowerCase()) ? { features: { PronType: "Art" } } : {};
|
|
128
|
+
};
|
|
129
|
+
/** 過去分詞は VerbForm=Part。Based on the review, のような分詞の導入句を、命令形の並び(fix the parser, ship it)と見分ける。 */
|
|
130
|
+
const featuresOf = (tagged, at) => {
|
|
131
|
+
const entry = tagged[at];
|
|
132
|
+
if (entry === undefined)
|
|
133
|
+
return {};
|
|
134
|
+
if (entry.pos !== "VBN")
|
|
135
|
+
return determinerFeatures(entry);
|
|
136
|
+
return { features: isPassive(tagged, at) ? { VerbForm: "Part", Voice: "Pass" } : { VerbForm: "Part" } };
|
|
86
137
|
};
|
|
87
138
|
const state = { ready: undefined };
|
|
88
139
|
export const prepare = () => {
|
|
@@ -101,9 +152,9 @@ const locate = (text, tagged) => tagged.reduce((acc, entry, at) => {
|
|
|
101
152
|
const token = {
|
|
102
153
|
span: { start, end },
|
|
103
154
|
surface: entry.value,
|
|
104
|
-
pos: upos(entry.pos),
|
|
155
|
+
pos: properNounChecked(entry.value, upos(entry.pos)),
|
|
105
156
|
...(entry.lemma === undefined ? {} : { lemma: entry.lemma }),
|
|
106
|
-
...(
|
|
157
|
+
...featuresOf(tagged, at),
|
|
107
158
|
};
|
|
108
159
|
return { tokens: [...acc.tokens, token], cursor: end };
|
|
109
160
|
}, { tokens: [], cursor: 0 }).tokens;
|
package/dist/pos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pos.js","sourceRoot":"","sources":["../src/pos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"pos.js","sourceRoot":"","sources":["../src/pos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 解析器が固有名詞とした語を、表記で確かめる。wink は知らない語を固有名詞にするが、英語の固有名詞は大文字で書く。
|
|
3
|
+
* 小文字だけで書いた語(linters、json、e.g. の e)は普通名詞、文字の無い語(—、$)は記号。大文字の無い文字(東京)の語は確かめようがないので触れない。
|
|
4
|
+
*/
|
|
5
|
+
export declare const properNounChecked: (surface: string, pos: string) => string;
|
|
6
|
+
//# sourceMappingURL=proper-noun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proper-noun.d.ts","sourceRoot":"","sources":["../src/proper-noun.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,KAAK,MAAM,KAAG,MAIhE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const LETTER = /\p{L}/u;
|
|
2
|
+
const CAPITAL = /\p{Lu}/u;
|
|
3
|
+
const SMALL = /\p{Ll}/u;
|
|
4
|
+
const DIGIT = /\p{N}/u;
|
|
5
|
+
const SYMBOL = /^[\p{Sc}\p{Sm}\p{So}]+$/u;
|
|
6
|
+
/** 文字の無い語の品詞。数字があれば数、通貨や数学の記号は記号、ほかは句読点(— や …)。 */
|
|
7
|
+
const nonWord = (surface) => {
|
|
8
|
+
if (DIGIT.test(surface))
|
|
9
|
+
return "NUM";
|
|
10
|
+
return SYMBOL.test(surface) ? "SYM" : "PUNCT";
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 解析器が固有名詞とした語を、表記で確かめる。wink は知らない語を固有名詞にするが、英語の固有名詞は大文字で書く。
|
|
14
|
+
* 小文字だけで書いた語(linters、json、e.g. の e)は普通名詞、文字の無い語(—、$)は記号。大文字の無い文字(東京)の語は確かめようがないので触れない。
|
|
15
|
+
*/
|
|
16
|
+
export const properNounChecked = (surface, pos) => {
|
|
17
|
+
if (pos !== "PROPN")
|
|
18
|
+
return pos;
|
|
19
|
+
if (!LETTER.test(surface))
|
|
20
|
+
return nonWord(surface);
|
|
21
|
+
return SMALL.test(surface) && !CAPITAL.test(surface) ? "NOUN" : "PROPN";
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=proper-noun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proper-noun.js","sourceRoot":"","sources":["../src/proper-noun.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,QAAQ,CAAC;AACvB,MAAM,MAAM,GAAG,0BAA0B,CAAC;AAE1C,mDAAmD;AACnD,MAAM,OAAO,GAAG,CAAC,OAAe,EAAU,EAAE;IAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,GAAW,EAAU,EAAE;IACxE,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1E,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Lexicon } from "chaffjs/plugin";
|
|
2
|
+
/** 解析器が返す 1 語。pos は Penn Treebank。 */
|
|
3
|
+
type TaggedWord = {
|
|
4
|
+
readonly value: string;
|
|
5
|
+
readonly pos: string;
|
|
6
|
+
};
|
|
7
|
+
/** 状態を表す過去分詞の句(語の並び)と、程度の副詞。どちらも語彙表から引く。 */
|
|
8
|
+
export type StativeVocabulary = {
|
|
9
|
+
readonly phrases: readonly (readonly string[])[];
|
|
10
|
+
readonly degreeAdverbs: ReadonlySet<string>;
|
|
11
|
+
};
|
|
12
|
+
export declare const stativeVocabulary: (lexicons: Readonly<Record<string, Lexicon>>) => StativeVocabulary;
|
|
13
|
+
/**
|
|
14
|
+
* be の後の過去分詞が、誰かのした動作ではなく状態を表しているか。
|
|
15
|
+
* We are delighted to offer / is based on / are entitled to には名指すべき動作主がいない。
|
|
16
|
+
*/
|
|
17
|
+
export declare const isStativeParticiple: (tagged: readonly TaggedWord[], at: number, vocabulary: StativeVocabulary) => boolean;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=stative-participle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stative-participle.d.ts","sourceRoot":"","sources":["../src/stative-participle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,sCAAsC;AACtC,KAAK,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,4CAA4C;AAC5C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC7C,CAAC;AAYF,eAAO,MAAM,iBAAiB,GAAI,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAG,iBAG9E,CAAC;AAaH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,UAAU,EAAE,EAAE,IAAI,MAAM,EAAE,YAAY,iBAAiB,KAAG,OACK,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const wordsOf = (lexicon) => (lexicon ?? [])
|
|
2
|
+
.map((entry) => entry.pattern
|
|
3
|
+
.toLowerCase()
|
|
4
|
+
.split(" ")
|
|
5
|
+
.filter((word) => word !== ""))
|
|
6
|
+
.filter((words) => words.length > 0);
|
|
7
|
+
export const stativeVocabulary = (lexicons) => ({
|
|
8
|
+
phrases: wordsOf(lexicons["stative-participle"]),
|
|
9
|
+
degreeAdverbs: new Set(wordsOf(lexicons["degree-adverb"]).flat()),
|
|
10
|
+
});
|
|
11
|
+
const wordAt = (tagged, at) => tagged[at]?.value.toLowerCase();
|
|
12
|
+
const startsPhrase = (tagged, at, phrase) => phrase.every((word, offset) => wordAt(tagged, at + offset) === word);
|
|
13
|
+
/** very は段階のある形容詞にしか付かない。very surprised は言えても very approved は言えない。 */
|
|
14
|
+
const afterDegreeAdverb = (tagged, at, vocabulary) => {
|
|
15
|
+
const before = wordAt(tagged, at - 1);
|
|
16
|
+
return before !== undefined && vocabulary.degreeAdverbs.has(before);
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* be の後の過去分詞が、誰かのした動作ではなく状態を表しているか。
|
|
20
|
+
* We are delighted to offer / is based on / are entitled to には名指すべき動作主がいない。
|
|
21
|
+
*/
|
|
22
|
+
export const isStativeParticiple = (tagged, at, vocabulary) => vocabulary.phrases.some((phrase) => startsPhrase(tagged, at, phrase)) || afterDegreeAdverb(tagged, at, vocabulary);
|
|
23
|
+
//# sourceMappingURL=stative-participle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stative-participle.js","sourceRoot":"","sources":["../src/stative-participle.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,GAAG,CAAC,OAA4B,EAAc,EAAE,CAC3D,CAAC,OAAO,IAAI,EAAE,CAAC;KACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,KAAK,CAAC,OAAO;KACV,WAAW,EAAE;KACb,KAAK,CAAC,GAAG,CAAC;KACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CACjC;KACA,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAA2C,EAAqB,EAAE,CAAC,CAAC;IACpG,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAChD,aAAa,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;CAClE,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,CAAC,MAA6B,EAAE,EAAU,EAAsB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;AAElH,MAAM,YAAY,GAAG,CAAC,MAA6B,EAAE,EAAU,EAAE,MAAyB,EAAW,EAAE,CACrG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;AAEvE,sEAAsE;AACtE,MAAM,iBAAiB,GAAG,CAAC,MAA6B,EAAE,EAAU,EAAE,UAA6B,EAAW,EAAE;IAC9G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAA6B,EAAE,EAAU,EAAE,UAA6B,EAAW,EAAE,CACvH,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC"}
|
package/dist/structure.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { citedDocumentAfter } from "./citation.js";
|
|
1
|
+
import { citedDocumentAfter, citedDocumentBefore } from "./citation.js";
|
|
2
2
|
import { membersAfter } from "./reference-list.js";
|
|
3
3
|
import { parseRoman } from "./roman.js";
|
|
4
4
|
import { dates } from "./dates.js";
|
|
@@ -184,7 +184,7 @@ const references = (text) => {
|
|
|
184
184
|
return [];
|
|
185
185
|
const { parts, end } = subdivisions(text, match.index + match[0].length);
|
|
186
186
|
advance(gloss, text, match.index);
|
|
187
|
-
const cited = citedDocumentAfter(text, end);
|
|
187
|
+
const cited = citedDocumentAfter(text, end) ?? citedDocumentBefore(text, match.index);
|
|
188
188
|
const document = cited ?? glossedDocument(gloss);
|
|
189
189
|
gloss.scanned = Math.max(gloss.scanned, end);
|
|
190
190
|
if (cited !== undefined)
|
package/dist/structure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# The articles. The tagger gives every determiner the same tag (DT), so the adapter marks these PronType=Art, as
|
|
2
|
+
# Universal Dependencies does: a noun takes one article or possessive, and two in a row ("our the platform") is a slip.
|
|
3
|
+
id: article
|
|
4
|
+
language: en
|
|
5
|
+
entries:
|
|
6
|
+
- pattern: a
|
|
7
|
+
- pattern: an
|
|
8
|
+
- pattern: the
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Acronyms a reader understands without the spelled-out form. Spelling them out would make the text harder to read.
|
|
2
|
+
id: common-acronym
|
|
3
|
+
language: en
|
|
4
|
+
entries:
|
|
5
|
+
- pattern: OK
|
|
6
|
+
- pattern: NG
|
|
7
|
+
- pattern: URL
|
|
8
|
+
- pattern: API
|
|
9
|
+
- pattern: CSS
|
|
10
|
+
- pattern: HTML
|
|
11
|
+
- pattern: JSON
|
|
12
|
+
- pattern: YAML
|
|
13
|
+
- pattern: HTTP
|
|
14
|
+
- pattern: HTTPS
|
|
15
|
+
- pattern: PDF
|
|
16
|
+
- pattern: CPU
|
|
17
|
+
- pattern: GPU
|
|
18
|
+
- pattern: RAM
|
|
19
|
+
- pattern: USB
|
|
20
|
+
- pattern: AI
|
|
21
|
+
- pattern: ID
|
|
22
|
+
- pattern: FAQ
|
|
23
|
+
- pattern: PR
|
|
24
|
+
- pattern: OS
|
|
25
|
+
- pattern: CLI
|
|
26
|
+
- pattern: UI
|
|
27
|
+
- pattern: UX
|
|
28
|
+
- pattern: SQL
|
|
29
|
+
- pattern: CSV
|
|
30
|
+
- pattern: XML
|
|
31
|
+
- pattern: TODO
|
|
32
|
+
- pattern: NOTE
|
|
33
|
+
- pattern: TIP
|
|
34
|
+
# 通信と符号化。技術文書でなくても説明なしで通じる。
|
|
35
|
+
- pattern: DNS
|
|
36
|
+
- pattern: IP
|
|
37
|
+
- pattern: TCP
|
|
38
|
+
- pattern: UDP
|
|
39
|
+
- pattern: SSH
|
|
40
|
+
- pattern: SSL
|
|
41
|
+
- pattern: TLS
|
|
42
|
+
- pattern: VPN
|
|
43
|
+
- pattern: LAN
|
|
44
|
+
- pattern: UTF
|
|
45
|
+
- pattern: ASCII
|
|
46
|
+
# 機器・形式・単位。
|
|
47
|
+
- pattern: PC
|
|
48
|
+
- pattern: IT
|
|
49
|
+
- pattern: SDK
|
|
50
|
+
- pattern: IDE
|
|
51
|
+
- pattern: PNG
|
|
52
|
+
- pattern: JPEG
|
|
53
|
+
- pattern: GIF
|
|
54
|
+
- pattern: SVG
|
|
55
|
+
- pattern: QR
|
|
56
|
+
- pattern: GPS
|
|
57
|
+
- pattern: SNS
|
|
58
|
+
- pattern: TV
|
|
59
|
+
- pattern: KB
|
|
60
|
+
- pattern: MB
|
|
61
|
+
- pattern: GB
|
|
62
|
+
- pattern: TB
|
|
63
|
+
# 役職と国・地域。
|
|
64
|
+
- pattern: CEO
|
|
65
|
+
- pattern: CTO
|
|
66
|
+
- pattern: CFO
|
|
67
|
+
- pattern: US
|
|
68
|
+
- pattern: USA
|
|
69
|
+
- pattern: UK
|
|
70
|
+
- pattern: EU
|
|
71
|
+
- pattern: UN
|
|
72
|
+
- pattern: DNA
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Words that name what a superlative is measured against. With one in the sentence, "the fastest" is a claim, not a boast.
|
|
2
|
+
id: comparison-marker
|
|
3
|
+
language: en
|
|
4
|
+
entries:
|
|
5
|
+
- pattern: among
|
|
6
|
+
- pattern: than
|
|
7
|
+
- pattern: compared
|
|
8
|
+
- pattern: based on
|
|
9
|
+
- pattern: according
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Labels of a page's date stamp. A paragraph holding only one of these and a date is page metadata, not preamble.
|
|
2
|
+
id: date-stamp-label
|
|
3
|
+
language: en
|
|
4
|
+
entries:
|
|
5
|
+
- pattern: Last updated
|
|
6
|
+
- pattern: Last updated on
|
|
7
|
+
- pattern: Updated
|
|
8
|
+
- pattern: Updated on
|
|
9
|
+
- pattern: Last modified
|
|
10
|
+
- pattern: Last reviewed
|
|
11
|
+
- pattern: Published
|
|
12
|
+
- pattern: Published on
|
|
13
|
+
- pattern: Posted
|
|
14
|
+
- pattern: Posted on
|
|
15
|
+
- pattern: Date
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Words written inside brackets before an acronym to define it: Service Level Agreement (hereinafter "SLA"),
|
|
2
|
+
# (the "SLA"), (aka the "GDPR"). They count only when the brackets hold nothing but these words and the acronym.
|
|
3
|
+
# Matched without regard to case.
|
|
4
|
+
id: definition-marker
|
|
5
|
+
language: en
|
|
6
|
+
entries:
|
|
7
|
+
- pattern: the
|
|
8
|
+
- pattern: hereinafter
|
|
9
|
+
- pattern: hereafter
|
|
10
|
+
- pattern: referred to as
|
|
11
|
+
- pattern: called
|
|
12
|
+
- pattern: aka
|
|
13
|
+
- pattern: a.k.a.
|
|
14
|
+
- pattern: also known as
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Words written inside brackets after an acronym to close its definition. English puts the defining words before the
|
|
2
|
+
# acronym (hereinafter "SLA"), so there are none; the list exists so both languages name the same two lists.
|
|
3
|
+
id: definition-verb
|
|
4
|
+
language: en
|
|
5
|
+
entries: []
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Adverbs of degree that only a gradable adjective takes: "very surprised" is a state, "very approved" is not English.
|
|
2
|
+
# A past participle right after one of these is not a passive. "more" and "overly" are left out: they also go with a
|
|
3
|
+
# verb ("No issue was more discussed", "The model was overly simplified"), and so does "so" ("to be so owned").
|
|
4
|
+
id: degree-adverb
|
|
5
|
+
language: en
|
|
6
|
+
entries:
|
|
7
|
+
- pattern: very
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Word pairs that doubled-word leaves alone: repeats that grammar allows. "had had" is the past perfect of have;
|
|
2
|
+
# "that that" a conjunction and a demonstrative, which the tagger does not always tell apart; "do do" is emphatic do
|
|
3
|
+
# ("We do do manual reviews"); "her her" an object and a possessive ("give her her copy"); "no no" an interjection
|
|
4
|
+
# the tagger reads as two determiners. "is is" is left out: "What it is is a plan" is rare in business text, "The
|
|
5
|
+
# plan is is ready" is a common slip.
|
|
6
|
+
#
|
|
7
|
+
# A phrasal verb's particle followed by the same preposition ("sign in in advance", "set up up to 10") is listed with
|
|
8
|
+
# the words around it, so that "stored in in the folder" and "set up up the environment" are still slips. An entry
|
|
9
|
+
# matches when the sentence has all its words in a row, the pair among them.
|
|
10
|
+
id: doubled-word
|
|
11
|
+
language: en
|
|
12
|
+
entries:
|
|
13
|
+
- pattern: had had
|
|
14
|
+
- pattern: that that
|
|
15
|
+
- pattern: do do
|
|
16
|
+
- pattern: her her
|
|
17
|
+
- pattern: no no
|
|
18
|
+
- pattern: sign in in
|
|
19
|
+
- pattern: signed in in
|
|
20
|
+
- pattern: log in in
|
|
21
|
+
- pattern: logged in in
|
|
22
|
+
- pattern: opt in in
|
|
23
|
+
- pattern: opted in in
|
|
24
|
+
- pattern: check in in
|
|
25
|
+
- pattern: checked in in
|
|
26
|
+
- pattern: log on on
|
|
27
|
+
- pattern: logged on on
|
|
28
|
+
- pattern: turn on on
|
|
29
|
+
- pattern: turned on on
|
|
30
|
+
- pattern: up up to
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Phrases that hand the reader over to the list or table below. A sentence with one is not counted by heading-echo,
|
|
2
|
+
# even when it repeats the heading's words. "the following" is left out: "the following day" hands over nothing.
|
|
3
|
+
id: lead-in
|
|
4
|
+
language: en
|
|
5
|
+
entries:
|
|
6
|
+
- pattern: as follows
|
|
7
|
+
- pattern: listed below
|
|
8
|
+
- pattern: set out below
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Pronouns that are both an object and a possessive: "give her the book", "her book". The tagger tags every "her" as
|
|
2
|
+
# a possessive (PRP$), so the adapter does not mark these Poss=Yes, and "sent her our report" is not read as two
|
|
3
|
+
# determiners in a row.
|
|
4
|
+
id: object-or-possessive
|
|
5
|
+
language: en
|
|
6
|
+
entries:
|
|
7
|
+
- pattern: her
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Past participles that, after be, describe a state rather than an action someone did: "We are delighted to offer",
|
|
2
|
+
# "The report is based on a survey", "you are entitled to". There is no hidden actor to name, so agentless-passive
|
|
3
|
+
# leaves them alone. A pattern of several words matches only that phrase: "logged in to" and "located in" are states,
|
|
4
|
+
# "Errors are logged in the console" and "The missing file was located" are passives. Words that are passives in
|
|
5
|
+
# business text as often as states are left out: committed ("an offence was committed"), linked ("documents are
|
|
6
|
+
# linked throughout"), required ("Receipts are required"). "interested" needs no entry: the tagger already reads it
|
|
7
|
+
# as an adjective.
|
|
8
|
+
id: stative-participle
|
|
9
|
+
language: en
|
|
10
|
+
entries:
|
|
11
|
+
- pattern: delighted
|
|
12
|
+
- pattern: excited
|
|
13
|
+
- pattern: surprised
|
|
14
|
+
- pattern: dissatisfied
|
|
15
|
+
- pattern: concerned
|
|
16
|
+
- pattern: nuanced
|
|
17
|
+
- pattern: gone
|
|
18
|
+
- pattern: involved
|
|
19
|
+
- pattern: based
|
|
20
|
+
- pattern: located in
|
|
21
|
+
- pattern: entitled
|
|
22
|
+
- pattern: related
|
|
23
|
+
- pattern: associated
|
|
24
|
+
- pattern: focused on
|
|
25
|
+
- pattern: logged in to
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Words that say what a superlative is the most of. position is the side of the superlative they stand on.
|
|
2
|
+
# English puts them after the superlative's noun phrase, with a noun phrase after them: "the best pizza in Chicago",
|
|
3
|
+
# "the most famous of the sculptures".
|
|
4
|
+
id: superlative-scope
|
|
5
|
+
language: en
|
|
6
|
+
entries:
|
|
7
|
+
- pattern: in
|
|
8
|
+
position: after
|
|
9
|
+
- pattern: of
|
|
10
|
+
position: after
|
package/package.json
CHANGED
package/src/citation.ts
CHANGED
|
@@ -43,6 +43,19 @@ export const listMembers = (rest: string, plural: boolean): ListMember[] =>
|
|
|
43
43
|
.filter((member) => plural || MEMBER_END.test(rest.slice(member.end)))
|
|
44
44
|
.map(({ start, text }) => ({ start, text }));
|
|
45
45
|
|
|
46
|
+
/**
|
|
47
|
+
* A citation tag in brackets, as RFCs cite: "[HTTP]", "[URI]", "[RFC8126]". Capitals and digits only, so a bracketed
|
|
48
|
+
* word of a contract ("[Company]", "[Reserved]") is not taken for another document and still has to exist here.
|
|
49
|
+
*/
|
|
50
|
+
const TAG = "(?<tag>[A-Z][A-Z0-9]{1,30})";
|
|
51
|
+
const TAG_AFTER = new RegExp(`^\\[${TAG}\\]`, "u");
|
|
52
|
+
/** "[HTTP], Section 12.1": the tag written just before the reference. */
|
|
53
|
+
const TAG_BEFORE = new RegExp(`\\[${TAG}\\],?\\s?$`, "u");
|
|
54
|
+
|
|
55
|
+
/** The document cited by a tag just before a reference, as in "see [HTTP], Section 12.1". */
|
|
56
|
+
export const citedDocumentBefore = (text: string, start: number): string | undefined =>
|
|
57
|
+
TAG_BEFORE.exec(text.slice(Math.max(0, start - 40), start))?.groups?.["tag"];
|
|
58
|
+
|
|
46
59
|
const CAPITALISED = /^[A-Z][\w'’-]*/u;
|
|
47
60
|
/**
|
|
48
61
|
* How a document names itself. "Section 3 of the Agreement" in an agreement means this one.
|
|
@@ -78,6 +91,8 @@ export const citedDocumentAfter = (text: string, end: number): string | undefine
|
|
|
78
91
|
const listed = afterList + (GLOSS.exec(rest.slice(afterList))?.[0].length ?? 0);
|
|
79
92
|
const of = OF.exec(rest.slice(listed));
|
|
80
93
|
if (of === null) return undefined;
|
|
94
|
+
const tag = TAG_AFTER.exec(rest.slice(listed + of[0].length))?.groups?.["tag"];
|
|
95
|
+
if (tag !== undefined) return tag;
|
|
81
96
|
const words = titleWords(rest.slice(listed + of[0].length));
|
|
82
97
|
if (words.length === 0) return undefined;
|
|
83
98
|
const name = words.join(" ");
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { loadLexicons } from "./lexicons.ts";
|
|
2
|
+
import { unmarkNumberStops } from "./number-stop.ts";
|
|
2
3
|
import { sentenceSpans } from "./sentence-split.ts";
|
|
3
4
|
import { structure } from "./structure.ts";
|
|
4
5
|
import { isReady, prepare, tokenize } from "./pos.ts";
|
|
@@ -23,8 +24,8 @@ const withTokens = (sentence: Sentence): Sentence => {
|
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
/**
|
|
26
|
-
* 英語は sentence-splitter
|
|
27
|
-
*
|
|
27
|
+
* 英語は sentence-splitter の既定にほぼ任せる。"Dr." "e.g." "U.S." "$3.50" を
|
|
28
|
+
* いずれも文末と誤認しない。前処理は、行の途中の番号を箇条書きと読ませないことだけ。spec §7.2。
|
|
28
29
|
*/
|
|
29
30
|
export const adapter: LanguageAdapter = {
|
|
30
31
|
kind: "language",
|
|
@@ -51,7 +52,7 @@ export const adapter: LanguageAdapter = {
|
|
|
51
52
|
lexicons: loadLexicons(),
|
|
52
53
|
structure,
|
|
53
54
|
segment: (text: string): Segmentation => {
|
|
54
|
-
const sentences: Sentence[] = sentenceSpans(text).map((span) => ({ span, text: text.slice(span.start, span.end) }));
|
|
55
|
+
const sentences: Sentence[] = sentenceSpans(unmarkNumberStops(text)).map((span) => ({ span, text: text.slice(span.start, span.end) }));
|
|
55
56
|
return { sentences: isReady() ? sentences.map(withTokens) : sentences };
|
|
56
57
|
},
|
|
57
58
|
};
|
package/src/lexicons.ts
CHANGED
|
@@ -8,6 +8,8 @@ const DIR = join(dirname(fileURLToPath(import.meta.url)), "..", "lexicons");
|
|
|
8
8
|
|
|
9
9
|
const isRecord = (value: unknown): value is Record<string, unknown> => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
10
10
|
|
|
11
|
+
const POSITIONS = ["before", "after"] as const;
|
|
12
|
+
|
|
11
13
|
const toEntry = (raw: unknown): LexiconEntry | undefined => {
|
|
12
14
|
if (!isRecord(raw) || typeof raw["pattern"] !== "string") return undefined;
|
|
13
15
|
const weight = raw["weight"];
|
|
@@ -16,6 +18,7 @@ const toEntry = (raw: unknown): LexiconEntry | undefined => {
|
|
|
16
18
|
pattern: raw["pattern"],
|
|
17
19
|
weight: typeof weight === "number" ? weight : undefined,
|
|
18
20
|
instead_of: typeof instead === "string" ? instead : undefined,
|
|
21
|
+
position: POSITIONS.find((position) => position === raw["position"]),
|
|
19
22
|
};
|
|
20
23
|
};
|
|
21
24
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sentence-splitter は空白の後の「数字だけ + ピリオド」を、どこにあっても箇条書きの番号と読み、そこで文を切らない。
|
|
3
|
+
* 「in the spring of 2026. We shipped」が 1 文になる。
|
|
4
|
+
*
|
|
5
|
+
* 行の途中にあり、次の語が大文字で始まる番号は文末である。その数字だけを同じ長さの英字に替えて分割器に渡し、
|
|
6
|
+
* 普通の語として読ませる。長さが変わらないので、返る span は元の文字列にそのまま当てはまる。
|
|
7
|
+
* 行頭の番号(「1. First」)と、次が大文字でない番号は替えない。
|
|
8
|
+
*/
|
|
9
|
+
const NUMBER_WORD = /(?<=\s)\d+(?=\.\s)/g;
|
|
10
|
+
// 次の語の頭。開き括弧・引用符の後の大文字も文頭である。
|
|
11
|
+
const CAPITAL_AFTER_SPACE = /\s+[\p{Ps}\p{Pi}"']*\p{Lu}/uy;
|
|
12
|
+
// 分割器の略語表に n だけでできた語は無い。数字の代わりに置いても、略語として読まれない。
|
|
13
|
+
const PLAIN_LETTER = "n";
|
|
14
|
+
|
|
15
|
+
const lineStartOf = (text: string, index: number): number => Math.max(text.lastIndexOf("\n", index - 1), text.lastIndexOf("\r", index - 1)) + 1;
|
|
16
|
+
|
|
17
|
+
const isFirstOnLine = (text: string, index: number): boolean => text.slice(lineStartOf(text, index), index).trim() === "";
|
|
18
|
+
|
|
19
|
+
const capitalFollows = (text: string, dot: number): boolean => {
|
|
20
|
+
CAPITAL_AFTER_SPACE.lastIndex = dot + 1;
|
|
21
|
+
return CAPITAL_AFTER_SPACE.test(text);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const isSentenceEnd = (text: string, index: number, digits: string): boolean => !isFirstOnLine(text, index) && capitalFollows(text, index + digits.length);
|
|
25
|
+
|
|
26
|
+
/** 文末の番号の数字を英字に替えた文字列。長さは変わらない。 */
|
|
27
|
+
export const unmarkNumberStops = (text: string): string =>
|
|
28
|
+
text.replace(NUMBER_WORD, (digits: string, index: number) => (isSentenceEnd(text, index, digits) ? PLAIN_LETTER.repeat(digits.length) : digits));
|
package/src/pos.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import type { Token } from "chaffjs/plugin";
|
|
3
|
+
import { loadLexicons } from "./lexicons.ts";
|
|
4
|
+
import { properNounChecked } from "./proper-noun.ts";
|
|
5
|
+
import { isStativeParticiple, stativeVocabulary } from "./stative-participle.ts";
|
|
3
6
|
|
|
4
7
|
const require = createRequire(import.meta.url);
|
|
5
8
|
|
|
@@ -94,11 +97,72 @@ const BE = new Set(["be", "am", "is", "are", "was", "were", "been", "being"]);
|
|
|
94
97
|
|
|
95
98
|
const isBe = (entry: Tagged): boolean => BE.has(entry.lemma ?? entry.value.toLowerCase()) || BE.has(entry.value.toLowerCase());
|
|
96
99
|
|
|
100
|
+
/** 過去分詞の前の be の位置。無ければ -1。 */
|
|
101
|
+
const beBefore = (tagged: readonly Tagged[], at: number): number => {
|
|
102
|
+
const head = tagged.slice(0, at).findLastIndex((entry) => !SKIPPABLE.has(entry.pos));
|
|
103
|
+
const entry = tagged[head];
|
|
104
|
+
return entry !== undefined && isBe(entry) ? head : -1;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* 関係節の中で名詞を修飾しているだけの受動。日本語の predicateOnly と同じ判断で、英語は修飾が名詞の後ろに来る。
|
|
109
|
+
* 「the report that was published」は動作主を隠しているのではなく名詞の説明なので、書き手に直す余地がない。
|
|
110
|
+
* 文の述語の受動(The decision was made.)は残す。名詞の後ろの being(the request being closed)は
|
|
111
|
+
* 動名詞の主語であることも多く、関係節と見分けられないので残す。
|
|
112
|
+
*/
|
|
113
|
+
const AUXILIARY_CHAIN = new Set(["RB", "RBR", "RBS", "MD"]);
|
|
114
|
+
|
|
115
|
+
const HAVE = new Set(["have", "has", "had", "having"]);
|
|
116
|
+
|
|
117
|
+
const isAuxiliary = (entry: Tagged): boolean => AUXILIARY_CHAIN.has(entry.pos) || isBe(entry) || HAVE.has(entry.value.toLowerCase());
|
|
118
|
+
|
|
119
|
+
/** 関係代名詞の前に立って、それが指す語。the report / those / anything。 */
|
|
120
|
+
const NOMINAL_TAG = new Set(["NN", "NNS", "NNP", "NNPS", "PRP", "CD", "DT"]);
|
|
121
|
+
|
|
122
|
+
const RELATIVE_TAG = new Set(["WDT", "WP"]);
|
|
123
|
+
|
|
124
|
+
const inRelativeClause = (tagged: readonly Tagged[], be: number): boolean => {
|
|
125
|
+
const lead = tagged.slice(0, be).findLastIndex((entry) => !isAuxiliary(entry));
|
|
126
|
+
const relative = tagged[lead];
|
|
127
|
+
if (relative === undefined || !RELATIVE_TAG.has(relative.pos)) return false;
|
|
128
|
+
// 文頭の That was decided. / Which was chosen? は、前に指す名詞が無いので述語。
|
|
129
|
+
const antecedent = tagged.slice(0, lead).findLast((entry) => entry.pos !== ",");
|
|
130
|
+
return antecedent !== undefined && NOMINAL_TAG.has(antecedent.pos);
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const LEXICONS = loadLexicons();
|
|
134
|
+
|
|
135
|
+
const STATIVE = stativeVocabulary(LEXICONS);
|
|
136
|
+
|
|
97
137
|
const isPassive = (tagged: readonly Tagged[], at: number): boolean => {
|
|
98
138
|
if (tagged[at]?.pos !== "VBN") return false;
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
139
|
+
const be = beBefore(tagged, at);
|
|
140
|
+
return be !== -1 && !inRelativeClause(tagged, be) && !isStativeParticiple(tagged, at, STATIVE);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const wordsOf = (name: string): ReadonlySet<string> => new Set((LEXICONS[name] ?? []).map((entry) => entry.pattern.toLowerCase()));
|
|
144
|
+
|
|
145
|
+
const ARTICLES = wordsOf("article");
|
|
146
|
+
|
|
147
|
+
/** 目的語にも所有にもなる語(give her the book / her book)。解析器はいつも PRP$ と付けるので、所有とは言えない。 */
|
|
148
|
+
const OBJECT_OR_POSSESSIVE = wordsOf("object-or-possessive");
|
|
149
|
+
|
|
150
|
+
const POSSESSIVE_TAG = new Set(["PRP$", "WP$"]);
|
|
151
|
+
|
|
152
|
+
type Features = { features?: Readonly<Record<string, string>> };
|
|
153
|
+
|
|
154
|
+
/** 冠詞(PronType=Art)と所有の語(Poss=Yes)は、名詞の前に一つしか立たない。二つ並ぶ our the platform は書き損じ。 */
|
|
155
|
+
const determinerFeatures = (entry: Tagged): Features => {
|
|
156
|
+
if (POSSESSIVE_TAG.has(entry.pos)) return OBJECT_OR_POSSESSIVE.has(entry.value.toLowerCase()) ? {} : { features: { Poss: "Yes" } };
|
|
157
|
+
return entry.pos === "DT" && ARTICLES.has(entry.value.toLowerCase()) ? { features: { PronType: "Art" } } : {};
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
/** 過去分詞は VerbForm=Part。Based on the review, のような分詞の導入句を、命令形の並び(fix the parser, ship it)と見分ける。 */
|
|
161
|
+
const featuresOf = (tagged: readonly Tagged[], at: number): Features => {
|
|
162
|
+
const entry = tagged[at];
|
|
163
|
+
if (entry === undefined) return {};
|
|
164
|
+
if (entry.pos !== "VBN") return determinerFeatures(entry);
|
|
165
|
+
return { features: isPassive(tagged, at) ? { VerbForm: "Part", Voice: "Pass" } : { VerbForm: "Part" } };
|
|
102
166
|
};
|
|
103
167
|
|
|
104
168
|
const state: { ready: Tagger | undefined } = { ready: undefined };
|
|
@@ -122,9 +186,9 @@ const locate = (text: string, tagged: readonly Tagged[]): Token[] =>
|
|
|
122
186
|
const token = {
|
|
123
187
|
span: { start, end },
|
|
124
188
|
surface: entry.value,
|
|
125
|
-
pos: upos(entry.pos),
|
|
189
|
+
pos: properNounChecked(entry.value, upos(entry.pos)),
|
|
126
190
|
...(entry.lemma === undefined ? {} : { lemma: entry.lemma }),
|
|
127
|
-
...(
|
|
191
|
+
...featuresOf(tagged, at),
|
|
128
192
|
};
|
|
129
193
|
return { tokens: [...acc.tokens, token], cursor: end };
|
|
130
194
|
},
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const LETTER = /\p{L}/u;
|
|
2
|
+
const CAPITAL = /\p{Lu}/u;
|
|
3
|
+
const SMALL = /\p{Ll}/u;
|
|
4
|
+
const DIGIT = /\p{N}/u;
|
|
5
|
+
const SYMBOL = /^[\p{Sc}\p{Sm}\p{So}]+$/u;
|
|
6
|
+
|
|
7
|
+
/** 文字の無い語の品詞。数字があれば数、通貨や数学の記号は記号、ほかは句読点(— や …)。 */
|
|
8
|
+
const nonWord = (surface: string): string => {
|
|
9
|
+
if (DIGIT.test(surface)) return "NUM";
|
|
10
|
+
return SYMBOL.test(surface) ? "SYM" : "PUNCT";
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 解析器が固有名詞とした語を、表記で確かめる。wink は知らない語を固有名詞にするが、英語の固有名詞は大文字で書く。
|
|
15
|
+
* 小文字だけで書いた語(linters、json、e.g. の e)は普通名詞、文字の無い語(—、$)は記号。大文字の無い文字(東京)の語は確かめようがないので触れない。
|
|
16
|
+
*/
|
|
17
|
+
export const properNounChecked = (surface: string, pos: string): string => {
|
|
18
|
+
if (pos !== "PROPN") return pos;
|
|
19
|
+
if (!LETTER.test(surface)) return nonWord(surface);
|
|
20
|
+
return SMALL.test(surface) && !CAPITAL.test(surface) ? "NOUN" : "PROPN";
|
|
21
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Lexicon } from "chaffjs/plugin";
|
|
2
|
+
|
|
3
|
+
/** 解析器が返す 1 語。pos は Penn Treebank。 */
|
|
4
|
+
type TaggedWord = { readonly value: string; readonly pos: string };
|
|
5
|
+
|
|
6
|
+
/** 状態を表す過去分詞の句(語の並び)と、程度の副詞。どちらも語彙表から引く。 */
|
|
7
|
+
export type StativeVocabulary = {
|
|
8
|
+
readonly phrases: readonly (readonly string[])[];
|
|
9
|
+
readonly degreeAdverbs: ReadonlySet<string>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const wordsOf = (lexicon: Lexicon | undefined): string[][] =>
|
|
13
|
+
(lexicon ?? [])
|
|
14
|
+
.map((entry) =>
|
|
15
|
+
entry.pattern
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.split(" ")
|
|
18
|
+
.filter((word) => word !== ""),
|
|
19
|
+
)
|
|
20
|
+
.filter((words) => words.length > 0);
|
|
21
|
+
|
|
22
|
+
export const stativeVocabulary = (lexicons: Readonly<Record<string, Lexicon>>): StativeVocabulary => ({
|
|
23
|
+
phrases: wordsOf(lexicons["stative-participle"]),
|
|
24
|
+
degreeAdverbs: new Set(wordsOf(lexicons["degree-adverb"]).flat()),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const wordAt = (tagged: readonly TaggedWord[], at: number): string | undefined => tagged[at]?.value.toLowerCase();
|
|
28
|
+
|
|
29
|
+
const startsPhrase = (tagged: readonly TaggedWord[], at: number, phrase: readonly string[]): boolean =>
|
|
30
|
+
phrase.every((word, offset) => wordAt(tagged, at + offset) === word);
|
|
31
|
+
|
|
32
|
+
/** very は段階のある形容詞にしか付かない。very surprised は言えても very approved は言えない。 */
|
|
33
|
+
const afterDegreeAdverb = (tagged: readonly TaggedWord[], at: number, vocabulary: StativeVocabulary): boolean => {
|
|
34
|
+
const before = wordAt(tagged, at - 1);
|
|
35
|
+
return before !== undefined && vocabulary.degreeAdverbs.has(before);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* be の後の過去分詞が、誰かのした動作ではなく状態を表しているか。
|
|
40
|
+
* We are delighted to offer / is based on / are entitled to には名指すべき動作主がいない。
|
|
41
|
+
*/
|
|
42
|
+
export const isStativeParticiple = (tagged: readonly TaggedWord[], at: number, vocabulary: StativeVocabulary): boolean =>
|
|
43
|
+
vocabulary.phrases.some((phrase) => startsPhrase(tagged, at, phrase)) || afterDegreeAdverb(tagged, at, vocabulary);
|
package/src/structure.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Mention, NumberedLine, NumberingContext, StructurePatterns } from "chaffjs/plugin";
|
|
2
|
-
import { citedDocumentAfter } from "./citation.ts";
|
|
2
|
+
import { citedDocumentAfter, citedDocumentBefore } from "./citation.ts";
|
|
3
3
|
import { membersAfter } from "./reference-list.ts";
|
|
4
4
|
import { parseRoman } from "./roman.ts";
|
|
5
5
|
import { dates } from "./dates.ts";
|
|
@@ -202,7 +202,7 @@ const references = (text: string): Mention[] => {
|
|
|
202
202
|
if (main === undefined) return [];
|
|
203
203
|
const { parts, end } = subdivisions(text, match.index + match[0].length);
|
|
204
204
|
advance(gloss, text, match.index);
|
|
205
|
-
const cited = citedDocumentAfter(text, end);
|
|
205
|
+
const cited = citedDocumentAfter(text, end) ?? citedDocumentBefore(text, match.index);
|
|
206
206
|
const document = cited ?? glossedDocument(gloss);
|
|
207
207
|
gloss.scanned = Math.max(gloss.scanned, end);
|
|
208
208
|
if (cited !== undefined) gloss.anchors.push({ document: cited, depth: gloss.depth });
|