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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { escapeRegExp } from "../orthography.js";
|
|
2
|
+
const EDGE_BEFORE = String.raw `(?<![\p{L}\p{N}_&])`;
|
|
3
|
+
const EDGE_AFTER = String.raw `(?![\p{L}\p{N}_&])`;
|
|
4
|
+
/**
|
|
5
|
+
* 語彙表の語のどれか。空の語彙表は「その書き方が無い」。空の選択肢 (?:) は至る所で空文字に当たるので、何にも当たらない形にする。
|
|
6
|
+
* 長い語から試す。短い語が先だと、それを頭に持つ長い語(PTE と PTE. のような書き分け)が丸ごと当たらない。
|
|
7
|
+
*/
|
|
8
|
+
export const oneOf = (words) => words.length === 0
|
|
9
|
+
? "(?!)"
|
|
10
|
+
: `(?:${words
|
|
11
|
+
.toSorted((left, right) => right.length - left.length)
|
|
12
|
+
.map(escapeRegExp)
|
|
13
|
+
.join("|")})`;
|
|
14
|
+
const spansOf = (text, pattern) => [...text.matchAll(pattern)].map((match) => ({ start: match.index, end: match.index + match[0].length }));
|
|
15
|
+
/** 名前の語。大文字で始まり、点・& ・アポストロフィ・ハイフンを含んでよい(BorrowMoney.com、PTE.、O'Neil)。 */
|
|
16
|
+
const NAME_WORD = String.raw `\p{Lu}[\p{L}\p{N}&.'’-]*`;
|
|
17
|
+
/** 法人の形の前に並ぶ名前の語の数の上限(CNH INDUSTRIAL SOUTH DAKOTA, INC.)。文の頭まで遡って別の語を名前に入れないため。 */
|
|
18
|
+
const NAME_WORDS_MAX = 5;
|
|
19
|
+
/**
|
|
20
|
+
* 名前の語のすぐ後ろ(読点を挟んでもよい)の法人の形と、その前の名前(JVLS, LLC、CPM Medical Consultants LLC、TRATON SE、
|
|
21
|
+
* GitLab Singapore PTE. LTD.)。名前の語は空白だけで続くものを数え、読点で切れた先(CENTENE CORPORATION, MAYFLOWER …)は入れない。
|
|
22
|
+
* 名前に続けて書いた括弧のすぐ後ろの形(SUNCALL(Guangzhou)CO.,LTD.)も名前の終わり。空白を挟んだ括弧(Section (A) LLC)は名前の一部ではない。形のすぐ前が限定の語なら名前ではない(The SE team)。
|
|
23
|
+
*/
|
|
24
|
+
export const companyNameSpans = (text, forms, determiners) => {
|
|
25
|
+
if (forms.length === 0)
|
|
26
|
+
return [];
|
|
27
|
+
const single = `${oneOf(forms)}${EDGE_AFTER}`;
|
|
28
|
+
// 形を重ねて書く(PTE. LTD.、CO.,LTD.)。
|
|
29
|
+
const form = String.raw `${single}(?:\.?,?[ \t]*${single})*`;
|
|
30
|
+
const named = new RegExp(String.raw `${EDGE_BEFORE}(?:${NAME_WORD}[ \t]+){0,${NAME_WORDS_MAX - 1}}(?<last>${NAME_WORD})(?:,[ \t]*|[ \t]+)${form}`, "gu");
|
|
31
|
+
const bracketed = new RegExp(String.raw `(?<=${NAME_WORD}[((][\p{L} ]+[))][ \t]*)${form}`, "gu");
|
|
32
|
+
const determiner = new Set(determiners.map((word) => word.toLowerCase()));
|
|
33
|
+
const names = [...text.matchAll(named)].filter((match) => !determiner.has((match.groups?.["last"] ?? "").toLowerCase()));
|
|
34
|
+
return [...names.map((match) => ({ start: match.index, end: match.index + match[0].length })), ...spansOf(text, bracketed)];
|
|
35
|
+
};
|
|
36
|
+
/** 通貨の記号に付けた大文字(USD$、AU$10、US$ 5)。国や通貨の印で、略語ではない。 */
|
|
37
|
+
const CURRENCY_PREFIX = new RegExp(String.raw `${EDGE_BEFORE}\p{Lu}{1,3}(?=[$€£¥])`, "gu");
|
|
38
|
+
export const currencySymbolSpans = (text) => spansOf(text, CURRENCY_PREFIX);
|
|
39
|
+
/**
|
|
40
|
+
* 引用の形の中の、法令の名前(45 CFR Parts 160、CFR §164.524、21 USC §301、22 CCR §§ 12701、94/820/EC)。後ろに条(§、Part、
|
|
41
|
+
* 番号)があるか、/ で繋いだ番号の後ろのときだけ。法令集そのものを言う所(the CFR title、the 2 CFR export)は略語のまま数える。
|
|
42
|
+
*/
|
|
43
|
+
export const citationSpans = (text, series) => {
|
|
44
|
+
if (series.length === 0)
|
|
45
|
+
return [];
|
|
46
|
+
const name = oneOf(series);
|
|
47
|
+
return spansOf(text, new RegExp(String.raw `(?<=\d/)${name}${EDGE_AFTER}|${EDGE_BEFORE}${name}(?=[ \t]*(?:§|[Pp]arts?[ \t]+\d|\d))`, "gu"));
|
|
48
|
+
};
|
|
49
|
+
/** 運送会社の名前。同じ文に 2 社以上を並べた所(Federal Express, UPS, DHL)だけ、どれも名前と読む。1 社だけの UPS は電源装置でもある。 */
|
|
50
|
+
export const carrierListSpans = (text, carriers) => {
|
|
51
|
+
if (carriers.length === 0)
|
|
52
|
+
return [];
|
|
53
|
+
const pattern = new RegExp(`${EDGE_BEFORE}${oneOf(carriers)}${EDGE_AFTER}`, "gu");
|
|
54
|
+
const spans = spansOf(text, pattern);
|
|
55
|
+
return new Set(spans.map((span) => text.slice(span.start, span.end))).size < 2 ? [] : spans;
|
|
56
|
+
};
|
|
57
|
+
/** 大文字で始まる語の前に置いた、名前を作る語(HM Revenue & Customs、HM Treasury)。 */
|
|
58
|
+
export const namePrefixSpans = (text, prefixes) => prefixes.length === 0 ? [] : spansOf(text, new RegExp(String.raw `${EDGE_BEFORE}${oneOf(prefixes)}(?=[ \t]+\p{Lu}\p{Ll})`, "gu"));
|
|
59
|
+
/** 番地と、大文字で始まり小文字が続く通りの名前の後ろの、通りの種類(512 Bayshore DR、4060 Johns Creek PKWY)。3 AI CT は住所ではない。 */
|
|
60
|
+
export const streetSuffixSpans = (text, suffixes) => suffixes.length === 0
|
|
61
|
+
? []
|
|
62
|
+
: spansOf(text, new RegExp(String.raw `(?<=${EDGE_BEFORE}\d+[A-Z]?[ \t]+(?:\p{Lu}\p{Ll}[\p{L}'’.-]*[ \t]+){1,3})${oneOf(suffixes)}${EDGE_AFTER}`, "gu"));
|
|
63
|
+
/** 大文字で書く決まり文句(NOW, THEREFORE、AND/OR)。 */
|
|
64
|
+
export const capitalPhraseSpans = (text, phrases) => phrases.length === 0 ? [] : spansOf(text, new RegExp(`${EDGE_BEFORE}${oneOf(phrases)}${EDGE_AFTER}`, "gu"));
|
|
65
|
+
/** 文の中で、名前の部品と決まり文句として略語から外す大文字を含む範囲。語彙表から一度だけ組み立てて、文ごとに呼ぶ。 */
|
|
66
|
+
export const nameSpansOf = (words) => (text) => [
|
|
67
|
+
...companyNameSpans(text, words.legalForms, words.determiners),
|
|
68
|
+
...currencySymbolSpans(text),
|
|
69
|
+
...citationSpans(text, words.citationSeries),
|
|
70
|
+
...carrierListSpans(text, words.carriers),
|
|
71
|
+
...namePrefixSpans(text, words.namePrefixes),
|
|
72
|
+
...streetSuffixSpans(text, words.streetSuffixes),
|
|
73
|
+
...capitalPhraseSpans(text, words.capitalPhrases),
|
|
74
|
+
];
|
|
75
|
+
//# sourceMappingURL=acronym-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acronym-name.js","sourceRoot":"","sources":["../../src/detectors/acronym-name.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,18 @@ export type CapitalisedWords = {
|
|
|
11
11
|
readonly divisions: readonly string[];
|
|
12
12
|
/** Small words inside one name (Statement of Work, Trials and Betas). */
|
|
13
13
|
readonly joiners: readonly string[];
|
|
14
|
+
/** Words that end a longer name the run only starts (Federal Food, Drug, and Cosmetic Act). */
|
|
15
|
+
readonly nameEnds: readonly string[];
|
|
16
|
+
/** Company forms and places, which end a name right after a comma too (Post Holdings, Inc.; Canton, Ohio). */
|
|
17
|
+
readonly formEnds: readonly string[];
|
|
18
|
+
/** Words before the quoted label in brackets that define the run ((the "FDA")). */
|
|
19
|
+
readonly definitionMarkers: readonly string[];
|
|
20
|
+
/** Words opening brackets that say where the run is defined ((as defined in the Merger Agreement)). */
|
|
21
|
+
readonly definedElsewhere: readonly string[];
|
|
22
|
+
/** Words before a party's capacity after its name (Citibank, N.A., as Administrative Agent). */
|
|
23
|
+
readonly capacityMarkers: readonly string[];
|
|
24
|
+
/** Articles, which may stand between a capacity word and the capacity (as the Borrower). */
|
|
25
|
+
readonly articles: readonly string[];
|
|
14
26
|
};
|
|
15
27
|
/** A term the document defines; bare is a definition with no defining word (("GPC")), which names more than it defines. */
|
|
16
28
|
export type Defined = {
|
|
@@ -32,10 +44,10 @@ export type CapitalisedInput = {
|
|
|
32
44
|
/**
|
|
33
45
|
* The first use of each capitalised run used inside a sentence like a defined term that names nothing the language
|
|
34
46
|
* package lists, is not set apart by markup, is never written in lower case, and neither is nor holds a defined or named
|
|
35
|
-
* term in any case.
|
|
47
|
+
* term in any case. A run that starts a longer name, carries a number, or is defined by the brackets after it is a name.
|
|
36
48
|
*/
|
|
37
49
|
export declare const capitalisedTerms: (input: CapitalisedInput) => CapitalisedTerm[];
|
|
38
|
-
/** Bold, HTML elements, table rows
|
|
50
|
+
/** Bold, HTML elements, table rows, list items' labels and clauses' run-in captions: labels and cells, not running text. */
|
|
39
51
|
export declare const setApartSpans: (source: string) => Span[];
|
|
40
52
|
/** The source with link destinations and URLs blanked: the words a reader sees. */
|
|
41
53
|
export declare const readableText: (source: string) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capitalised-term.d.ts","sourceRoot":"","sources":["../../src/detectors/capitalised-term.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,yGAAyG;IACzG,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,gGAAgG;IAChG,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"capitalised-term.d.ts","sourceRoot":"","sources":["../../src/detectors/capitalised-term.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,yGAAyG;IACzG,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,gGAAgG;IAChG,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,+FAA+F;IAC/F,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,8GAA8G;IAC9G,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,mFAAmF;IACnF,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,uGAAuG;IACvG,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,gGAAgG;IAChG,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,2HAA2H;AAC3H,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,KAAK,EAAE,CAAC,EAAE,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IACrC,8GAA8G;IAC9G,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,uGAAuG;IACvG,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;CAClC,CAAC;AAoMF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,gBAAgB,KAAG,eAAe,EAoBzE,CAAC;AAmBF,4HAA4H;AAC5H,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,IAAI,EAAyG,CAAC;AAI7J,mFAAmF;AACnF,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAA8F,CAAC;AAE7I,wFAAwF;AACxF,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAAM,EAC+F,CAAC"}
|
|
@@ -60,16 +60,120 @@ const writtenInLowerCase = (text, term) => {
|
|
|
60
60
|
.join(String.raw `[\s-]+`);
|
|
61
61
|
return new RegExp(String.raw `(?<!\p{L})${words}(?:e?s)?(?!\p{L})`, "u").test(text);
|
|
62
62
|
};
|
|
63
|
+
/** How many tokens past a run a longer name may still end (’s Investors Service, Inc: five). */
|
|
64
|
+
const NAME_REACH = 8;
|
|
65
|
+
/** Marks inside one name: Post Holdings, Inc; Davis Polk & Wardwell LLP; Moody’s Investors Service. */
|
|
66
|
+
const NAME_GLUE = new Set([",", "&", ".", "'s", "’s"]);
|
|
67
|
+
const DIGIT_START = /^\d/u;
|
|
68
|
+
/** The last word of each name-ending entry (Kingdom of United Kingdom), without a closing full stop. */
|
|
69
|
+
const lastWordsOf = (entries) => new Set(entries
|
|
70
|
+
.flatMap((entry) => entry
|
|
71
|
+
.split(/[\s,]+/u)
|
|
72
|
+
.filter((word) => word !== "")
|
|
73
|
+
.slice(-1))
|
|
74
|
+
.map((word) => word.replace(/\.$/u, "")));
|
|
75
|
+
/** Commas in a serial name's list (Federal Food, Drug, and Cosmetic Act). */
|
|
76
|
+
const SERIAL_COMMAS = 2;
|
|
77
|
+
/**
|
|
78
|
+
* Across a comma, a company form or a place ends the run's name only as the whole of what follows the comma (Post
|
|
79
|
+
* Holdings, Inc; London, United Kingdom), and a name word only at the end of a serial list of two commas, the last
|
|
80
|
+
* followed by a joiner (Federal Food, Drug, and Cosmetic Act): Confidential Information, Receiving Party and Servicer,
|
|
81
|
+
* Navistar Securities Corporation are two things each.
|
|
82
|
+
*/
|
|
83
|
+
const endsName = (glued, at, ends, joiners) => {
|
|
84
|
+
const surface = glued[at]?.surface ?? "";
|
|
85
|
+
const before = glued.slice(0, at);
|
|
86
|
+
const surfaces = before.map((token) => token.surface);
|
|
87
|
+
const comma = surfaces.lastIndexOf(",");
|
|
88
|
+
if (comma === -1)
|
|
89
|
+
return ends.forms.has(surface) || ends.names.has(surface);
|
|
90
|
+
const afterComma = glued.slice(comma + 1, at + 1);
|
|
91
|
+
if (ends.formEntries.has(afterComma.map((token) => token.surface).join(" ")))
|
|
92
|
+
return true;
|
|
93
|
+
const commas = surfaces.filter((each) => each === ",").length;
|
|
94
|
+
return ends.names.has(surface) && commas >= SERIAL_COMMAS && joiners.has(afterComma[0]?.surface ?? "");
|
|
95
|
+
};
|
|
96
|
+
/** The run only starts a longer name: the words after it, joined by commas, ampersands and joiners, reach a word that ends a name. */
|
|
97
|
+
const startsLongerName = (tokens, end, ends, joiners) => {
|
|
98
|
+
const reach = tokens.slice(end, end + NAME_REACH);
|
|
99
|
+
const stop = reach.findIndex((token, at) => {
|
|
100
|
+
const before = tokens[end + at - 1];
|
|
101
|
+
return before === undefined || !adjacent(before, token) || !(NAME_GLUE.has(token.surface) || joiners.has(token.surface) || continues(token));
|
|
102
|
+
});
|
|
103
|
+
const glued = reach.slice(0, stop === -1 ? reach.length : stop);
|
|
104
|
+
return glued.some((_, at) => endsName(glued, at, ends, joiners));
|
|
105
|
+
};
|
|
106
|
+
/** A number right after the run makes it a numbered name (Proposition 65, Vaccines 2Go) or a contents line's page. */
|
|
107
|
+
const numberedName = (last, after) => after !== undefined && adjacent(last, after) && DIGIT_START.test(after.surface);
|
|
108
|
+
/** The words as written and with their first letter capitalised (the, The), as one alternation. */
|
|
109
|
+
const alternativesOf = (words) => words
|
|
110
|
+
.filter((word) => word !== "")
|
|
111
|
+
.flatMap((word) => [word, word.charAt(0).toUpperCase() + word.slice(1)])
|
|
112
|
+
.map(escapeRegExp)
|
|
113
|
+
.join("|");
|
|
114
|
+
/** A quoted label: a capitalised word or more in quotes, closing the brackets or followed by another label ("Buyer" or "PNC"). */
|
|
115
|
+
const QUOTED_LABEL = String.raw `["“]\p{Lu}[^"“”\n]{0,60}["”][ \t]*(?:\)|,|;|or[ \t]|and[ \t])`;
|
|
116
|
+
/**
|
|
117
|
+
* Brackets right after a run that define it, so the run is what a definition names, not a term in use: a quoted label
|
|
118
|
+
* (Food and Drug Administration (the "FDA"), Certificate of Analysis ("COA")) or a pointer to where it is defined
|
|
119
|
+
* (Closing (as defined in the Merger Agreement)). A quoted phrase in lower case (("including records")) is no label.
|
|
120
|
+
*/
|
|
121
|
+
const definitionAfterPattern = (words) => {
|
|
122
|
+
const markers = alternativesOf(words.definitionMarkers);
|
|
123
|
+
const elsewhere = alternativesOf(words.definedElsewhere);
|
|
124
|
+
const label = markers === "" ? QUOTED_LABEL : String.raw `(?:(?:${markers})[ \t]+)*${QUOTED_LABEL}`;
|
|
125
|
+
const opening = elsewhere === "" ? label : String.raw `(?:${label}|(?:${elsewhere})(?!\p{L}))`;
|
|
126
|
+
return new RegExp(String.raw `^[ \t]*\([ \t]*${opening}`, "u");
|
|
127
|
+
};
|
|
128
|
+
/** How much text after a run the bracket check reads. */
|
|
129
|
+
const DEFINITION_AFTER_CHARS = 120;
|
|
130
|
+
/** The initials of a run's words, with and without its joiners (PFHOF and PFHF for Pro Football Hall of Fame). */
|
|
131
|
+
const initialsOf = (term, joiners) => {
|
|
132
|
+
const words = term.split(/[\s-]+/u).filter((word) => word !== "");
|
|
133
|
+
const initials = (kept) => kept.map((word) => word.charAt(0).toUpperCase()).join("");
|
|
134
|
+
return words.length < 2 ? [] : [initials(words), initials(words.filter((word) => !joiners.has(word)))];
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* The run names the capacity a named party acts in, in a list of parties to some agreement (Citibank, N.A., as
|
|
138
|
+
* Administrative Agent; the Company, as the Borrower): the name, a comma, a capacity word and perhaps an article.
|
|
139
|
+
*/
|
|
140
|
+
const capacityOfAName = (tokens, start, words) => {
|
|
141
|
+
const before = tokens[start - 1];
|
|
142
|
+
const at = before !== undefined && words.articles.includes(before.surface) ? start - 2 : start - 1;
|
|
143
|
+
const marker = tokens[at];
|
|
144
|
+
const comma = tokens[at - 1];
|
|
145
|
+
const name = tokens[at - 2];
|
|
146
|
+
if (marker === undefined || comma?.surface !== "," || name === undefined)
|
|
147
|
+
return false;
|
|
148
|
+
return words.capacityMarkers.includes(marker.surface) && (continues(name) || name.surface === ".");
|
|
149
|
+
};
|
|
150
|
+
const nameCues = (input, joiners) => {
|
|
151
|
+
const words = input.words;
|
|
152
|
+
const ends = { names: lastWordsOf(words.nameEnds), forms: lastWordsOf(words.formEnds), formEntries: new Set(words.formEnds) };
|
|
153
|
+
const definitionAfter = definitionAfterPattern(words);
|
|
154
|
+
const abbreviations = new Set([...input.defined.map((definition) => definition.term), ...input.named].filter((term) => ACRONYM.test(term)));
|
|
155
|
+
return (tokens, start, end, term) => {
|
|
156
|
+
const last = tokens[end - 1];
|
|
157
|
+
if (last === undefined)
|
|
158
|
+
return false;
|
|
159
|
+
return (numberedName(last, tokens[end]) ||
|
|
160
|
+
startsLongerName(tokens, end, ends, joiners) ||
|
|
161
|
+
definitionAfter.test(input.source.slice(last.span.end, last.span.end + DEFINITION_AFTER_CHARS)) ||
|
|
162
|
+
initialsOf(term, joiners).some((initials) => abbreviations.has(initials)) ||
|
|
163
|
+
capacityOfAName(tokens, start, words));
|
|
164
|
+
};
|
|
165
|
+
};
|
|
63
166
|
/**
|
|
64
167
|
* The first use of each capitalised run used inside a sentence like a defined term that names nothing the language
|
|
65
168
|
* package lists, is not set apart by markup, is never written in lower case, and neither is nor holds a defined or named
|
|
66
|
-
* term in any case.
|
|
169
|
+
* term in any case. A run that starts a longer name, carries a number, or is defined by the brackets after it is a name.
|
|
67
170
|
*/
|
|
68
171
|
export const capitalisedTerms = (input) => {
|
|
69
172
|
const defining = input.defined.filter((definition) => definition.bare !== true && DEFINED_FORM.test(definition.term));
|
|
70
173
|
if (defining.length < MIN_DEFINED)
|
|
71
174
|
return [];
|
|
72
175
|
const joiners = new Set(input.words.joiners);
|
|
176
|
+
const isName = nameCues(input, joiners);
|
|
73
177
|
const divisions = new Set(input.words.divisions.flatMap(formsOf));
|
|
74
178
|
const known = new Set([...input.defined.map((definition) => definition.term), ...input.named, ...input.words.names].flatMap(formsOf));
|
|
75
179
|
const isKnown = (term) => partsOf(term).some((part) => formsOf(part).some((form) => known.has(form)));
|
|
@@ -81,7 +185,9 @@ export const capitalisedTerms = (input) => {
|
|
|
81
185
|
if (inside(first.span.start, input.marked) || formsOf(first.surface).some((form) => divisions.has(form)))
|
|
82
186
|
return [];
|
|
83
187
|
const term = input.source.slice(first.span.start, last.span.end);
|
|
84
|
-
|
|
188
|
+
if (isKnown(term) || isName(tokens, start, end, term))
|
|
189
|
+
return [];
|
|
190
|
+
return writtenInLowerCase(input.readable, term) ? [] : [{ offset: first.span.start, term }];
|
|
85
191
|
}));
|
|
86
192
|
return uses.filter((use, index) => uses.findIndex((other) => formsOf(other.term).some((form) => formsOf(use.term).includes(form))) === index);
|
|
87
193
|
};
|
|
@@ -90,9 +196,14 @@ const QUOTED = /["“]([^"“”\n]{1,80}?)[,.]?["”]/gu;
|
|
|
90
196
|
const HTML_ELEMENT = /<([a-z][a-z0-9]*)\b[^>]*>[^<]*<\/\1>/giu;
|
|
91
197
|
const TABLE_ROW = /^[ \t]*\|.*$/gmu;
|
|
92
198
|
const ITEM_LABEL = /^[ \t]*(?:[*+-]|\d+[.)])[ \t]+[^:\n]{1,80}:/gmu;
|
|
199
|
+
const CAPTION_WORD = String.raw `\p{Lu}[\p{L}'’-]*`;
|
|
200
|
+
const CAPTION_SMALL = String.raw `(?:of|and|or|to|the|for|with|in|on|a|an|by|from|under|upon|as|at|not)[ \t]+`;
|
|
201
|
+
/** A clause's run-in caption: its number, then capitalised words up to a full stop or colon (5.8 No Representation or Warranty.). */
|
|
202
|
+
const CAPTION = new RegExp(String.raw `(?:^|(?<=[.;:][ \t]+))[ \t]*(?:(?:Section|Article|SECTION|ARTICLE)[ \t]+)?(?:\d+(?:\.\d+)*\.?|\([a-z\d]{1,4}\))[ \t]+` +
|
|
203
|
+
String.raw `${CAPTION_WORD}(?:(?:[ \t]+|[;,][ \t]*)(?:${CAPTION_SMALL})*${CAPTION_WORD}){0,10}(?=[.:](?:\s|$))`, "gmu");
|
|
93
204
|
const spansOf = (source, pattern) => [...source.matchAll(pattern)].map((match) => ({ start: match.index, end: match.index + match[0].length }));
|
|
94
|
-
/** Bold, HTML elements, table rows
|
|
95
|
-
export const setApartSpans = (source) => [BOLD, HTML_ELEMENT, TABLE_ROW, ITEM_LABEL].flatMap((pattern) => spansOf(source, pattern));
|
|
205
|
+
/** Bold, HTML elements, table rows, list items' labels and clauses' run-in captions: labels and cells, not running text. */
|
|
206
|
+
export const setApartSpans = (source) => [BOLD, HTML_ELEMENT, TABLE_ROW, ITEM_LABEL, CAPTION].flatMap((pattern) => spansOf(source, pattern));
|
|
96
207
|
const LINK_DESTINATION = /\]\([^)\n]*\)|<?https?:\/\/[^\s)>]+>?/gu;
|
|
97
208
|
/** The source with link destinations and URLs blanked: the words a reader sees. */
|
|
98
209
|
export const readableText = (source) => source.replaceAll(LINK_DESTINATION, (destination) => " ".repeat(destination.length));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capitalised-term.js","sourceRoot":"","sources":["../../src/detectors/capitalised-term.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capitalised-term.js","sourceRoot":"","sources":["../../src/detectors/capitalised-term.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Captions set in capitals: a capital run that opens a paragraph and ends in a colon ("AGENCY:", "DIRECT HIRE AUTHORITY:
|
|
3
|
+
* This position is …"), or that is a paragraph of its own ("WORKING GROUP MEMBERS"). Notices, forms and reports set their
|
|
4
|
+
* captions this way by convention, and prose that names one ("the FOR FURTHER INFORMATION CONTACT section") repeats it.
|
|
5
|
+
* A line of a hard-wrapped paragraph in capitals (a disclaimer) has text above it, so it is no caption.
|
|
6
|
+
*/
|
|
7
|
+
/** Whether the capital run at [start, end) of the source is a caption: it opens its paragraph and ends in a colon or the paragraph's end. */
|
|
8
|
+
export declare const isCaptionAt: (source: string, start: number, end: number) => boolean;
|
|
9
|
+
/** The captions a source sets in capitals, each as its words ("FOR FURTHER INFORMATION CONTACT"). */
|
|
10
|
+
export declare const captionsOf: (source: string) => ReadonlySet<string>;
|
|
11
|
+
//# sourceMappingURL=caps-caption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caps-caption.d.ts","sourceRoot":"","sources":["../../src/detectors/caps-caption.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0BH,6IAA6I;AAC7I,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,KAAK,MAAM,KAAG,OAGxE,CAAC;AASF,qGAAqG;AACrG,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,WAAW,CAAC,MAAM,CAe7D,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Captions set in capitals: a capital run that opens a paragraph and ends in a colon ("AGENCY:", "DIRECT HIRE AUTHORITY:
|
|
3
|
+
* This position is …"), or that is a paragraph of its own ("WORKING GROUP MEMBERS"). Notices, forms and reports set their
|
|
4
|
+
* captions this way by convention, and prose that names one ("the FOR FURTHER INFORMATION CONTACT section") repeats it.
|
|
5
|
+
* A line of a hard-wrapped paragraph in capitals (a disclaimer) has text above it, so it is no caption.
|
|
6
|
+
*/
|
|
7
|
+
/** Markdown heading or list marks and spaces that may stand before a caption on its line. */
|
|
8
|
+
const LINE_LEAD = /^[ \t]*(?:#{1,6}[ \t]+|[-*+][ \t]+)?$/u;
|
|
9
|
+
const BLANK_LINE = /^[ \t\r]*$/u;
|
|
10
|
+
const LINE_END = /^[ \t\r]*(?:\n|$)/u;
|
|
11
|
+
const LEAD = /^[ \t]*(?:#{1,6}[ \t]+|[-*+][ \t]+)?/u;
|
|
12
|
+
const CAPITAL_RUN = /^[A-Z][A-Z']*(?:,? [A-Z][A-Z']*)*/u;
|
|
13
|
+
/** The line before the one that starts at lineStart, or undefined at the start of the source. */
|
|
14
|
+
const lineBefore = (source, lineStart) => lineStart === 0 ? undefined : source.slice(source.lastIndexOf("\n", lineStart - 2) + 1, lineStart - 1);
|
|
15
|
+
const opensParagraph = (source, lineStart) => {
|
|
16
|
+
const above = lineBefore(source, lineStart);
|
|
17
|
+
return above === undefined || BLANK_LINE.test(above);
|
|
18
|
+
};
|
|
19
|
+
/** Whether the text after a run ends the caption: a colon, or the end of a paragraph. */
|
|
20
|
+
const endsCaption = (rest) => {
|
|
21
|
+
if (rest.startsWith(":"))
|
|
22
|
+
return true;
|
|
23
|
+
if (!LINE_END.test(rest))
|
|
24
|
+
return false;
|
|
25
|
+
const next = rest.slice(rest.indexOf("\n") + 1).split("\n", 1)[0] ?? "";
|
|
26
|
+
return !rest.includes("\n") || BLANK_LINE.test(next);
|
|
27
|
+
};
|
|
28
|
+
/** Whether the capital run at [start, end) of the source is a caption: it opens its paragraph and ends in a colon or the paragraph's end. */
|
|
29
|
+
export const isCaptionAt = (source, start, end) => {
|
|
30
|
+
const lineStart = source.lastIndexOf("\n", start - 1) + 1;
|
|
31
|
+
return LINE_LEAD.test(source.slice(lineStart, start)) && opensParagraph(source, lineStart) && endsCaption(source.slice(end));
|
|
32
|
+
};
|
|
33
|
+
/** The capital run that opens a line, after its heading or list mark, with where it starts in the source. */
|
|
34
|
+
const runOpening = (line, lineStart) => {
|
|
35
|
+
const lead = LEAD.exec(line)?.[0].length ?? 0;
|
|
36
|
+
const words = CAPITAL_RUN.exec(line.slice(lead))?.[0];
|
|
37
|
+
return words === undefined ? undefined : { words, start: lineStart + lead };
|
|
38
|
+
};
|
|
39
|
+
/** The captions a source sets in capitals, each as its words ("FOR FURTHER INFORMATION CONTACT"). */
|
|
40
|
+
export const captionsOf = (source) => {
|
|
41
|
+
const lines = source.split("\n");
|
|
42
|
+
const starts = lines.reduce((acc, line) => {
|
|
43
|
+
acc.push((acc.at(-1) ?? 0) + line.length + 1);
|
|
44
|
+
return acc;
|
|
45
|
+
}, [0]);
|
|
46
|
+
return new Set(lines.flatMap((line, at) => {
|
|
47
|
+
const run = runOpening(line, starts[at] ?? 0);
|
|
48
|
+
return run !== undefined && isCaptionAt(source, run.start, run.start + run.words.length) ? [run.words] : [];
|
|
49
|
+
}));
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=caps-caption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caps-caption.js","sourceRoot":"","sources":["../../src/detectors/caps-caption.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"char-shape.d.ts","sourceRoot":"","sources":["../../src/detectors/char-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"char-shape.d.ts","sourceRoot":"","sources":["../../src/detectors/char-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkE,MAAM,cAAc,CAAC;AAkH7G;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,QAoBtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,QAWjB,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { compacted } from "./gram-place.js";
|
|
2
|
-
import { leadingCounter } from "./counter-edge.js";
|
|
2
|
+
import { leadingCounter, trailingPrefix } from "./counter-edge.js";
|
|
3
3
|
import { maskAddresses } from "../address-chain.js";
|
|
4
4
|
import { isAddressRun } from "./place-run.js";
|
|
5
5
|
import { isOneName } from "./name-run.js";
|
|
6
|
+
import { isOrganisationRun } from "./organisation-run.js";
|
|
7
|
+
import { endsInTitle, isTitlePosition, isTitledName } from "./titled-run.js";
|
|
6
8
|
import { proseText } from "../measure.js";
|
|
7
9
|
import { parallelDotCount } from "./middle-dot.js";
|
|
8
10
|
import { maskSpans } from "../mask.js";
|
|
@@ -14,14 +16,16 @@ import { nameSpans } from "../team-names.js";
|
|
|
14
16
|
*/
|
|
15
17
|
const KANJI_RUN = /[一-鿿]+/gu;
|
|
16
18
|
const SPACE = /\s/gu;
|
|
19
|
+
/** 名前を囲む括弧。鉤括弧と、見出しや分類の名前を囲む隅付き括弧(【浪速区役所公募型比較見積】)。 */
|
|
20
|
+
const NAME_MARKS = { "「": "」", "『": "』", "【": "】" };
|
|
17
21
|
/**
|
|
18
22
|
* 同じ連なりが文に二度出ても、それぞれの位置で読む。proseText は空白を詰めたり除いたりするだけなので、
|
|
19
23
|
* 空白でない k 文字目は元の文でも空白でない k 文字目。番地の覆いは長さを保つので、proseText の位置がそのまま使える。
|
|
20
24
|
*/
|
|
21
25
|
/** 番地と、チームが並べた名前を空白で覆う。名前は読み手が 1 語と知っているので、前後は別の連なりになる。 */
|
|
22
26
|
const maskedProse = (prose, profile, names) => maskSpans(maskAddresses(prose, profile), nameSpans(prose, names));
|
|
23
|
-
/**
|
|
24
|
-
const fillsQuote = (sentence, start, end) => quotedSpans(sentence.text).some((span) => span.start === start && span.end === end);
|
|
27
|
+
/** 鉤括弧と隅付き括弧の中身が、ちょうどこの範囲(文の先頭からの位置)か。括弧でくくった漢字だけの語は、書き手が 1 つの名前として示したもの。 */
|
|
28
|
+
const fillsQuote = (sentence, start, end) => quotedSpans(sentence.text, NAME_MARKS).some((span) => span.start === start && span.end === end);
|
|
25
29
|
const runsOf = (sentence, profile, names) => {
|
|
26
30
|
const prose = proseText(sentence);
|
|
27
31
|
const printed = compacted(sentence.text, "char").offsets;
|
|
@@ -29,39 +33,64 @@ const runsOf = (sentence, profile, names) => {
|
|
|
29
33
|
const before = prose.slice(0, match.index).replace(SPACE, "").length;
|
|
30
34
|
const [start, last] = [printed[before], printed[before + match[0].length - 1]];
|
|
31
35
|
if (start === undefined || last === undefined)
|
|
32
|
-
return { text: match[0], span: undefined, quoted: false };
|
|
33
|
-
|
|
36
|
+
return { text: match[0], span: undefined, quoted: false, placed: false };
|
|
37
|
+
const span = { start: sentence.span.start + start, end: sentence.span.start + last + 1 };
|
|
38
|
+
return { text: match[0], span, quoted: fillsQuote(sentence, start, last + 1), placed: isTitlePosition(sentence.text, start, last + 1) };
|
|
34
39
|
});
|
|
35
40
|
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
const coveringOf = (tokens, span) => tokens.flatMap((token, index) => (token.span.start < span.end && span.start < token.span.end ? [index] : []));
|
|
42
|
+
/**
|
|
43
|
+
* 漢字の連なりが住所(東京都港区新橋二丁目)か 1 つの名前(日本銀行)か 1 つの組織の名前(国立研究開発法人産業技術総合研究所)か。
|
|
44
|
+
* 形態素解析の地名・人名・組織名と数、組織の語彙で決める。
|
|
45
|
+
*/
|
|
46
|
+
const isPlaceName = (tokens, span, words) => {
|
|
47
|
+
const covering = coveringOf(tokens, span);
|
|
48
|
+
return isAddressRun(tokens, covering, words.topUnits) || isOneName(tokens, covering) || isOrganisationRun(tokens, covering, words.organisation);
|
|
40
49
|
};
|
|
50
|
+
/** 題の名前(大阪市鶴見区役所公募型比較見積実施要綱)か。題を閉じる語で終わり、ここか文書のほかの所で題として置かれている。 */
|
|
51
|
+
const isTitle = (tokens, span, text, placed, context) => endsInTitle(coveringOf(tokens, span).flatMap((index) => tokens.slice(index, index + 1)), context.words.title) &&
|
|
52
|
+
(placed || isTitledName(text, context.titled));
|
|
41
53
|
/**
|
|
42
|
-
* 数えない連なりは空。頭の、数に付いた助数詞(2
|
|
43
|
-
*
|
|
54
|
+
* 数えない連なりは空。頭の、数に付いた助数詞(2日日本弁護士連合会の「日」)と、尻の、数に付く接頭の語(施行令第172条の「第」)は数えない。
|
|
55
|
+
* 住所か名前かは、それを外した残りで決める(1日日本銀行の「日本銀行」)。品詞が無ければ判定しない。
|
|
44
56
|
*/
|
|
45
|
-
const measuredRun = (tokens, run,
|
|
57
|
+
const measuredRun = (tokens, run, context) => {
|
|
46
58
|
if (run.quoted)
|
|
47
59
|
return "";
|
|
48
60
|
if (tokens === undefined || run.span === undefined)
|
|
49
61
|
return run.text;
|
|
50
62
|
const counter = leadingCounter(tokens, run.span.start, run.text);
|
|
51
|
-
const
|
|
52
|
-
|
|
63
|
+
const prefix = trailingPrefix(tokens, run.span.end, run.text);
|
|
64
|
+
const rest = { start: counter?.span.end ?? run.span.start, end: prefix?.span.start ?? run.span.end };
|
|
65
|
+
const text = run.text.slice(counter?.surface.length ?? 0, run.text.length - (prefix?.surface.length ?? 0));
|
|
66
|
+
return isPlaceName(tokens, rest, context.words) || isTitle(tokens, rest, text, run.placed, context) ? "" : text;
|
|
53
67
|
};
|
|
54
|
-
const longestKanji = (sentence,
|
|
55
|
-
.map((run) => measuredRun(sentence.tokens, run,
|
|
68
|
+
const longestKanji = (sentence, context) => runsOf(sentence, context.profile, context.names)
|
|
69
|
+
.map((run) => measuredRun(sentence.tokens, run, context))
|
|
56
70
|
.reduce((longest, run) => (run.length > longest.length ? run : longest), "");
|
|
71
|
+
/**
|
|
72
|
+
* 文書の中で題として置かれた漢字の連なり: 題の置き方をした文の中の連なりと、見出しの中の連なり。
|
|
73
|
+
* 同じ名前を文の中で使えば(認定職業訓練実施奨励金の支給額)、それも題の名前と読む。
|
|
74
|
+
*/
|
|
75
|
+
const titledNames = (doc, profile, names) => [
|
|
76
|
+
...doc.sentences.flatMap((sentence) => runsOf(sentence, profile, names).flatMap((run) => (run.placed ? [run.text] : []))),
|
|
77
|
+
...(doc.markup?.headings ?? []).flatMap((heading) => [...heading.text.matchAll(KANJI_RUN)].map((match) => match[0])),
|
|
78
|
+
];
|
|
57
79
|
/**
|
|
58
80
|
* 漢字が続くと、どこで語が切れるのか読み手が探すことになる。
|
|
59
81
|
* 「情報処理推進機構認定試験」は 12 字。ひらがなを 1 つ挟むだけで読める。
|
|
60
82
|
*/
|
|
61
83
|
export const kanjiRun = (doc, options) => {
|
|
62
|
-
const
|
|
84
|
+
const patterns = (id) => (doc.lexicons[id] ?? []).map((entry) => entry.pattern);
|
|
85
|
+
const words = {
|
|
86
|
+
topUnits: new Set(patterns("prefecture-unit")),
|
|
87
|
+
organisation: { forms: patterns("organisation-form"), units: patterns("organisation-unit") },
|
|
88
|
+
title: { endings: patterns("title-ending") },
|
|
89
|
+
};
|
|
90
|
+
const names = doc.names ?? [];
|
|
91
|
+
const context = { profile: doc.profile, names, words, titled: titledNames(doc, doc.profile, names) };
|
|
63
92
|
return doc.sentences
|
|
64
|
-
.map((sentence) => ({ sentence, run: longestKanji(sentence,
|
|
93
|
+
.map((sentence) => ({ sentence, run: longestKanji(sentence, context) }))
|
|
65
94
|
.filter(({ run }) => run.length > options.limit)
|
|
66
95
|
.map(({ sentence, run }) => ({
|
|
67
96
|
rule: "max-kanji-continuous",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"char-shape.js","sourceRoot":"","sources":["../../src/detectors/char-shape.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"char-shape.js","sourceRoot":"","sources":["../../src/detectors/char-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ type Ended = {
|
|
|
10
10
|
};
|
|
11
11
|
/** Runs of consecutive sentences with the same ending. A sentence with no ending to compare closes a run. */
|
|
12
12
|
export declare const endingRuns: (sentences: readonly Sentence[]) => Ended[][];
|
|
13
|
-
/** More than limit sentences in a row within one paragraph that end with the same words. */
|
|
13
|
+
/** More than limit sentences in a row within one paragraph that end with the same words, unless they define different terms in one frame. */
|
|
14
14
|
export declare const endingRun: Detector;
|
|
15
15
|
/** A sentence that uses the lexicon's paired marker once and goes on without its partner. */
|
|
16
16
|
export declare const unpairedParallel: Detector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clause-shape.d.ts","sourceRoot":"","sources":["../../src/detectors/clause-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoD,QAAQ,EAAS,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"clause-shape.d.ts","sourceRoot":"","sources":["../../src/detectors/clause-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoD,QAAQ,EAAS,MAAM,cAAc,CAAC;AAsChH;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,UAAU,QAAQ,KAAG,MAAM,GAAG,SAQtD,CAAC;AAEF,KAAK,KAAK,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAElF,6GAA6G;AAC7G,eAAO,MAAM,UAAU,GAAI,WAAW,SAAS,QAAQ,EAAE,KAAG,KAAK,EAAE,EAQjB,CAAC;AAcnD,6IAA6I;AAC7I,eAAO,MAAM,SAAS,EAAE,QAcvB,CAAC;AAwBF,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB,EAAE,QAU9B,CAAC;AAqBF,0GAA0G;AAC1G,eAAO,MAAM,cAAc,EAAE,QAS5B,CAAC;AAyDF,mHAAmH;AACnH,eAAO,MAAM,cAAc,EAAE,QAM5B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isWithinAny, quotedIn } from "../quoted-span.js";
|
|
2
|
+
import { definitionWordsOf, isParallelDefinition } from "./parallel-definition.js";
|
|
2
3
|
// The shape of a clause read from its words: how it ends, a paired word left alone, an adverb that needs a
|
|
3
4
|
// negation, a particle used where another one belongs. Every word comes from a lexicon; this file knows parts of speech.
|
|
4
5
|
const findingAt = (sentence, offset, values) => ({
|
|
@@ -56,10 +57,14 @@ const runFinding = (run, limit) => {
|
|
|
56
57
|
values: { word: first?.ending ?? "", count: run.length, limit, offset: first?.sentence.span.start ?? 0 },
|
|
57
58
|
};
|
|
58
59
|
};
|
|
59
|
-
/** More than limit sentences in a row within one paragraph that end with the same words. */
|
|
60
|
-
export const endingRun = (doc, options) =>
|
|
61
|
-
|
|
62
|
-
.
|
|
60
|
+
/** More than limit sentences in a row within one paragraph that end with the same words, unless they define different terms in one frame. */
|
|
61
|
+
export const endingRun = (doc, options) => {
|
|
62
|
+
const words = definitionWordsOf(options.lexicon);
|
|
63
|
+
return doc.paragraphs.flatMap((paragraph) => endingRuns(paragraph.sentences)
|
|
64
|
+
.filter((run) => run.length > options.limit &&
|
|
65
|
+
!isParallelDefinition(run.map(({ sentence }) => sentence), words))
|
|
66
|
+
.map((run) => runFinding(run, options.limit)));
|
|
67
|
+
};
|
|
63
68
|
// --- unpaired-parallel: a word that lists by pairs (〜たり) used once, followed by another clause -----------------
|
|
64
69
|
const CONTENT_POS = new Set(["VERB", "ADJ", "NOUN", "PROPN"]);
|
|
65
70
|
const nextWord = (tokens, at) => tokens.slice(at + 1).find((token) => !isSpace(token));
|