chaffjs 0.34.0 → 0.35.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/capitals-passage.d.ts +3 -0
- package/dist/capitals-passage.d.ts.map +1 -0
- package/dist/capitals-passage.js +26 -0
- package/dist/capitals-passage.js.map +1 -0
- package/dist/coined-hyphen-name.d.ts +13 -0
- package/dist/coined-hyphen-name.d.ts.map +1 -0
- package/dist/coined-hyphen-name.js +21 -0
- package/dist/coined-hyphen-name.js.map +1 -0
- package/dist/company-names.d.ts +6 -1
- package/dist/company-names.d.ts.map +1 -1
- package/dist/company-names.js +22 -3
- package/dist/company-names.js.map +1 -1
- package/dist/detectors/acronym-context.d.ts +1 -1
- package/dist/detectors/acronym-context.d.ts.map +1 -1
- package/dist/detectors/acronym-context.js +4 -4
- package/dist/detectors/acronym-context.js.map +1 -1
- package/dist/detectors/acronym-definition.d.ts +13 -0
- package/dist/detectors/acronym-definition.d.ts.map +1 -0
- package/dist/detectors/acronym-definition.js +90 -0
- package/dist/detectors/acronym-definition.js.map +1 -0
- package/dist/detectors/acronym-lone.d.ts +13 -0
- package/dist/detectors/acronym-lone.d.ts.map +1 -0
- package/dist/detectors/acronym-lone.js +22 -0
- package/dist/detectors/acronym-lone.js.map +1 -0
- package/dist/detectors/acronym-name.d.ts +55 -0
- package/dist/detectors/acronym-name.d.ts.map +1 -0
- package/dist/detectors/acronym-name.js +75 -0
- package/dist/detectors/acronym-name.js.map +1 -0
- package/dist/detectors/capitalised-term.d.ts +14 -2
- package/dist/detectors/capitalised-term.d.ts.map +1 -1
- package/dist/detectors/capitalised-term.js +115 -4
- package/dist/detectors/capitalised-term.js.map +1 -1
- package/dist/detectors/caps-caption.d.ts +11 -0
- package/dist/detectors/caps-caption.d.ts.map +1 -0
- package/dist/detectors/caps-caption.js +51 -0
- package/dist/detectors/caps-caption.js.map +1 -0
- package/dist/detectors/char-shape.d.ts.map +1 -1
- package/dist/detectors/char-shape.js +47 -18
- package/dist/detectors/char-shape.js.map +1 -1
- package/dist/detectors/clause-shape.d.ts +1 -1
- package/dist/detectors/clause-shape.d.ts.map +1 -1
- package/dist/detectors/clause-shape.js +9 -4
- package/dist/detectors/clause-shape.js.map +1 -1
- package/dist/detectors/concrete-evidence.d.ts +13 -1
- package/dist/detectors/concrete-evidence.d.ts.map +1 -1
- package/dist/detectors/concrete-evidence.js +59 -0
- package/dist/detectors/concrete-evidence.js.map +1 -1
- package/dist/detectors/contraction-minority.d.ts +11 -0
- package/dist/detectors/contraction-minority.d.ts.map +1 -0
- package/dist/detectors/contraction-minority.js +10 -0
- package/dist/detectors/contraction-minority.js.map +1 -0
- package/dist/detectors/counter-edge.d.ts +5 -0
- package/dist/detectors/counter-edge.d.ts.map +1 -1
- package/dist/detectors/counter-edge.js +23 -0
- package/dist/detectors/counter-edge.js.map +1 -1
- package/dist/detectors/date-any-year.d.ts +6 -3
- package/dist/detectors/date-any-year.d.ts.map +1 -1
- package/dist/detectors/date-any-year.js +47 -10
- package/dist/detectors/date-any-year.js.map +1 -1
- package/dist/detectors/date-heading-year.d.ts +18 -0
- package/dist/detectors/date-heading-year.d.ts.map +1 -0
- package/dist/detectors/date-heading-year.js +38 -0
- package/dist/detectors/date-heading-year.js.map +1 -0
- package/dist/detectors/date-year.d.ts +12 -2
- package/dist/detectors/date-year.d.ts.map +1 -1
- package/dist/detectors/date-year.js +31 -6
- package/dist/detectors/date-year.js.map +1 -1
- package/dist/detectors/defined-term-form.d.ts.map +1 -1
- package/dist/detectors/defined-term-form.js +26 -5
- package/dist/detectors/defined-term-form.js.map +1 -1
- package/dist/detectors/due-date.d.ts.map +1 -1
- package/dist/detectors/due-date.js +6 -0
- package/dist/detectors/due-date.js.map +1 -1
- package/dist/detectors/en-shape.d.ts.map +1 -1
- package/dist/detectors/en-shape.js +5 -1
- package/dist/detectors/en-shape.js.map +1 -1
- package/dist/detectors/fact-consistency.d.ts.map +1 -1
- package/dist/detectors/fact-consistency.js +3 -2
- package/dist/detectors/fact-consistency.js.map +1 -1
- package/dist/detectors/gram-passages.d.ts +11 -0
- package/dist/detectors/gram-passages.d.ts.map +1 -0
- package/dist/detectors/gram-passages.js +26 -0
- package/dist/detectors/gram-passages.js.map +1 -0
- package/dist/detectors/heading-end-mark.d.ts +8 -3
- package/dist/detectors/heading-end-mark.d.ts.map +1 -1
- package/dist/detectors/heading-end-mark.js +18 -8
- package/dist/detectors/heading-end-mark.js.map +1 -1
- package/dist/detectors/heading-names.d.ts +7 -0
- package/dist/detectors/heading-names.d.ts.map +1 -0
- package/dist/detectors/heading-names.js +24 -0
- package/dist/detectors/heading-names.js.map +1 -0
- package/dist/detectors/heading-numbering.d.ts.map +1 -1
- package/dist/detectors/heading-numbering.js +7 -2
- package/dist/detectors/heading-numbering.js.map +1 -1
- package/dist/detectors/inch-mark.d.ts +10 -0
- package/dist/detectors/inch-mark.d.ts.map +1 -0
- package/dist/detectors/inch-mark.js +48 -0
- package/dist/detectors/inch-mark.js.map +1 -0
- package/dist/detectors/lexicon.d.ts +0 -1
- package/dist/detectors/lexicon.d.ts.map +1 -1
- package/dist/detectors/lexicon.js +29 -23
- package/dist/detectors/lexicon.js.map +1 -1
- package/dist/detectors/mark-shape.d.ts +6 -3
- package/dist/detectors/mark-shape.d.ts.map +1 -1
- package/dist/detectors/mark-shape.js +12 -6
- package/dist/detectors/mark-shape.js.map +1 -1
- package/dist/detectors/name-variant-apart.d.ts +27 -0
- package/dist/detectors/name-variant-apart.d.ts.map +1 -0
- package/dist/detectors/name-variant-apart.js +51 -0
- package/dist/detectors/name-variant-apart.js.map +1 -0
- package/dist/detectors/name-variant.d.ts.map +1 -1
- package/dist/detectors/name-variant.js +18 -11
- package/dist/detectors/name-variant.js.map +1 -1
- package/dist/detectors/numeral-word.d.ts +15 -0
- package/dist/detectors/numeral-word.d.ts.map +1 -0
- package/dist/detectors/numeral-word.js +26 -0
- package/dist/detectors/numeral-word.js.map +1 -0
- package/dist/detectors/organisation-run.d.ts +14 -0
- package/dist/detectors/organisation-run.d.ts.map +1 -0
- package/dist/detectors/organisation-run.js +73 -0
- package/dist/detectors/organisation-run.js.map +1 -0
- package/dist/detectors/orthographic-variant.d.ts.map +1 -1
- package/dist/detectors/orthographic-variant.js +13 -5
- package/dist/detectors/orthographic-variant.js.map +1 -1
- package/dist/detectors/outline-label.d.ts +14 -0
- package/dist/detectors/outline-label.d.ts.map +1 -0
- package/dist/detectors/outline-label.js +32 -0
- package/dist/detectors/outline-label.js.map +1 -0
- package/dist/detectors/page-marker.d.ts +6 -0
- package/dist/detectors/page-marker.d.ts.map +1 -0
- package/dist/detectors/page-marker.js +19 -0
- package/dist/detectors/page-marker.js.map +1 -0
- package/dist/detectors/parallel-definition.d.ts +16 -0
- package/dist/detectors/parallel-definition.d.ts.map +1 -0
- package/dist/detectors/parallel-definition.js +51 -0
- package/dist/detectors/parallel-definition.js.map +1 -0
- package/dist/detectors/reference-text.d.ts.map +1 -1
- package/dist/detectors/reference-text.js +1 -0
- package/dist/detectors/reference-text.js.map +1 -1
- package/dist/detectors/registry/unfilled-placeholder.d.ts.map +1 -1
- package/dist/detectors/registry/unfilled-placeholder.js +2 -2
- package/dist/detectors/registry/unfilled-placeholder.js.map +1 -1
- package/dist/detectors/registry/vague-density.js +1 -1
- package/dist/detectors/registry/vague-density.js.map +1 -1
- package/dist/detectors/request-owner.d.ts +6 -2
- package/dist/detectors/request-owner.d.ts.map +1 -1
- package/dist/detectors/request-owner.js +57 -7
- package/dist/detectors/request-owner.js.map +1 -1
- package/dist/detectors/requirement-smell.d.ts.map +1 -1
- package/dist/detectors/requirement-smell.js +10 -2
- package/dist/detectors/requirement-smell.js.map +1 -1
- package/dist/detectors/sentence-length.d.ts.map +1 -1
- package/dist/detectors/sentence-length.js +24 -16
- package/dist/detectors/sentence-length.js.map +1 -1
- package/dist/detectors/sentence-rhythm.d.ts.map +1 -1
- package/dist/detectors/sentence-rhythm.js +6 -3
- package/dist/detectors/sentence-rhythm.js.map +1 -1
- package/dist/detectors/series-label.d.ts +2 -1
- package/dist/detectors/series-label.d.ts.map +1 -1
- package/dist/detectors/series-label.js +10 -4
- package/dist/detectors/series-label.js.map +1 -1
- package/dist/detectors/signals.d.ts +4 -0
- package/dist/detectors/signals.d.ts.map +1 -1
- package/dist/detectors/signals.js +95 -36
- package/dist/detectors/signals.js.map +1 -1
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +8 -7
- package/dist/detectors/structure-tree.js.map +1 -1
- package/dist/detectors/template-sections.d.ts +14 -0
- package/dist/detectors/template-sections.d.ts.map +1 -0
- package/dist/detectors/template-sections.js +25 -0
- package/dist/detectors/template-sections.js.map +1 -0
- package/dist/detectors/titled-run.d.ts +22 -0
- package/dist/detectors/titled-run.d.ts.map +1 -0
- package/dist/detectors/titled-run.js +34 -0
- package/dist/detectors/titled-run.js.map +1 -0
- package/dist/detectors/unbalanced-bracket.d.ts.map +1 -1
- package/dist/detectors/unbalanced-bracket.js +4 -0
- package/dist/detectors/unbalanced-bracket.js.map +1 -1
- package/dist/detectors/undefined-term.d.ts.map +1 -1
- package/dist/detectors/undefined-term.js +8 -0
- package/dist/detectors/undefined-term.js.map +1 -1
- package/dist/detectors/unfilled-placeholder.d.ts +4 -0
- package/dist/detectors/unfilled-placeholder.d.ts.map +1 -0
- package/dist/detectors/unfilled-placeholder.js +9 -0
- package/dist/detectors/unfilled-placeholder.js.map +1 -0
- package/dist/detectors/vague-density.d.ts +5 -0
- package/dist/detectors/vague-density.d.ts.map +1 -0
- package/dist/detectors/vague-density.js +52 -0
- package/dist/detectors/vague-density.js.map +1 -0
- package/dist/facts/fact-scope.d.ts +10 -1
- package/dist/facts/fact-scope.d.ts.map +1 -1
- package/dist/facts/fact-scope.js +34 -3
- package/dist/facts/fact-scope.js.map +1 -1
- package/dist/facts/table-facts.d.ts +12 -2
- package/dist/facts/table-facts.d.ts.map +1 -1
- package/dist/facts/table-facts.js +22 -4
- package/dist/facts/table-facts.js.map +1 -1
- package/dist/grade-api.d.ts +9 -2
- package/dist/grade-api.d.ts.map +1 -1
- package/dist/grade-api.js +31 -15
- package/dist/grade-api.js.map +1 -1
- package/dist/heading-numbering.d.ts +5 -2
- package/dist/heading-numbering.d.ts.map +1 -1
- package/dist/heading-numbering.js +27 -6
- package/dist/heading-numbering.js.map +1 -1
- package/dist/name-end-letter.d.ts +5 -0
- package/dist/name-end-letter.d.ts.map +1 -1
- package/dist/name-end-letter.js +8 -0
- package/dist/name-end-letter.js.map +1 -1
- package/dist/name-given-before.d.ts +15 -0
- package/dist/name-given-before.d.ts.map +1 -0
- package/dist/name-given-before.js +30 -0
- package/dist/name-given-before.js.map +1 -0
- package/dist/name-separator.d.ts +2 -2
- package/dist/name-separator.d.ts.map +1 -1
- package/dist/name-separator.js +56 -5
- package/dist/name-separator.js.map +1 -1
- package/dist/name-variants.d.ts +3 -1
- package/dist/name-variants.d.ts.map +1 -1
- package/dist/name-variants.js +8 -7
- package/dist/name-variants.js.map +1 -1
- package/dist/name-word-order.d.ts +9 -5
- package/dist/name-word-order.d.ts.map +1 -1
- package/dist/name-word-order.js +47 -15
- package/dist/name-word-order.js.map +1 -1
- package/dist/nominal-stem.d.ts +13 -0
- package/dist/nominal-stem.d.ts.map +1 -0
- package/dist/nominal-stem.js +32 -0
- package/dist/nominal-stem.js.map +1 -0
- package/dist/sentence-load.d.ts +2 -1
- package/dist/sentence-load.d.ts.map +1 -1
- package/dist/sentence-load.js +6 -2
- package/dist/sentence-load.js.map +1 -1
- package/dist/structure/cited-document-section.d.ts +7 -0
- package/dist/structure/cited-document-section.d.ts.map +1 -0
- package/dist/structure/cited-document-section.js +33 -0
- package/dist/structure/cited-document-section.js.map +1 -0
- package/dist/structure/html-text-blocks.d.ts +8 -0
- package/dist/structure/html-text-blocks.d.ts.map +1 -0
- package/dist/structure/html-text-blocks.js +47 -0
- package/dist/structure/html-text-blocks.js.map +1 -0
- package/dist/structure/issues.d.ts +1 -1
- package/dist/structure/issues.d.ts.map +1 -1
- package/dist/structure/issues.js +19 -4
- package/dist/structure/issues.js.map +1 -1
- package/dist/structure/labelled-date-order.d.ts +4 -1
- package/dist/structure/labelled-date-order.d.ts.map +1 -1
- package/dist/structure/labelled-date-order.js +2 -2
- package/dist/structure/labelled-date-order.js.map +1 -1
- package/dist/structure/labelled-order.d.ts +3 -0
- package/dist/structure/labelled-order.d.ts.map +1 -1
- package/dist/structure/labelled-order.js +8 -3
- package/dist/structure/labelled-order.js.map +1 -1
- package/dist/structure/list-numbering.d.ts +20 -4
- package/dist/structure/list-numbering.d.ts.map +1 -1
- package/dist/structure/list-numbering.js +65 -9
- package/dist/structure/list-numbering.js.map +1 -1
- package/dist/structure/listed-paragraph.d.ts +16 -0
- package/dist/structure/listed-paragraph.d.ts.map +1 -0
- package/dist/structure/listed-paragraph.js +37 -0
- package/dist/structure/listed-paragraph.js.map +1 -0
- package/dist/structure/numbering.d.ts +3 -2
- package/dist/structure/numbering.d.ts.map +1 -1
- package/dist/structure/numbering.js +31 -6
- package/dist/structure/numbering.js.map +1 -1
- package/dist/structure/reference-text.d.ts +9 -1
- package/dist/structure/reference-text.d.ts.map +1 -1
- package/dist/structure/reference-text.js +21 -3
- package/dist/structure/reference-text.js.map +1 -1
- package/dist/structure/section-names.d.ts +12 -0
- package/dist/structure/section-names.d.ts.map +1 -0
- package/dist/structure/section-names.js +26 -0
- package/dist/structure/section-names.js.map +1 -0
- package/dist/structure/versioned-label.d.ts +16 -0
- package/dist/structure/versioned-label.d.ts.map +1 -0
- package/dist/structure/versioned-label.js +48 -0
- package/dist/structure/versioned-label.js.map +1 -0
- package/dist/structure/written-headings.d.ts +31 -0
- package/dist/structure/written-headings.d.ts.map +1 -0
- package/dist/structure/written-headings.js +119 -0
- package/dist/structure/written-headings.js.map +1 -0
- package/dist/structure/written-resolve.d.ts +12 -0
- package/dist/structure/written-resolve.d.ts.map +1 -0
- package/dist/structure/written-resolve.js +49 -0
- package/dist/structure/written-resolve.js.map +1 -0
- package/package.json +3 -3
- package/rules/all-caps-shouting.yaml +2 -2
- package/rules/concrete-evidence-density.yaml +2 -2
- package/rules/contraction-consistency.yaml +13 -13
- package/rules/dangling-reference.yaml +2 -2
- package/rules/date-without-year.yaml +2 -2
- package/rules/defined-name-repeated.yaml +2 -2
- package/rules/fact-conflict.yaml +2 -2
- package/rules/heading-end-punctuation-mix.yaml +2 -2
- package/rules/heading-numbering-mix.yaml +2 -2
- package/rules/latin-spacing.yaml +2 -2
- package/rules/max-kanji-continuous.yaml +5 -3
- package/rules/max-sentence-length.yaml +3 -2
- package/rules/name-variant.yaml +2 -2
- package/rules/ngram-repetition.yaml +2 -2
- package/rules/numbering-gap.yaml +2 -2
- package/rules/orthographic-variant.yaml +2 -2
- package/rules/reference-title-mismatch.yaml +2 -2
- package/rules/repeated-sentence-ending.yaml +3 -2
- package/rules/request-without-deadline.yaml +2 -2
- package/rules/requirement-smell.yaml +2 -2
- package/rules/sentence-rhythm.yaml +2 -2
- package/rules/title-case-consistency.yaml +2 -2
- package/rules/unbalanced-bracket.yaml +2 -2
- package/rules/undefined-acronym.yaml +11 -2
- package/rules/undefined-term.yaml +2 -2
- package/rules/unfilled-placeholder.yaml +2 -2
- package/rules/vague-word-density.yaml +2 -2
- package/src/capitals-passage.ts +31 -0
- package/src/coined-hyphen-name.ts +27 -0
- package/src/company-names.ts +24 -3
- package/src/detectors/acronym-context.ts +5 -6
- package/src/detectors/acronym-definition.ts +123 -0
- package/src/detectors/acronym-lone.ts +26 -0
- package/src/detectors/acronym-name.ts +117 -0
- package/src/detectors/capitalised-term.ts +154 -4
- package/src/detectors/caps-caption.ts +61 -0
- package/src/detectors/char-shape.ts +74 -22
- package/src/detectors/clause-shape.ts +14 -4
- package/src/detectors/concrete-evidence.ts +77 -1
- package/src/detectors/contraction-minority.ts +11 -0
- package/src/detectors/counter-edge.ts +23 -0
- package/src/detectors/date-any-year.ts +56 -10
- package/src/detectors/date-heading-year.ts +55 -0
- package/src/detectors/date-year.ts +54 -9
- package/src/detectors/defined-term-form.ts +26 -5
- package/src/detectors/due-date.ts +10 -1
- package/src/detectors/en-shape.ts +5 -1
- package/src/detectors/fact-consistency.ts +3 -2
- package/src/detectors/gram-passages.ts +36 -0
- package/src/detectors/heading-end-mark.ts +23 -10
- package/src/detectors/heading-names.ts +31 -0
- package/src/detectors/heading-numbering.ts +7 -2
- package/src/detectors/inch-mark.ts +49 -0
- package/src/detectors/lexicon.ts +32 -21
- package/src/detectors/mark-shape.ts +12 -6
- package/src/detectors/name-variant-apart.ts +63 -0
- package/src/detectors/name-variant.ts +30 -12
- package/src/detectors/numeral-word.ts +33 -0
- package/src/detectors/organisation-run.ts +86 -0
- package/src/detectors/orthographic-variant.ts +22 -6
- package/src/detectors/outline-label.ts +48 -0
- package/src/detectors/page-marker.ts +26 -0
- package/src/detectors/parallel-definition.ts +64 -0
- package/src/detectors/reference-text.ts +1 -0
- package/src/detectors/registry/unfilled-placeholder.ts +2 -2
- package/src/detectors/registry/vague-density.ts +1 -1
- package/src/detectors/request-owner.ts +71 -8
- package/src/detectors/requirement-smell.ts +15 -2
- package/src/detectors/sentence-length.ts +14 -6
- package/src/detectors/sentence-rhythm.ts +8 -4
- package/src/detectors/series-label.ts +13 -4
- package/src/detectors/signals.ts +94 -26
- package/src/detectors/structure-tree.ts +10 -8
- package/src/detectors/template-sections.ts +37 -0
- package/src/detectors/titled-run.ts +43 -0
- package/src/detectors/unbalanced-bracket.ts +3 -0
- package/src/detectors/undefined-term.ts +8 -0
- package/src/detectors/unfilled-placeholder.ts +10 -0
- package/src/detectors/vague-density.ts +68 -0
- package/src/facts/fact-scope.ts +53 -4
- package/src/facts/table-facts.ts +43 -6
- package/src/grade-api.ts +38 -16
- package/src/heading-numbering.ts +35 -8
- package/src/name-end-letter.ts +9 -0
- package/src/name-given-before.ts +40 -0
- package/src/name-separator.ts +66 -5
- package/src/name-variants.ts +21 -11
- package/src/name-word-order.ts +62 -17
- package/src/nominal-stem.ts +36 -0
- package/src/sentence-load.ts +7 -2
- package/src/structure/cited-document-section.ts +42 -0
- package/src/structure/html-text-blocks.ts +45 -0
- package/src/structure/issues.ts +19 -4
- package/src/structure/labelled-date-order.ts +5 -2
- package/src/structure/labelled-order.ts +12 -3
- package/src/structure/list-numbering.ts +100 -11
- package/src/structure/listed-paragraph.ts +45 -0
- package/src/structure/numbering.ts +48 -19
- package/src/structure/reference-text.ts +25 -3
- package/src/structure/section-names.ts +32 -0
- package/src/structure/versioned-label.ts +52 -0
- package/src/structure/written-headings.ts +137 -0
- package/src/structure/written-resolve.ts +57 -0
package/dist/grade-api.js
CHANGED
|
@@ -11,9 +11,11 @@ import { withStyle } from "./config/style.js";
|
|
|
11
11
|
import { withExtensions } from "./extension/load.js";
|
|
12
12
|
import { GENRES } from "./genre.js";
|
|
13
13
|
import { gradeItem } from "./grade/grade-item.js";
|
|
14
|
+
import { expectProblems } from "./grade/expect-read.js";
|
|
14
15
|
import { readItem } from "./grade/item.js";
|
|
15
16
|
import { parseRubric } from "./grade/rubric.js";
|
|
16
17
|
import { gradeSetup } from "./grade/setup.js";
|
|
18
|
+
import { taskNamesOf } from "./grade/task-rubric.js";
|
|
17
19
|
import { GRADE_TEXT } from "./grade/text.js";
|
|
18
20
|
import { compareVariantGroups } from "./grade/variants.js";
|
|
19
21
|
import { variantGroupsOf } from "./grade/variants-input.js";
|
|
@@ -77,23 +79,24 @@ const rubricOf = (config) => {
|
|
|
77
79
|
* packages and hashes the rules once. Keyed by the object itself: two chaff.yaml files that read alike may load other code.
|
|
78
80
|
*/
|
|
79
81
|
const setups = new WeakMap();
|
|
80
|
-
const setupFor = (config, experimental, languages) => {
|
|
82
|
+
const setupFor = (config, rubric, experimental, languages) => {
|
|
81
83
|
const run = { experimental, genre: undefined };
|
|
82
84
|
const own = setups.get(config) ?? new Map();
|
|
83
85
|
setups.set(config, own);
|
|
84
|
-
|
|
86
|
+
// The rubric is in the key: an item's task was checked against this rubric, so the setup must grade by the same one.
|
|
87
|
+
const key = `${String(experimental)}\n${languages.join(",")}\n${JSON.stringify(rubric) ?? ""}`;
|
|
85
88
|
const known = own.get(key);
|
|
86
89
|
if (known !== undefined)
|
|
87
90
|
return known;
|
|
88
|
-
const made = remember(own, key, gradeSetup(config, run, languages,
|
|
91
|
+
const made = remember(own, key, gradeSetup(config, run, languages, rubric));
|
|
89
92
|
// A language package that failed to load may be installed before the next call: do not keep the failure.
|
|
90
93
|
made.catch(() => own.delete(key));
|
|
91
94
|
return made;
|
|
92
95
|
};
|
|
93
96
|
/** The setup, or GradeInputError when a language package cannot be loaded, as `chaff grade` ends with 2 then. */
|
|
94
|
-
const loadedSetup = async (config, experimental, languages) => {
|
|
97
|
+
const loadedSetup = async (config, rubric, experimental, languages) => {
|
|
95
98
|
try {
|
|
96
|
-
return await setupFor(config, experimental, languages);
|
|
99
|
+
return await setupFor(config, rubric, experimental, languages);
|
|
97
100
|
}
|
|
98
101
|
catch (error) {
|
|
99
102
|
if (error instanceof GradeInputError)
|
|
@@ -101,13 +104,8 @@ const loadedSetup = async (config, experimental, languages) => {
|
|
|
101
104
|
throw new GradeInputError([TEXT.cannotLoad(error instanceof Error ? error.message : String(error))]);
|
|
102
105
|
}
|
|
103
106
|
};
|
|
104
|
-
/**
|
|
105
|
-
|
|
106
|
-
* `sources`, and pass or fail by chaff.yaml's `grade:` or the default. Reads a file only when `config` is a path, and
|
|
107
|
-
* never writes one. Throws GradeInputError for an input or a chaff.yaml `chaff grade` would refuse with exit 2.
|
|
108
|
-
*/
|
|
109
|
-
export const grade = async (output, options = {}) => {
|
|
110
|
-
const config = await configOf(options.config);
|
|
107
|
+
/** The options read as one line of `chaff grade`'s input, refused as that line would be. `tasks`: those the rubric defines. */
|
|
108
|
+
const itemOf = (output, options, tasks) => {
|
|
111
109
|
const raw = {
|
|
112
110
|
id: options.id ?? "output",
|
|
113
111
|
output,
|
|
@@ -118,12 +116,30 @@ export const grade = async (output, options = {}) => {
|
|
|
118
116
|
language: options.language,
|
|
119
117
|
genre: options.genre,
|
|
120
118
|
variant: options.variant,
|
|
119
|
+
task: options.task,
|
|
120
|
+
expect: options.expect,
|
|
121
121
|
};
|
|
122
|
-
const read = readItem(raw, { isLanguage: (language) => packageFor(language) !== undefined, genres: GENRES });
|
|
122
|
+
const read = readItem(raw, { isLanguage: (language) => packageFor(language) !== undefined, genres: GENRES, tasks });
|
|
123
123
|
if ("problem" in read)
|
|
124
124
|
throw new GradeInputError([TEXT.problem(read.problem)]);
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
return read.item;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Grades one output (spec §29.6): its findings and rates, its facts against `reference`, its `citations` against
|
|
129
|
+
* `sources`, its `expect` facts, and pass or fail by chaff.yaml's `grade:` (its `task`'s rubric when named) or the
|
|
130
|
+
* default. Reads a file only when `config` is a path, and never writes one. Throws GradeInputError for an input or a
|
|
131
|
+
* chaff.yaml `chaff grade` would refuse with exit 2, an unknown `task` or an `expect` entry that is not one fact among them.
|
|
132
|
+
*/
|
|
133
|
+
export const grade = async (output, options = {}) => {
|
|
134
|
+
const config = await configOf(options.config);
|
|
135
|
+
const rubric = rubricOf(config);
|
|
136
|
+
const item = itemOf(output, options, taskNamesOf(rubric));
|
|
137
|
+
const languages = item.language === undefined ? [] : [item.language];
|
|
138
|
+
const setup = await loadedSetup(config, rubric, options.experimental ?? config.experimental, languages);
|
|
139
|
+
const problems = await expectProblems(item, 0, setup);
|
|
140
|
+
if (problems.length > 0)
|
|
141
|
+
throw new GradeInputError(problems.map((problem) => TEXT.problem(problem)));
|
|
142
|
+
return gradeItem(item, setup);
|
|
127
143
|
};
|
|
128
144
|
/**
|
|
129
145
|
* Several variants' results side by side on the same inputs (spec §29.5), as `chaff grade` prints them for a file whose
|
package/dist/grade-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grade-api.js","sourceRoot":"","sources":["../src/grade-api.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,0HAA0H;AAC1H,sGAAsG;AACtG,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAe,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,SAAS,EAAmB,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"grade-api.js","sourceRoot":"","sources":["../src/grade-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,14 @@ export type NumberLabel = {
|
|
|
7
7
|
};
|
|
8
8
|
/** 見出しの言葉から、番号の書き方を読む。番号を持つ語(第1章)を先に、字だけの形(1.)を後に見る。 */
|
|
9
9
|
export declare const numberingStyleOf: (heading: string, labels: readonly NumberLabel[]) => string;
|
|
10
|
-
/**
|
|
10
|
+
/** 番号が並びの最初(1.、1.1、第1章、A.、①)か。最後の数が最初の数のときで、番号の無い見出しは並びを始めない。 */
|
|
11
|
+
export declare const opensNumbering: (heading: string, labels: readonly NumberLabel[]) => boolean;
|
|
12
|
+
/** 見出し 1 つ。depth は深さ(#の数)、style は番号の書き方、skipped は番号を付けない前後の見出し(目次・参考文献)、opens は番号が 1 から始まるか。 */
|
|
11
13
|
export type NumberedHeading = {
|
|
12
14
|
readonly depth: number;
|
|
13
15
|
readonly style: string;
|
|
14
16
|
readonly skipped: boolean;
|
|
17
|
+
readonly opens: boolean;
|
|
15
18
|
};
|
|
16
19
|
/** 親(直前の浅い見出し)と深さが同じ見出しの組。番号は兄弟の見出しのあいだで揃える。位置は渡した並びの添え字。 */
|
|
17
20
|
export declare const siblingGroups: (headings: readonly NumberedHeading[]) => number[][];
|
|
@@ -26,7 +29,7 @@ export type NumberingMinority = {
|
|
|
26
29
|
};
|
|
27
30
|
/**
|
|
28
31
|
* 兄弟の見出しのうち、少ないほうの書き方のもの。先に番号の有無を比べ(「1. 概要」「2. 手順」「まとめ」の「まとめ」)、
|
|
29
|
-
* 番号の付いた見出しのあいだで書き方を比べる(「1.」「2.」「3)」の「3
|
|
32
|
+
* 番号の付いた見出しのあいだで書き方を比べる(「1.」「2.」「3)」の「3)」)。同じ数なら言わない(二つだけの兄弟は必ず同じ数か一つの書き方)。前後の見出し(目次・参考文献)と、1 から始まる番号の前の見出しは数えない。
|
|
30
33
|
*/
|
|
31
34
|
export declare const numberingMinorities: (headings: readonly NumberedHeading[]) => NumberingMinority[];
|
|
32
35
|
//# sourceMappingURL=heading-numbering.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading-numbering.d.ts","sourceRoot":"","sources":["../src/heading-numbering.ts"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"heading-numbering.d.ts","sourceRoot":"","sources":["../src/heading-numbering.ts"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,CAAC;AA8C3F,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,EAAE,QAAQ,SAAS,WAAW,EAAE,KAAG,MAAuC,CAAC;AAM3H,iEAAiE;AACjE,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,QAAQ,SAAS,WAAW,EAAE,KAAG,OAGhF,CAAC;AAEF,gGAAgG;AAChG,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAErI,6DAA6D;AAC7D,eAAO,MAAM,aAAa,GAAI,UAAU,SAAS,eAAe,EAAE,KAAG,MAAM,EAAE,EAQ5E,CAAC;AAEF,6FAA6F;AAC7F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AA0BF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,UAAU,SAAS,eAAe,EAAE,KAAG,iBAAiB,EAcxF,CAAC"}
|
|
@@ -28,13 +28,23 @@ const labelPattern = (label) => label.position === "before"
|
|
|
28
28
|
: new RegExp(`^(?:第(?:${ARABIC}|${KANJI}|${ROMAN})|${ARABIC})${escaped(label.word)}`, "u");
|
|
29
29
|
/** 見出しの頭の強調の印と空白。「**1. 概要**」も「1. 概要」と読む。 */
|
|
30
30
|
const LEAD = /^[\s*_]+/u;
|
|
31
|
-
|
|
32
|
-
export const numberingStyleOf = (heading, labels) => {
|
|
31
|
+
const markOf = (heading, labels) => {
|
|
33
32
|
const text = heading.replace(LEAD, "");
|
|
34
33
|
const label = labels.find((candidate) => labelPattern(candidate).test(text));
|
|
35
34
|
if (label !== undefined)
|
|
36
|
-
return `label:${label.word.toLowerCase()}
|
|
37
|
-
|
|
35
|
+
return { style: `label:${label.word.toLowerCase()}`, mark: labelPattern(label).exec(text)?.[0] ?? "" };
|
|
36
|
+
const shape = SHAPES.find(([, pattern]) => pattern.test(text));
|
|
37
|
+
return shape === undefined ? { style: UNNUMBERED, mark: "" } : { style: shape[0], mark: shape[1].exec(text)?.[0] ?? "" };
|
|
38
|
+
};
|
|
39
|
+
/** 見出しの言葉から、番号の書き方を読む。番号を持つ語(第1章)を先に、字だけの形(1.)を後に見る。 */
|
|
40
|
+
export const numberingStyleOf = (heading, labels) => markOf(heading, labels).style;
|
|
41
|
+
/** 番号の中の数の一つ一つ(「7.1」の 7 と 1、「Chapter II」の II)。番号は印の最後に来るので、語の頭の大文字(Chapter の C)は最後にならない。 */
|
|
42
|
+
const NUMBER_TOKEN = /[0-90-9]+|[A-ZⅠ-Ⅻ①-⑳一二三四五六七八九十百]+/gu;
|
|
43
|
+
const FIRST_NUMBERS = new Set(["1", "1", "I", "Ⅰ", "A", "①", "一"]);
|
|
44
|
+
/** 番号が並びの最初(1.、1.1、第1章、A.、①)か。最後の数が最初の数のときで、番号の無い見出しは並びを始めない。 */
|
|
45
|
+
export const opensNumbering = (heading, labels) => {
|
|
46
|
+
const last = markOf(heading, labels).mark.match(NUMBER_TOKEN)?.at(-1);
|
|
47
|
+
return last !== undefined && FIRST_NUMBERS.has(last);
|
|
38
48
|
};
|
|
39
49
|
/** 親(直前の浅い見出し)と深さが同じ見出しの組。番号は兄弟の見出しのあいだで揃える。位置は渡した並びの添え字。 */
|
|
40
50
|
export const siblingGroups = (headings) => {
|
|
@@ -56,12 +66,23 @@ const minorityBy = (members, keyOf) => {
|
|
|
56
66
|
return { minority: members.filter((at) => keyOf(at) !== top[0]), majority: top[0], count: top[1], example };
|
|
57
67
|
};
|
|
58
68
|
const minoritiesOf = (split, kind) => split === undefined ? [] : split.minority.map((at) => ({ at, kind, majority: split.majority, count: split.count, example: split.example }));
|
|
69
|
+
/** 番号の並びの最初の兄弟が 1 から始まるとき、その前の番号の無い兄弟(文書の題、「Applies to England」)は並びの外。番号付きの兄弟が二つ以上あるときだけ。 */
|
|
70
|
+
const MIN_NUMBERED_RUN = 2;
|
|
71
|
+
const leadingFrontMatter = (members, headings) => {
|
|
72
|
+
const numbered = members.filter((at) => (headings[at]?.style ?? UNNUMBERED) !== UNNUMBERED);
|
|
73
|
+
const first = numbered[0];
|
|
74
|
+
if (first === undefined || numbered.length < MIN_NUMBERED_RUN || headings[first]?.opens !== true)
|
|
75
|
+
return new Set();
|
|
76
|
+
return new Set(members.filter((at) => at < first));
|
|
77
|
+
};
|
|
59
78
|
/**
|
|
60
79
|
* 兄弟の見出しのうち、少ないほうの書き方のもの。先に番号の有無を比べ(「1. 概要」「2. 手順」「まとめ」の「まとめ」)、
|
|
61
|
-
* 番号の付いた見出しのあいだで書き方を比べる(「1.」「2.」「3)」の「3
|
|
80
|
+
* 番号の付いた見出しのあいだで書き方を比べる(「1.」「2.」「3)」の「3)」)。同じ数なら言わない(二つだけの兄弟は必ず同じ数か一つの書き方)。前後の見出し(目次・参考文献)と、1 から始まる番号の前の見出しは数えない。
|
|
62
81
|
*/
|
|
63
82
|
export const numberingMinorities = (headings) => siblingGroups(headings).flatMap((group) => {
|
|
64
|
-
const
|
|
83
|
+
const listed = group.filter((at) => headings[at]?.skipped !== true);
|
|
84
|
+
const front = leadingFrontMatter(listed, headings);
|
|
85
|
+
const members = listed.filter((at) => !front.has(at));
|
|
65
86
|
const styleOf = (at) => headings[at]?.style ?? UNNUMBERED;
|
|
66
87
|
const numbered = members.filter((at) => styleOf(at) !== UNNUMBERED);
|
|
67
88
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading-numbering.js","sourceRoot":"","sources":["../src/heading-numbering.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4BAA4B;AAE5B,uEAAuE;AACvE,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAKjC,MAAM,MAAM,GAAG,WAAW,CAAC;AAC3B,MAAM,KAAK,GAAG,gBAAgB,CAAC;AAC/B,MAAM,KAAK,GAAG,WAAW,CAAC;AAE1B,uGAAuG;AACvG,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,GAA6C;IACvD,CAAC,OAAO,EAAE,qBAAqB,CAAC;IAChC,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAClC,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,MAAM,gBAAgB,MAAM,qBAAqB,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7F,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,MAAM,UAAU,MAAM,QAAQ,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7E,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACjC,CAAC,QAAQ,EAAE,oCAAoC,CAAC;CACjD,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAEvF,sEAAsE;AACtE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE1G,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAU,EAAE,CAClD,KAAK,CAAC,QAAQ,KAAK,QAAQ;IACzB,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,IAAI,KAAK,IAAI,KAAK,0BAA0B,EAAE,GAAG,CAAC;IAC7G,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,MAAM,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAE/F,4CAA4C;AAC5C,MAAM,IAAI,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"heading-numbering.js","sourceRoot":"","sources":["../src/heading-numbering.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,11 @@ export type WordUse = {
|
|
|
9
9
|
readonly common: ReadonlySet<string>;
|
|
10
10
|
};
|
|
11
11
|
export declare const NO_WORD_USE: WordUse;
|
|
12
|
+
/**
|
|
13
|
+
* 終わりの重なった字の一つの抜け(Licensee と License、Bennett と Bennet)で、どちらかを文書が小文字か普通名詞で書く(license)。
|
|
14
|
+
* 語の終わりの抜けと同じく、語の形の違い(License と、その許諾を受ける Licensee)。
|
|
15
|
+
*/
|
|
16
|
+
export declare const isWordFormOf: (left: string, right: string, use: WordUse) => boolean;
|
|
12
17
|
/**
|
|
13
18
|
* 名前の語(words、小文字)の at の語を usual と書いた名前があるとき、その違いを書き損じと見るか。違う語が最後の語(姓)なら、
|
|
14
19
|
* 終わりの一字の抜けか足しか、四字以上の一字違い(oneLetterApart)で、前の語がどれも文書の中で普通名詞として書かない語(Rachel、Mr)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-end-letter.d.ts","sourceRoot":"","sources":["../src/name-end-letter.ts"],"names":[],"mappings":"AAkBA,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,OAI9D,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAEvG,eAAO,MAAM,WAAW,EAAE,OAAoD,CAAC;AAE/E;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,SAAS,MAAM,EAAE,EACxB,IAAI,MAAM,EACV,OAAO,MAAM,EACb,KAAK,OAAO,EACZ,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,KACvD,OAMF,CAAC"}
|
|
1
|
+
{"version":3,"file":"name-end-letter.d.ts","sourceRoot":"","sources":["../src/name-end-letter.ts"],"names":[],"mappings":"AAkBA,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,OAI9D,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAEvG,eAAO,MAAM,WAAW,EAAE,OAAoD,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,OAAO,KAAG,OAGxE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,SAAS,MAAM,EAAE,EACxB,IAAI,MAAM,EACV,OAAO,MAAM,EACb,KAAK,OAAO,EACZ,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,KACvD,OAMF,CAAC"}
|
package/dist/name-end-letter.js
CHANGED
|
@@ -19,6 +19,14 @@ export const isEndLetterApart = (left, right) => {
|
|
|
19
19
|
return longer.length === shorter.length + 1 && longer.startsWith(shorter) && !isFormLetter(shorter, longer.slice(shorter.length));
|
|
20
20
|
};
|
|
21
21
|
export const NO_WORD_USE = { ordinary: new Set(), common: new Set() };
|
|
22
|
+
/**
|
|
23
|
+
* 終わりの重なった字の一つの抜け(Licensee と License、Bennett と Bennet)で、どちらかを文書が小文字か普通名詞で書く(license)。
|
|
24
|
+
* 語の終わりの抜けと同じく、語の形の違い(License と、その許諾を受ける Licensee)。
|
|
25
|
+
*/
|
|
26
|
+
export const isWordFormOf = (left, right, use) => {
|
|
27
|
+
const [longer, shorter] = left.length > right.length ? [left, right] : [right, left];
|
|
28
|
+
return longer.slice(0, -1) === shorter && (use.common.has(longer) || use.common.has(shorter));
|
|
29
|
+
};
|
|
22
30
|
/**
|
|
23
31
|
* 名前の語(words、小文字)の at の語を usual と書いた名前があるとき、その違いを書き損じと見るか。違う語が最後の語(姓)なら、
|
|
24
32
|
* 終わりの一字の抜けか足しか、四字以上の一字違い(oneLetterApart)で、前の語がどれも文書の中で普通名詞として書かない語(Rachel、Mr)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-end-letter.js","sourceRoot":"","sources":["../src/name-end-letter.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gEAAgE;AAEhE,MAAM,UAAU,GAAG,WAAW,CAAC;AAC/B,MAAM,KAAK,GAAG,YAAY,CAAC;AAE3B,+CAA+C;AAC/C,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,gEAAgE;AAChE,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,2CAA2C;AAC3C,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,8DAA8D;AAC9D,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,KAAa,EAAW,EAAE,CAAC,KAAK,KAAK,aAAa,IAAI,CAAC,KAAK,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/I,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,KAAa,EAAW,EAAE;IACvE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,qBAAqB;QAAE,OAAO,KAAK,CAAC;IAClH,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACpI,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,WAAW,GAAY,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAwB,EACxB,EAAU,EACV,KAAa,EACb,GAAY,EACZ,cAAwD,EAC/C,EAAE;IACX,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,IAAI,qBAAqB,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5I,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,OAAO,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,qBAAqB,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5G,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"name-end-letter.js","sourceRoot":"","sources":["../src/name-end-letter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Token } from "./plugin.ts";
|
|
2
|
+
/** 名前の書き方ごとの、すぐ前に書いた名のすべて。 */
|
|
3
|
+
export type GivenNames = ReadonlyMap<string, readonly string[]>;
|
|
4
|
+
export declare const givenNamesBySurface: (mentions: readonly {
|
|
5
|
+
readonly surface: string;
|
|
6
|
+
readonly givenName?: string | undefined;
|
|
7
|
+
}[]) => GivenNames;
|
|
8
|
+
/** どちらの書き方にも名前のすぐ前の名があり、一つも同じでない(Jeffrey D. Walker と Christopher J. Waller)。別の人。 */
|
|
9
|
+
export declare const areOtherPeople: (left?: readonly string[], right?: readonly string[]) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* tokens[index] で始まる名前のすぐ前の名。解析器が固有名詞と読んだ、大文字一字に小文字の続く語で、あいだに頭文字一つを挟んでよい。
|
|
12
|
+
* 行を越えては読まない(一行に一人ずつ並べた出席者の名簿)。
|
|
13
|
+
*/
|
|
14
|
+
export declare const givenNameBefore: (tokens: readonly Token[], index: number, source: string) => string | undefined;
|
|
15
|
+
//# sourceMappingURL=name-given-before.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-given-before.d.ts","sourceRoot":"","sources":["../src/name-given-before.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAiBzC,8BAA8B;AAC9B,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB,GAAI,UAAU,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,KAAG,UAIhG,CAAC;AAElC,oFAAoF;AACpF,eAAO,MAAM,cAAc,GAAI,OAAM,SAAS,MAAM,EAAO,EAAE,QAAO,SAAS,MAAM,EAAO,KAAG,OACV,CAAC;AAEpF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,KAAK,EAAE,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAM,GAAG,SAKlG,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// 姓のすぐ前に書いた名(Jeffrey D. Walker の Jeffrey)。名の違う二人(Jeffrey D. Walker と Christopher J. Waller)は、姓が一字違いでも
|
|
2
|
+
// 別の人で、書き損じではない。
|
|
3
|
+
const GIVEN_NAME = /^\p{Lu}\p{Ll}+$/u;
|
|
4
|
+
const INITIAL = /^\p{Lu}$/u;
|
|
5
|
+
const NEWLINE = /\n/u;
|
|
6
|
+
const isInitial = (token) => INITIAL.test(token?.surface ?? "");
|
|
7
|
+
/** 名と名前のあいだの頭文字(D.、D)を飛ばした、名の語の添字。 */
|
|
8
|
+
const givenIndexOf = (tokens, index) => {
|
|
9
|
+
if (tokens[index - 1]?.surface === "." && isInitial(tokens[index - 2]))
|
|
10
|
+
return index - 3;
|
|
11
|
+
return isInitial(tokens[index - 1]) ? index - 2 : index - 1;
|
|
12
|
+
};
|
|
13
|
+
export const givenNamesBySurface = (mentions) => mentions.reduce((names, { surface, givenName }) => {
|
|
14
|
+
const known = names.get(surface) ?? [];
|
|
15
|
+
return givenName === undefined || known.includes(givenName) ? names : names.set(surface, [...known, givenName]);
|
|
16
|
+
}, new Map());
|
|
17
|
+
/** どちらの書き方にも名前のすぐ前の名があり、一つも同じでない(Jeffrey D. Walker と Christopher J. Waller)。別の人。 */
|
|
18
|
+
export const areOtherPeople = (left = [], right = []) => left.length > 0 && right.length > 0 && !left.some((name) => right.includes(name));
|
|
19
|
+
/**
|
|
20
|
+
* tokens[index] で始まる名前のすぐ前の名。解析器が固有名詞と読んだ、大文字一字に小文字の続く語で、あいだに頭文字一つを挟んでよい。
|
|
21
|
+
* 行を越えては読まない(一行に一人ずつ並べた出席者の名簿)。
|
|
22
|
+
*/
|
|
23
|
+
export const givenNameBefore = (tokens, index, source) => {
|
|
24
|
+
const name = tokens[index];
|
|
25
|
+
const given = tokens[givenIndexOf(tokens, index)];
|
|
26
|
+
if (name === undefined || given === undefined || given.pos !== "PROPN" || !GIVEN_NAME.test(given.surface))
|
|
27
|
+
return undefined;
|
|
28
|
+
return NEWLINE.test(source.slice(given.span.end, name.span.start)) ? undefined : given.surface;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=name-given-before.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-given-before.js","sourceRoot":"","sources":["../src/name-given-before.ts"],"names":[],"mappings":"AAEA,sGAAsG;AACtG,iBAAiB;AAEjB,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,OAAO,GAAG,WAAW,CAAC;AAC5B,MAAM,OAAO,GAAG,KAAK,CAAC;AAEtB,MAAM,SAAS,GAAG,CAAC,KAAwB,EAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;AAE5F,sCAAsC;AACtC,MAAM,YAAY,GAAG,CAAC,MAAwB,EAAE,KAAa,EAAU,EAAE;IACvE,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,GAAG,CAAC,CAAC;IACzF,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9D,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAA0F,EAAc,EAAE,CAC5I,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;IAChD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAClH,CAAC,EAAE,IAAI,GAAG,EAAoB,CAAC,CAAC;AAElC,oFAAoF;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAA0B,EAAE,EAAE,QAA2B,EAAE,EAAW,EAAE,CACrG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAwB,EAAE,KAAa,EAAE,MAAc,EAAsB,EAAE;IAC7G,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAClD,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5H,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;AACjG,CAAC,CAAC"}
|
package/dist/name-separator.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export type OrganizationWords = {
|
|
|
6
6
|
readonly forms: readonly string[];
|
|
7
7
|
};
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* 項目と値を分ける空白。「所属:経済学部 経済学科 1年」「振込先:みなと銀行 普通 1234567」のように項目名とコロンの後ろに値の組を並べた行の組と組のあいだか、
|
|
10
|
+
* 「最高速度 40km/h」「(内線 3839)」のように短い項目名と値を並べただけの組の、名と値のあいだ。値の区切りで、日本語と数字のあいだの空け方ではない。
|
|
11
11
|
* boundary は空けた数字の前の境目(text[offset] が空白)。tokens は文書全体の座標で、base は text の先頭の位置。
|
|
12
12
|
*/
|
|
13
13
|
export declare const isFieldSeparator: (text: string, boundary: Boundary, tokens: readonly Token[] | undefined, base: number) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-separator.d.ts","sourceRoot":"","sources":["../src/name-separator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAQ,KAAK,EAAE,MAAM,aAAa,CAAC;AAK/C,sFAAsF;AACtF,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"name-separator.d.ts","sourceRoot":"","sources":["../src/name-separator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAQ,KAAK,EAAE,MAAM,aAAa,CAAC;AAK/C,sFAAsF;AACtF,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAgH3G;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,UAAU,QAAQ,EAAE,QAAQ,SAAS,KAAK,EAAE,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,OAGvH,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,UAAU,QAAQ,EAAE,QAAQ,SAAS,KAAK,EAAE,GAAG,SAAS,EAAE,MAAM,MAAM,EAAE,OAAO,iBAAiB,KAAG,OAMhJ,CAAC"}
|
package/dist/name-separator.js
CHANGED
|
@@ -27,14 +27,55 @@ const CLAUSE_POS = new Set(["VERB", "AUX", "ADP"]);
|
|
|
27
27
|
const QUANTITY_LEAD_POS = new Set(["ADJ", "ADV", "ADP", "AUX", "VERB", "SCONJ", "PART"]);
|
|
28
28
|
/** 値の組の最も短い長さ。1 字の語(計 5件)は量の前置き。 */
|
|
29
29
|
const MIN_PART_LENGTH = 2;
|
|
30
|
+
/** 組を囲む字(括弧・表の升目の線)。組が囲みの中で読点で並ぶこともある(電話 03-1234-5678、内線 3839)。 */
|
|
31
|
+
const LAST_ENCLOSURE_OPEN = /[((||][^((||]*$/u;
|
|
32
|
+
const ENCLOSURE_CLOSE = /[))||]/u;
|
|
33
|
+
/** 組と組を分ける読点。数の桁の区切り(1,000)のコンマは除く。 */
|
|
34
|
+
const PAIR_COMMA = /[、,]|(?<!\d),|,(?!\d)/gu;
|
|
35
|
+
/** 行の頭の字下げと箇条書きの印(「- 」「1. 」)。 */
|
|
36
|
+
const PAIR_LEAD = /^[ \t\u3000]*(?:(?:[-*+]|\d{1,3}[..))])[ \t\u3000]+)?/u;
|
|
37
|
+
/** 項目名: 空白・数字・区切りの字を含まない短い語。値: 数字で始まり、空白も区切りも文の終わりも含まない一続き(桁の区切りのコンマは含む)。 */
|
|
38
|
+
const PAIR_LABEL = /^[^\s\d、,,()()||::。!?]{2,12}$/u;
|
|
39
|
+
const PAIR_VALUE = /^\d(?:[^\s、,,()()||。!?]|(?<=\d),(?=\d))*$/u;
|
|
40
|
+
/** 項目名に出る品詞。名詞だけで、助詞・副詞(およそ)・接頭の語(約)を含めば、量の前置きか文。 */
|
|
41
|
+
const PAIR_LABEL_POS = new Set(["NOUN", "PROPN"]);
|
|
42
|
+
const SPACE_RUN = /^[ \t\u3000]*/u;
|
|
43
|
+
/** at を含む囲み: 括弧か表の升目の線の内側、無ければ行(字下げと箇条書きの印の後ろ)。 */
|
|
44
|
+
const enclosureAround = (text, line, at) => {
|
|
45
|
+
const open = LAST_ENCLOSURE_OPEN.exec(text.slice(line.start, at));
|
|
46
|
+
const start = open === null ? line.start + (PAIR_LEAD.exec(text.slice(line.start, line.end))?.[0].length ?? 0) : line.start + open.index + 1;
|
|
47
|
+
const close = text.slice(at, line.end).search(ENCLOSURE_CLOSE);
|
|
48
|
+
return { start, end: close === -1 ? line.end : at + close };
|
|
49
|
+
};
|
|
50
|
+
/** 囲みの中で at を含む組。読点で区切り、前後の空白を除く。 */
|
|
51
|
+
const pairAround = (text, enclosure, at) => {
|
|
52
|
+
const commas = [...text.slice(enclosure.start, enclosure.end).matchAll(PAIR_COMMA)].map((match) => enclosure.start + match.index);
|
|
53
|
+
const rawStart = (commas.filter((comma) => comma < at).at(-1) ?? enclosure.start - 1) + 1;
|
|
54
|
+
const rawEnd = commas.find((comma) => comma > at) ?? enclosure.end;
|
|
55
|
+
const start = rawStart + (SPACE_RUN.exec(text.slice(rawStart, at))?.[0].length ?? 0);
|
|
56
|
+
return { start, end: rawStart + text.slice(rawStart, rawEnd).trimEnd().length };
|
|
57
|
+
};
|
|
30
58
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
59
|
+
* 「最高速度 40km/h」「(内線 3839~40)」「- 定員 30名」のように、短い項目名と、それが名指す値を空白一つで並べただけの組の、名と値のあいだの空白。
|
|
60
|
+
* 組は行・括弧の中・表の升目にそれだけで書くか、読点で並べる。項目の区切りで、文の中の空け方ではない。
|
|
61
|
+
* 囲みの中に助詞や動詞がある(定員 30名で行います、参加者 30名、来場者50名を見込みます)、値の後ろに語が続く(内線 3839 まで)、
|
|
62
|
+
* 項目名が 1 字(約 30名)か名詞でない語を含む組は、文の中の空白として数える。
|
|
34
63
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
64
|
+
const isLabelledValue = (text, boundary, tokens, base) => {
|
|
65
|
+
const enclosure = enclosureAround(text, lineAround(text, boundary.offset), boundary.offset);
|
|
66
|
+
const pair = pairAround(text, enclosure, boundary.offset);
|
|
67
|
+
const label = { start: pair.start, end: boundary.offset };
|
|
68
|
+
if (!PAIR_LABEL.test(text.slice(label.start, label.end)) || !PAIR_VALUE.test(text.slice(boundary.offset + 1, pair.end)))
|
|
69
|
+
return false;
|
|
70
|
+
if (SENTENCE_END.test(text.slice(enclosure.start, enclosure.end)))
|
|
37
71
|
return false;
|
|
72
|
+
const labelTokens = tokensIn(tokens, label, base);
|
|
73
|
+
return (labelTokens.length > 0 &&
|
|
74
|
+
labelTokens.every((token) => PAIR_LABEL_POS.has(token.pos)) &&
|
|
75
|
+
!tokensIn(tokens, enclosure, base).some((token) => CLAUSE_POS.has(token.pos)));
|
|
76
|
+
};
|
|
77
|
+
/** 項目名とコロンの後ろに値の組を並べた行の、組と、数で始まる次の組のあいだの空白か。 */
|
|
78
|
+
const isColonFieldPart = (text, boundary, tokens, base) => {
|
|
38
79
|
const line = lineAround(text, boundary.offset);
|
|
39
80
|
const label = FIELD_LABEL.exec(text.slice(line.start, line.end));
|
|
40
81
|
if (label === null || SENTENCE_END.test(text.slice(line.start, line.end)))
|
|
@@ -46,6 +87,16 @@ export const isFieldSeparator = (text, boundary, tokens, base) => {
|
|
|
46
87
|
const partEnd = tokens.find((token) => token.span.end === base + boundary.offset);
|
|
47
88
|
return boundary.offset - partStart >= MIN_PART_LENGTH && partEnd !== undefined && !QUANTITY_LEAD_POS.has(partEnd.pos);
|
|
48
89
|
};
|
|
90
|
+
/**
|
|
91
|
+
* 項目と値を分ける空白。「所属:経済学部 経済学科 1年」「振込先:みなと銀行 普通 1234567」のように項目名とコロンの後ろに値の組を並べた行の組と組のあいだか、
|
|
92
|
+
* 「最高速度 40km/h」「(内線 3839)」のように短い項目名と値を並べただけの組の、名と値のあいだ。値の区切りで、日本語と数字のあいだの空け方ではない。
|
|
93
|
+
* boundary は空けた数字の前の境目(text[offset] が空白)。tokens は文書全体の座標で、base は text の先頭の位置。
|
|
94
|
+
*/
|
|
95
|
+
export const isFieldSeparator = (text, boundary, tokens, base) => {
|
|
96
|
+
if (tokens === undefined || boundary.kind !== "before-digit" || !boundary.spaced)
|
|
97
|
+
return false;
|
|
98
|
+
return isColonFieldPart(text, boundary, tokens, base) || isLabelledValue(text, boundary, tokens, base);
|
|
99
|
+
};
|
|
49
100
|
/**
|
|
50
101
|
* 「株式会社あおば電子 経営企画部 IR担当」「東京本社 PR室」のように、名前だけを空白で並べた行で、空白の両側がどちらも組織の名前のときの空白。
|
|
51
102
|
* 名前と名前の区切りで、英字の前後の空け方ではない。文の中の空白(この IT システムは)や、組織の名前でない語のあいだ(生成AI 活用事例、Patch リリース)は区切りと読まない。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-separator.js","sourceRoot":"","sources":["../src/name-separator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"name-separator.js","sourceRoot":"","sources":["../src/name-separator.ts"],"names":[],"mappings":"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"}
|
package/dist/name-variants.d.ts
CHANGED
|
@@ -7,7 +7,8 @@ import { type SpellingInput } from "./name-spelling-chars.ts";
|
|
|
7
7
|
* 人名と読むか、敬称が付く)。cue は前後の語から見た名前らしさ(name-cue.ts)。ordinary は、ふつうの語でもある一語の名前で、
|
|
8
8
|
* 文書がその形をどこでも名前に使わないもの(name-ordinary-word.ts)。labelled は、人を書く欄(氏名:、Contractor:)に書いた名前
|
|
9
9
|
* (person-field.ts)。givenNameReading は、空白を挟んだ姓と名の名を、名の中での字の読みで読み直した読み(name-char-reading.ts の
|
|
10
|
-
* givenNameReadingOf)。解析器が名を別の読みに切ったとき(建太 を タテフトシ)のもう一通りの読み。
|
|
10
|
+
* givenNameReadingOf)。解析器が名を別の読みに切ったとき(建太 を タテフトシ)のもう一通りの読み。givenName は、名前のすぐ前に
|
|
11
|
+
* 書いた名(Jeffrey D. Walker の Jeffrey、name-given-before.ts)。
|
|
11
12
|
*/
|
|
12
13
|
export type NameMention = {
|
|
13
14
|
readonly surface: string;
|
|
@@ -19,6 +20,7 @@ export type NameMention = {
|
|
|
19
20
|
readonly ordinary?: boolean;
|
|
20
21
|
readonly labelled?: boolean;
|
|
21
22
|
readonly givenNameReading?: string | undefined;
|
|
23
|
+
readonly givenName?: string | undefined;
|
|
22
24
|
};
|
|
23
25
|
export type NameVariant = {
|
|
24
26
|
readonly mention: NameMention;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-variants.d.ts","sourceRoot":"","sources":["../src/name-variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,
|
|
1
|
+
{"version":3,"file":"name-variants.d.ts","sourceRoot":"","sources":["../src/name-variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAA4C,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE9F,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AASzF;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;CAC7F,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAmDvD;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,SAAS,KAAK,EAAE,EAAE,QAAQ,MAAM,EAAE,iBAAgB,SAAS,MAAM,EAAO,EAAE,4DAA+B,KAAG,WAAW,EAYtJ,CAAC;AAeL;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,UAAU,SAAS,MAAM,EAAE,EAAE,OAAO,YAAY,EAAE,OAAO,SAAS,WAAW,EAAE,KAAG,WAAW,EAU1I,CAAC;AAIJ;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,MAAM,QAAQ,EAAE,OAAO,YAAY,EAAE,OAAO,SAAS,WAAW,EAAE,KAAG,WAAW,EAQxH,CAAC;AAEL,8CAA8C;AAC9C,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,KAAG,MAIH,CAAC;AAExC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAgI7G,mCAAmC;AACnC,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,OAAkG,CAAC;AAkE5J;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,YAAY,EAAE,OAAO,YAAY,KAAG,OACyB,CAAC;AAoCpG;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,UAAU,SAAS,WAAW,EAAE,EAChC,QAAO,YAAwB,EAC/B,WAAU,aAA2B,EACrC,MAAK,OAAqB,KACzB,WAAW,EAyBb,CAAC"}
|
package/dist/name-variants.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { escapeRegExp } from "./orthography.js";
|
|
2
2
|
import { nameCueAt } from "./name-cue.js";
|
|
3
3
|
import { isNearSurname } from "./surname-near.js";
|
|
4
|
-
import { isEndWordSlip, NO_WORD_USE } from "./name-end-letter.js";
|
|
4
|
+
import { isEndWordSlip, isWordFormOf, NO_WORD_USE } from "./name-end-letter.js";
|
|
5
|
+
import { areOtherPeople, givenNamesBySurface } from "./name-given-before.js";
|
|
5
6
|
import { foldedKeysOf, NO_SPELLING } from "./name-spelling-chars.js";
|
|
6
7
|
import { NO_CHAR_READINGS, readingOfWords } from "./name-char-reading.js";
|
|
7
8
|
import { isPersonRun } from "./name-person.js";
|
|
@@ -226,11 +227,11 @@ const differingWords = (left, right) => {
|
|
|
226
227
|
return leftWords.length === rightWords.length && leftWord !== undefined && rightWord !== undefined ? [leftWord, rightWord] : undefined;
|
|
227
228
|
};
|
|
228
229
|
/** 一語だけが一字違いで、相手のほうが重い(outweighs)。どちらもふつうの語(Green と Greek)なら、別の二つの語。 */
|
|
229
|
-
const isSlipOf = (tally, other) => {
|
|
230
|
+
const isSlipOf = (use) => (tally, other) => {
|
|
230
231
|
if (!outweighs(other, tally) || (tally.first.ordinary === true && other.first.ordinary === true))
|
|
231
232
|
return false;
|
|
232
233
|
const words = differingWords(tally, other);
|
|
233
|
-
return words !== undefined && isNearWord(...words);
|
|
234
|
+
return words !== undefined && isNearWord(...words) && !isWordFormOf(...words, use);
|
|
234
235
|
};
|
|
235
236
|
/**
|
|
236
237
|
* 二語以上の名前の一語だけが、終わりの一字の抜けか足し(Rachel Whitmore と Rachel Whitmor)か、最後の語(姓)が四字でも一字違い
|
|
@@ -244,9 +245,9 @@ const isEndSlipOf = (use) => (tally, other) => {
|
|
|
244
245
|
return false;
|
|
245
246
|
return !use.ordinary.has(word) && !use.ordinary.has(usual) && isEndWordSlip(words, at, usual, use, isOneLetterApart);
|
|
246
247
|
};
|
|
247
|
-
const nearVariants = (tallies, use) => {
|
|
248
|
-
const isEndSlip = isEndSlipOf(use);
|
|
249
|
-
return variantsIn(groupBy(tallies, maskedKeys), "near", (tally, other) =>
|
|
248
|
+
const nearVariants = (tallies, use, givenNames) => {
|
|
249
|
+
const [isSlip, isEndSlip] = [isSlipOf(use), isEndSlipOf(use)];
|
|
250
|
+
return variantsIn(groupBy(tallies, maskedKeys), "near", (tally, other) => !areOtherPeople(givenNames.get(tally.surface), givenNames.get(other.surface)) && (isSlip(tally, other) || isEndSlip(tally, other)), true);
|
|
250
251
|
};
|
|
251
252
|
/**
|
|
252
253
|
* 名が同じで姓だけが二字ほど違う人の名前(Rachel Whitford と Rachel Whitfield)。一字違い(near)より遠いので、名と姓の二語以上
|
|
@@ -292,7 +293,7 @@ export const nameVariants = (mentions, chars = new Map(), spelling = NO_SPELLING
|
|
|
292
293
|
...variantsIn(groupBy(tallies, (tally) => [nameKey(tally.surface)]), "spelling"),
|
|
293
294
|
...variantsIn(groupBy(talliesOf([...mentions, ...spelling.alsoWritten]), (tally) => foldedKeysOf(tally.surface, spelling.chars).map(nameKey)), "kana"),
|
|
294
295
|
...variantsIn(groupBy(tallies, (tally) => tally.readings), "reading", oneWordApart),
|
|
295
|
-
...nearVariants(tallies, use),
|
|
296
|
+
...nearVariants(tallies, use, givenNamesBySurface(mentions)),
|
|
296
297
|
...surnameVariants(tallies),
|
|
297
298
|
...characterVariants(tallies, chars),
|
|
298
299
|
...personReadingVariants(tallies),
|