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,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 行頭の、文字で振った見出しの番号(議事録の Z. の次の AA.、AB. … BZ.)。表計算の列名と同じく A〜Z の次は AA と進む。
|
|
3
|
+
* 略語ではない。行頭で . か ) が続き、その前か後の番号も同じ文書の行頭にあるときだけ番号と読む。1 か所だけの
|
|
4
|
+
* 行頭の大文字(IT. の説明、FAQ) の行)は略語のまま数える。そう読めた番号を区切りの名前の後ろで指す所(See Attachment AA)も
|
|
5
|
+
* 番号。区切りの名前は言語パッケージの語彙表から読む。
|
|
6
|
+
*/
|
|
7
|
+
type Span = {
|
|
8
|
+
readonly start: number;
|
|
9
|
+
readonly end: number;
|
|
10
|
+
};
|
|
11
|
+
/** 文書の中の、隣の番号と並んだ文字の番号と、それを区切りの名前の後ろで指す所の範囲。位置は文書の頭からの文字数。 */
|
|
12
|
+
export declare const outlineLabelSpans: (source: string, divisions: readonly string[]) => Span[];
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=outline-label.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline-label.d.ts","sourceRoot":"","sources":["../../src/detectors/outline-label.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,KAAK,IAAI,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAkC7D,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,WAAW,SAAS,MAAM,EAAE,KAAG,IAAI,EAGpF,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { escapeRegExp } from "../orthography.js";
|
|
2
|
+
const LABEL = /^[ \t]*(?<label>[A-Z]{1,3})[.)](?=[ \t]|$)/gmu;
|
|
3
|
+
const ALPHABET = 26;
|
|
4
|
+
const CODE_BEFORE_A = 64;
|
|
5
|
+
/** A=1、Z=26、AA=27、AZ=52、BA=53。 */
|
|
6
|
+
const positionOf = (label) => [...label].reduce((total, letter) => total * ALPHABET + (letter.charCodeAt(0) - CODE_BEFORE_A), 0);
|
|
7
|
+
const labelsOf = (source) => [...source.matchAll(LABEL)].map((match) => {
|
|
8
|
+
const text = match.groups?.["label"] ?? "";
|
|
9
|
+
const start = match.index + match[0].indexOf(text);
|
|
10
|
+
return { text, position: positionOf(text), span: { start, end: start + text.length } };
|
|
11
|
+
});
|
|
12
|
+
const lineLabels = (source) => {
|
|
13
|
+
const labels = labelsOf(source);
|
|
14
|
+
const positions = new Set(labels.map((label) => label.position));
|
|
15
|
+
return labels.filter(({ position }) => positions.has(position - 1) || positions.has(position + 1));
|
|
16
|
+
};
|
|
17
|
+
const referenceSpans = (source, labels, divisions) => {
|
|
18
|
+
const texts = [...new Set(labels.map((label) => label.text))];
|
|
19
|
+
if (texts.length === 0 || divisions.length === 0)
|
|
20
|
+
return [];
|
|
21
|
+
const pattern = new RegExp(String.raw `(?<![A-Za-z0-9_])(?:${divisions.map(escapeRegExp).join("|")})\s+(?<label>${texts.join("|")})(?![A-Za-z0-9_&])`, "gu");
|
|
22
|
+
return [...source.matchAll(pattern)].map((match) => {
|
|
23
|
+
const end = match.index + match[0].length;
|
|
24
|
+
return { start: end - (match.groups?.["label"] ?? "").length, end };
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
/** 文書の中の、隣の番号と並んだ文字の番号と、それを区切りの名前の後ろで指す所の範囲。位置は文書の頭からの文字数。 */
|
|
28
|
+
export const outlineLabelSpans = (source, divisions) => {
|
|
29
|
+
const labels = lineLabels(source);
|
|
30
|
+
return [...labels.map((label) => label.span), ...referenceSpans(source, labels, divisions)];
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=outline-label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline-label.js","sourceRoot":"","sources":["../../src/detectors/outline-label.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { LengthUnit } from "../plugin.ts";
|
|
2
|
+
/** One pattern for every page marker the lexicon names, or undefined when it names none. */
|
|
3
|
+
export declare const pageMarkerPattern: (templates: readonly string[]) => RegExp | undefined;
|
|
4
|
+
/** How much of a sentence its page markers take up, in the document's unit: their words, or their characters without spaces. */
|
|
5
|
+
export declare const pageMarkerSize: (text: string, pattern: RegExp | undefined, unit: LengthUnit) => number;
|
|
6
|
+
//# sourceMappingURL=page-marker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-marker.d.ts","sourceRoot":"","sources":["../../src/detectors/page-marker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa/C,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,GAAI,WAAW,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SAC+D,CAAC;AAK1I,gIAAgI;AAChI,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,GAAG,SAAS,EAAE,MAAM,UAAU,KAAG,MAG5F,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { escapeRegExp } from "../orthography.js";
|
|
2
|
+
/**
|
|
3
|
+
* Page markers a converted print edition leaves inside a sentence ("( printed page 52044)", "[[Page 52044]]", 「-12-」).
|
|
4
|
+
* They are the page break, not the writer's words. The shapes come from the lexicon: "#" stands for the page number and a
|
|
5
|
+
* space for any run of spaces, none included. A marker touching a digit is part of a number (an address, 1-2-3).
|
|
6
|
+
*/
|
|
7
|
+
const NUMBER = "#";
|
|
8
|
+
const TEMPLATE_PARTS = { [NUMBER]: String.raw `\p{Nd}+`, " ": String.raw `\s*` };
|
|
9
|
+
const templatePattern = (template) => [...template].map((char) => TEMPLATE_PARTS[char] ?? escapeRegExp(char)).join("");
|
|
10
|
+
/** One pattern for every page marker the lexicon names, or undefined when it names none. */
|
|
11
|
+
export const pageMarkerPattern = (templates) => templates.length === 0 ? undefined : new RegExp(String.raw `(?<!\p{Nd})(?:${templates.map(templatePattern).join("|")})(?!\p{Nd})`, "gu");
|
|
12
|
+
const sizeOf = (marker, unit) => unit === "word" ? marker.split(/\s+/u).filter((word) => word.length > 0).length : marker.replace(/\s+/gu, "").length;
|
|
13
|
+
/** How much of a sentence its page markers take up, in the document's unit: their words, or their characters without spaces. */
|
|
14
|
+
export const pageMarkerSize = (text, pattern, unit) => {
|
|
15
|
+
if (pattern === undefined)
|
|
16
|
+
return 0;
|
|
17
|
+
return [...text.matchAll(pattern)].map((match) => match[0]).reduce((size, marker) => size + sizeOf(marker, unit), 0);
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=page-marker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-marker.js","sourceRoot":"","sources":["../../src/detectors/page-marker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC;AAEnB,MAAM,cAAc,GAAqC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAA,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAA,KAAK,EAAE,CAAC;AAEjH,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEvI,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAA4B,EAAsB,EAAE,CACpF,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,iBAAiB,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAE1I,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,IAAgB,EAAU,EAAE,CAC1D,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AAEvH,gIAAgI;AAChI,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,OAA2B,EAAE,IAAgB,EAAU,EAAE;IACpG,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACvH,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Lexicon, Sentence } from "../plugin.ts";
|
|
2
|
+
export type DefinitionWords = {
|
|
3
|
+
readonly frames: ReadonlySet<string>;
|
|
4
|
+
readonly topics: ReadonlySet<string>;
|
|
5
|
+
};
|
|
6
|
+
export declare const definitionWordsOf: (lexicon: Lexicon | undefined) => DefinitionWords;
|
|
7
|
+
/** 定義の文が定義する語と、その型(を指す)。 */
|
|
8
|
+
export type Definition = {
|
|
9
|
+
readonly term: string;
|
|
10
|
+
readonly frame: string;
|
|
11
|
+
};
|
|
12
|
+
/** その文が定義する語と型。型の文(を指す、という)でなければ無い。 */
|
|
13
|
+
export declare const definitionOf: (sentence: Sentence, words: DefinitionWords) => Definition | undefined;
|
|
14
|
+
/** どの文も同じ型の定義で、定義する語がみな違う。 */
|
|
15
|
+
export declare const isParallelDefinition: (sentences: readonly Sentence[], words: DefinitionWords) => boolean;
|
|
16
|
+
//# sourceMappingURL=parallel-definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-definition.d.ts","sourceRoot":"","sources":["../../src/detectors/parallel-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAS,MAAM,cAAc,CAAC;AAQ7D,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAK7G,eAAO,MAAM,iBAAiB,GAAI,SAAS,OAAO,GAAG,SAAS,KAAG,eAG/D,CAAC;AAcH,4BAA4B;AAC5B,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAU3E,uCAAuC;AACvC,eAAO,MAAM,YAAY,GAAI,UAAU,QAAQ,EAAE,OAAO,eAAe,KAAG,UAAU,GAAG,SAUtF,CAAC;AAIF,8BAA8B;AAC9B,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS,QAAQ,EAAE,EAAE,OAAO,eAAe,KAAG,OAM7F,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// 並べた定義: どの文も違う語を、同じ型(〜を指します、〜といいます)で定義する。同じ文末が続くのは型をそろえたからで、
|
|
2
|
+
// 書き手の調子の繰り返しではない。
|
|
3
|
+
const TRAILING_POS = new Set(["PUNCT", "SYM"]);
|
|
4
|
+
const TAIL_POS = new Set(["AUX", "PART"]);
|
|
5
|
+
const patternsOf = (lexicon, group) => new Set((lexicon ?? []).filter((entry) => entry.group === group).map((entry) => entry.pattern));
|
|
6
|
+
export const definitionWordsOf = (lexicon) => ({
|
|
7
|
+
frames: patternsOf(lexicon, "frame"),
|
|
8
|
+
topics: patternsOf(lexicon, "topic"),
|
|
9
|
+
});
|
|
10
|
+
const surfacesOf = (tokens) => tokens.map((token) => token.surface).join("");
|
|
11
|
+
/** 述語(文末の助動詞の前の語)の位置。助動詞で終わらない文には無い。 */
|
|
12
|
+
const predicateAt = (tokens) => {
|
|
13
|
+
const last = tokens.findLastIndex((token) => !TRAILING_POS.has(token.pos));
|
|
14
|
+
const head = tokens.slice(0, last + 1).findLastIndex((token) => !TAIL_POS.has(token.pos));
|
|
15
|
+
return head > 0 && head < last ? head : undefined;
|
|
16
|
+
};
|
|
17
|
+
const PARTICLE_POS = "ADP";
|
|
18
|
+
const TERM_POS = new Set(["NOUN", "PROPN"]);
|
|
19
|
+
/** topic の助詞(は)より前。無ければ、述語の前の助詞の直前の名詞(〜を台風といいます の 台風)。 */
|
|
20
|
+
const termOf = (tokens, head, words) => {
|
|
21
|
+
const topic = tokens.slice(0, head - 1).findIndex((token) => token.pos === PARTICLE_POS && words.topics.has(token.surface));
|
|
22
|
+
if (topic > 0)
|
|
23
|
+
return surfacesOf(tokens.slice(0, topic));
|
|
24
|
+
const before = tokens[head - 2];
|
|
25
|
+
return before !== undefined && TERM_POS.has(before.pos) ? before.surface : "";
|
|
26
|
+
};
|
|
27
|
+
/** その文が定義する語と型。型の文(を指す、という)でなければ無い。 */
|
|
28
|
+
export const definitionOf = (sentence, words) => {
|
|
29
|
+
const tokens = (sentence.tokens ?? []).filter((token) => token.surface.trim() !== "");
|
|
30
|
+
const head = predicateAt(tokens);
|
|
31
|
+
const particle = head === undefined ? undefined : tokens[head - 1];
|
|
32
|
+
const predicate = head === undefined ? undefined : tokens[head];
|
|
33
|
+
if (head === undefined || particle === undefined || predicate === undefined)
|
|
34
|
+
return undefined;
|
|
35
|
+
const frame = `${particle.surface}${predicate.lemma ?? predicate.surface}`;
|
|
36
|
+
if (!words.frames.has(frame))
|
|
37
|
+
return undefined;
|
|
38
|
+
const term = termOf(tokens, head, words);
|
|
39
|
+
return term === "" ? undefined : { term, frame };
|
|
40
|
+
};
|
|
41
|
+
const isDefinition = (definition) => definition !== undefined;
|
|
42
|
+
/** どの文も同じ型の定義で、定義する語がみな違う。 */
|
|
43
|
+
export const isParallelDefinition = (sentences, words) => {
|
|
44
|
+
const definitions = sentences.map((sentence) => definitionOf(sentence, words));
|
|
45
|
+
if (!definitions.every(isDefinition))
|
|
46
|
+
return false;
|
|
47
|
+
const terms = new Set(definitions.map((definition) => definition.term));
|
|
48
|
+
const frames = new Set(definitions.map((definition) => definition.frame));
|
|
49
|
+
return terms.size === definitions.length && frames.size === 1;
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=parallel-definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-definition.js","sourceRoot":"","sources":["../../src/detectors/parallel-definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-text.d.ts","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"reference-text.d.ts","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,cAAc,CAAC;AAwCrE,kCAAkC;AAClC,eAAO,MAAM,sBAAsB,EAAE,QAAkE,CAAC;AAExG,gCAAgC;AAChC,eAAO,MAAM,qBAAqB,EAAE,QAA6D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-text.js","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAuB,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,WAAW,EAAuB,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,EAAU,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAExH,6DAA6D;AAC7D,MAAM,OAAO,GAAG,CAAC,GAAkB,EAA8B,EAAE;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAC3B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;QACrH,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;QAC7C,KAAK,EAAE;YACL,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAC1C,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACnD,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"reference-text.js","sourceRoot":"","sources":["../../src/detectors/reference-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAuB,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,WAAW,EAAuB,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,EAAU,EAAY,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAExH,6DAA6D;AAC7D,MAAM,OAAO,GAAG,CAAC,GAAkB,EAA8B,EAAE;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAC3B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;QACrH,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;QAC7C,KAAK,EAAE;YACL,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAC1C,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACnD,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,uBAAuB,CAAC;YACrD,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;SACpD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GACd,CAAC,IAAY,EAAE,QAAqD,EAAY,EAAE,CAClF,CAAC,GAAG,EAAa,EAAE;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI;YACJ,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;SAClD,CAAC,CAAC,CAAC;AACV,CAAC,CAAC;AAEJ,kCAAkC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAa,UAAU,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAAC;AAExG,gCAAgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAa,UAAU,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unfilled-placeholder.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/unfilled-placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"unfilled-placeholder.d.ts","sourceRoot":"","sources":["../../../src/detectors/registry/unfilled-placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,eAAO,MAAM,QAAQ,EAAE,QAA8C,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export const detector =
|
|
1
|
+
import { unfilledPlaceholderOutsideTemplates } from "../unfilled-placeholder.js";
|
|
2
|
+
export const detector = unfilledPlaceholderOutsideTemplates;
|
|
3
3
|
//# sourceMappingURL=unfilled-placeholder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unfilled-placeholder.js","sourceRoot":"","sources":["../../../src/detectors/registry/unfilled-placeholder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"unfilled-placeholder.js","sourceRoot":"","sources":["../../../src/detectors/registry/unfilled-placeholder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAC;AAEjF,MAAM,CAAC,MAAM,QAAQ,GAAa,mCAAmC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vague-density.js","sourceRoot":"","sources":["../../../src/detectors/registry/vague-density.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"vague-density.js","sourceRoot":"","sources":["../../../src/detectors/registry/vague-density.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,QAAQ,GAAa,YAAY,CAAC"}
|
|
@@ -8,17 +8,21 @@ export declare const REQUEST_LEXICONS: {
|
|
|
8
8
|
readonly owner: "request-owner";
|
|
9
9
|
readonly pointer: "request-pointer";
|
|
10
10
|
readonly offer: "request-offer";
|
|
11
|
+
readonly timing: "request-timing";
|
|
12
|
+
readonly invitation: "request-invitation";
|
|
13
|
+
readonly contact: "request-contact";
|
|
11
14
|
};
|
|
12
15
|
type Words = Readonly<Record<keyof typeof REQUEST_LEXICONS, readonly string[]>>;
|
|
13
16
|
export declare const containsAny: (text: string, patterns: readonly string[]) => boolean;
|
|
14
17
|
/**
|
|
15
18
|
* A request for an action: an action word next to a request ending (「確認してください」「please send」), not a condition
|
|
16
19
|
* (「ご不明な点があれば…ください」 is an offer), not an open offer to take the reader's questions (「ご質問はメールでお送りください」),
|
|
17
|
-
*
|
|
20
|
+
* not a pointer to where to read more (「詳細は資料をご確認ください」), not what an invitation is for (「登録をしにお越しください」),
|
|
21
|
+
* and not the way to reach the writer on a contact line (「ファックス番号:… 送信後、ご連絡ください」).
|
|
18
22
|
* The action has to be close to the ending, or a noun like 検討会 or 履修登録 earlier in the sentence would make one.
|
|
19
23
|
*/
|
|
20
24
|
export declare const isRequest: (text: string, words: Words) => boolean;
|
|
21
|
-
/** The request sentences with neither a deadline nor a person in them
|
|
25
|
+
/** The request sentences with neither a deadline nor a person in them, in the sentence after (same paragraph or item), or in a heading above. */
|
|
22
26
|
export declare const ownerlessRequests: (doc: ProseDocument) => Sentence[];
|
|
23
27
|
export declare const requestWithoutDeadline: Detector;
|
|
24
28
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-owner.d.ts","sourceRoot":"","sources":["../../src/detectors/request-owner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoB,aAAa,
|
|
1
|
+
{"version":3,"file":"request-owner.d.ts","sourceRoot":"","sources":["../../src/detectors/request-owner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoB,aAAa,EAAW,QAAQ,EAAuB,MAAM,cAAc,CAAC;AAMtH,oFAAoF;AACpF,eAAO,MAAM,gBAAgB;;;;;;;;;;;CAWnB,CAAC;AAEX,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,OAAO,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAuChF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,UAAU,SAAS,MAAM,EAAE,KAAG,OAA8C,CAAC;AAwBvH;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,KAAK,KAAG,OAUtD,CAAC;AAoFF,iJAAiJ;AACjJ,eAAO,MAAM,iBAAiB,GAAI,KAAK,aAAa,KAAG,QAAQ,EAS9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAQhC,CAAC"}
|
|
@@ -11,6 +11,9 @@ export const REQUEST_LEXICONS = {
|
|
|
11
11
|
owner: "request-owner",
|
|
12
12
|
pointer: "request-pointer",
|
|
13
13
|
offer: "request-offer",
|
|
14
|
+
timing: "request-timing",
|
|
15
|
+
invitation: "request-invitation",
|
|
16
|
+
contact: "request-contact",
|
|
14
17
|
};
|
|
15
18
|
/** A clock time (14:00, 14時, 2pm) says when as much as a date does; a duration (3時間) does not. */
|
|
16
19
|
const CLOCK = /\d{1,2}\s*(?:[::]\d{2}|時(?!間)|\s?[ap]\.?m\.?(?![a-z]))/iu;
|
|
@@ -23,6 +26,9 @@ const wordsOf = (doc) => ({
|
|
|
23
26
|
owner: patternsOf(doc.lexicons[REQUEST_LEXICONS.owner]),
|
|
24
27
|
pointer: patternsOf(doc.lexicons[REQUEST_LEXICONS.pointer]),
|
|
25
28
|
offer: patternsOf(doc.lexicons[REQUEST_LEXICONS.offer]),
|
|
29
|
+
timing: patternsOf(doc.lexicons[REQUEST_LEXICONS.timing]),
|
|
30
|
+
invitation: patternsOf(doc.lexicons[REQUEST_LEXICONS.invitation]),
|
|
31
|
+
contact: patternsOf(doc.lexicons[REQUEST_LEXICONS.contact]),
|
|
26
32
|
});
|
|
27
33
|
/** How far apart, in characters, the action word and the request ending may be: the action must be what is requested. */
|
|
28
34
|
const ACTION_REACH = 12;
|
|
@@ -39,16 +45,36 @@ const placesOf = (text, patterns) => {
|
|
|
39
45
|
};
|
|
40
46
|
export const containsAny = (text, patterns) => placesOf(text, patterns).length > 0;
|
|
41
47
|
const gapBetween = (left, right) => Math.max(left.start - right.end, right.start - left.end, 0);
|
|
48
|
+
/** An invitation verb right at the request ending (「ご相談ください」 "please come"): the reader may come, nothing is to be finished. */
|
|
49
|
+
const INVITATION_REACH = 1;
|
|
50
|
+
/** A comma or semicolon between an action and the invitation: the action is a request of its own (「申請書を提出し、会場へお越しください」). */
|
|
51
|
+
const CLAUSE_BREAK = /[、,,;;]/u;
|
|
52
|
+
/** A label and a colon (「電話:」 "Fax:"): a contact line, whose request is how to reach the writer. */
|
|
53
|
+
const LABEL_COLON = /^\s*[::]/u;
|
|
54
|
+
/** Whether the action is what the invitation is for (「登録をしにお越しください」「入力用にご使用ください」), not a request beside it. */
|
|
55
|
+
const invitedTo = (comparable, action, invitation) => {
|
|
56
|
+
const [left, right] = action.start <= invitation.start ? [action, invitation] : [invitation, action];
|
|
57
|
+
return !CLAUSE_BREAK.test(comparable.slice(left.end, right.start));
|
|
58
|
+
};
|
|
59
|
+
const holdsContactLine = (text, words) => {
|
|
60
|
+
const comparable = comparableWords(text);
|
|
61
|
+
return placesOf(comparable, words.contact).some((label) => LABEL_COLON.test(comparable.slice(label.end)));
|
|
62
|
+
};
|
|
42
63
|
/**
|
|
43
64
|
* A request for an action: an action word next to a request ending (「確認してください」「please send」), not a condition
|
|
44
65
|
* (「ご不明な点があれば…ください」 is an offer), not an open offer to take the reader's questions (「ご質問はメールでお送りください」),
|
|
45
|
-
*
|
|
66
|
+
* not a pointer to where to read more (「詳細は資料をご確認ください」), not what an invitation is for (「登録をしにお越しください」),
|
|
67
|
+
* and not the way to reach the writer on a contact line (「ファックス番号:… 送信後、ご連絡ください」).
|
|
46
68
|
* The action has to be close to the ending, or a noun like 検討会 or 履修登録 earlier in the sentence would make one.
|
|
47
69
|
*/
|
|
48
70
|
export const isRequest = (text, words) => {
|
|
71
|
+
const comparable = comparableWords(text);
|
|
49
72
|
const endings = placesOf(text, words.ending);
|
|
50
|
-
const
|
|
51
|
-
|
|
73
|
+
const invitations = placesOf(text, words.invitation).filter((invitation) => endings.some((ending) => gapBetween(invitation, ending) <= INVITATION_REACH));
|
|
74
|
+
const asked = placesOf(text, words.action).some((action) => endings.some((ending) => gapBetween(action, ending) <= ACTION_REACH) && !invitations.some((invitation) => invitedTo(comparable, action, invitation)));
|
|
75
|
+
if (!asked || holdsContactLine(text, words))
|
|
76
|
+
return false;
|
|
77
|
+
return ![words.condition, words.offer, words.pointer].some((patterns) => containsAny(text, patterns));
|
|
52
78
|
};
|
|
53
79
|
const NAMED = new Set(["PROPN"]);
|
|
54
80
|
/** A proper noun in the request itself (「Ito, please share」) names who; one in the next sentence may be a product or a place. */
|
|
@@ -81,17 +107,39 @@ const holdsWord = (sentence, patterns) => {
|
|
|
81
107
|
const bounds = wordBounds(comparable, sentence);
|
|
82
108
|
return placesOf(comparable, patterns).some((place) => bounds === undefined || (bounds.starts.has(place.start) && bounds.ends.has(place.end)));
|
|
83
109
|
};
|
|
84
|
-
/**
|
|
110
|
+
/**
|
|
111
|
+
* Whether a sentence says when or who (a role). The request itself may also say when relative to something else
|
|
112
|
+
* (「提出いただく前に」 "before you submit") or name the person; the next sentence's timing or name may be about something else.
|
|
113
|
+
*/
|
|
85
114
|
const saysWhenOrWho = (sentence, words, dates, isRequestItself) => datedWithin(dates, sentence.span) ||
|
|
86
115
|
CLOCK.test(proseText(sentence)) ||
|
|
87
116
|
holdsWord(sentence, words.deadline) ||
|
|
88
117
|
holdsWord(sentence, words.owner) ||
|
|
89
|
-
(isRequestItself && namesSomeone(sentence));
|
|
118
|
+
(isRequestItself && (holdsWord(sentence, words.timing) || namesSomeone(sentence)));
|
|
90
119
|
/** A paragraph break or a new list item between two sentences: the second does not continue the first. */
|
|
91
120
|
const BREAK = /\n[^\S\n]*\n|\n[^\S\n]*(?:[-*+]|\d+[.)])[^\S\n]/u;
|
|
92
121
|
const continues = (source, sentence, next) => next !== undefined && !BREAK.test(source.slice(sentence.span.end, next.span.start));
|
|
93
122
|
const dateSpans = (tree) => tree === undefined ? [] : inDocumentOrder(tree).flatMap((node) => (node.kind === "date" ? [node.span] : []));
|
|
94
|
-
/**
|
|
123
|
+
/** A section's heading, read as a sentence so the deadline words match it the same way. */
|
|
124
|
+
const headingOf = (section) => ({
|
|
125
|
+
span: section.span,
|
|
126
|
+
text: section.heading,
|
|
127
|
+
...(section.headingTokens === undefined ? {} : { tokens: section.headingTokens }),
|
|
128
|
+
});
|
|
129
|
+
/** The headings an offset sits under: its own section's, then each enclosing one's up to the title. */
|
|
130
|
+
const enclosingHeadings = (sections, offset) => {
|
|
131
|
+
const own = sections.findLastIndex((section) => section.span.start <= offset);
|
|
132
|
+
const chain = sections
|
|
133
|
+
.slice(0, own + 1)
|
|
134
|
+
.reduceRight((walk, section) => (section.depth < walk.depth ? { depth: section.depth, found: [...walk.found, section] } : walk), { depth: Number.POSITIVE_INFINITY, found: [] }).found;
|
|
135
|
+
return chain.filter((section) => section.depth > 0 && section.heading.trim() !== "").map(headingOf);
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* A notice whose heading names its deadline (「見積提出期限:10月26日」「【随時受付】」): every request under it inherits it.
|
|
139
|
+
* A date alone in a heading is more often the day the notice was issued or the event it announces, so it is not enough.
|
|
140
|
+
*/
|
|
141
|
+
const underDeadlineHeading = (sections, sentence, words) => enclosingHeadings(sections, sentence.span.start).some((heading) => holdsWord(heading, words.deadline));
|
|
142
|
+
/** The request sentences with neither a deadline nor a person in them, in the sentence after (same paragraph or item), or in a heading above. */
|
|
95
143
|
export const ownerlessRequests = (doc) => {
|
|
96
144
|
const words = wordsOf(doc);
|
|
97
145
|
const dates = dateSpans(doc.structure);
|
|
@@ -99,7 +147,9 @@ export const ownerlessRequests = (doc) => {
|
|
|
99
147
|
if (!isRequest(proseText(sentence), words) || saysWhenOrWho(sentence, words, dates, true))
|
|
100
148
|
return false;
|
|
101
149
|
const next = doc.sentences[index + 1];
|
|
102
|
-
|
|
150
|
+
if (continues(doc.source, sentence, next) && saysWhenOrWho(next, words, dates, false))
|
|
151
|
+
return false;
|
|
152
|
+
return !underDeadlineHeading(doc.sections, sentence, words);
|
|
103
153
|
});
|
|
104
154
|
};
|
|
105
155
|
export const requestWithoutDeadline = (doc) => ownerlessRequests(doc).map((sentence) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-owner.js","sourceRoot":"","sources":["../../src/detectors/request-owner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,oFAAoF;AACpF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,mBAAmB;IAC9B,QAAQ,EAAE,kBAAkB;IAC5B,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE,iBAAiB;IAC1B,KAAK,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"request-owner.js","sourceRoot":"","sources":["../../src/detectors/request-owner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-smell.d.ts","sourceRoot":"","sources":["../../src/detectors/requirement-smell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAW,OAAO,EAA+B,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"requirement-smell.d.ts","sourceRoot":"","sources":["../../src/detectors/requirement-smell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAW,OAAO,EAA+B,QAAQ,EAAE,MAAM,cAAc,CAAC;AA8BtG,eAAO,MAAM,aAAa,GAAI,UAAU,QAAQ,EAAE,SAAS,OAAO,EAAE,YAAY,OAAO,KAAG,OACwB,CAAC;AA6CnH,eAAO,MAAM,gBAAgB,EAAE,QAQ9B,CAAC"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { entryCloses, entryIn, entryRanges } from "./lexicon-match.js";
|
|
2
2
|
import { openEndAt, openEndNames } from "./open-end-names.js";
|
|
3
|
+
import { statesConcrete } from "./vague-deadline.js";
|
|
3
4
|
// Requirements smells (Femmer et al. 2017; Berry et al. 2003; ISO/IEC/IEEE 29148): a loophole, an open-ended list and
|
|
4
5
|
// "and/or", in a sentence that states a requirement. What makes a sentence a requirement, and each smell's words, come
|
|
5
6
|
// from the language's lexicons; this file knows neither language.
|
|
6
7
|
const OPEN_END = "requirement-open-end";
|
|
8
|
+
const LOOPHOLE = "requirement-loophole";
|
|
9
|
+
const TIME = "time";
|
|
10
|
+
const CONCRETE_DEADLINE = "concrete-deadline";
|
|
7
11
|
/** Each smell: the lexicon of its words, and the finding's variant (the rule's messages). */
|
|
8
12
|
const SMELLS = [
|
|
9
|
-
{ lexicon:
|
|
13
|
+
{ lexicon: LOOPHOLE, variant: "loophole" },
|
|
10
14
|
{ lexicon: OPEN_END, variant: "open-end" },
|
|
11
15
|
{ lexicon: "requirement-either", variant: "either" },
|
|
12
16
|
];
|
|
@@ -32,9 +36,13 @@ const findingOf = (sentence, entry, variant, offset) => ({
|
|
|
32
36
|
variant,
|
|
33
37
|
values: { matched: entry.pattern, offset },
|
|
34
38
|
});
|
|
39
|
+
/** A loophole about when (group: time) that the sentence bounds with a stated limit ("as soon as possible, but no later than two days after"). */
|
|
40
|
+
const boundedInTime = (doc, sentence, entry, lexicon) => lexicon === LOOPHOLE &&
|
|
41
|
+
entry.group === TIME &&
|
|
42
|
+
statesConcrete({ start: sentence.span.start, text: sentence.text }, (doc.lexicons[CONCRETE_DEADLINE] ?? []).map((limit) => limit.pattern));
|
|
35
43
|
/** Where the word stands as a smell. An open-end word inside a name the document gives (業務執行取締役等) is none; without tokens it cannot be told apart. */
|
|
36
44
|
const smellAt = (doc, sentence, entry, lexicon, names) => {
|
|
37
|
-
if (!entryIn(sentence, entry))
|
|
45
|
+
if (!entryIn(sentence, entry) || boundedInTime(doc, sentence, entry, lexicon))
|
|
38
46
|
return undefined;
|
|
39
47
|
const tokenized = sentence.tokens !== undefined && (entry.tokens?.length ?? 0) > 0;
|
|
40
48
|
return lexicon === OPEN_END && tokenized ? openEndAt(doc, sentence, entry, names()) : offsetOf(sentence, entry);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-smell.js","sourceRoot":"","sources":["../../src/detectors/requirement-smell.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAqB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"requirement-smell.js","sourceRoot":"","sources":["../../src/detectors/requirement-smell.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentence-length.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-length.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAkD,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"sentence-length.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-length.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAkD,MAAM,cAAc,CAAC;AAkB7F,eAAO,MAAM,cAAc,EAAE,QAc5B,CAAC"}
|
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
import { lengthOf, proseText } from "../measure.js";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { pageMarkerPattern, pageMarkerSize } from "./page-marker.js";
|
|
3
|
+
/**
|
|
4
|
+
* 文書と違う言語の文(和文の中の英文)は、その言語の単位と上限で測る。rule がその言語の段を持たなければ文書のもので。
|
|
5
|
+
* 印刷版のページの印(( printed page 52044))は文の言葉ではないので数えない。
|
|
6
|
+
*/
|
|
7
|
+
const measureOf = (sentence, unit, options, markers) => {
|
|
4
8
|
const embedded = sentence.embeddedLanguage;
|
|
5
9
|
const limit = embedded === undefined ? undefined : options.embeddedLimits?.[embedded.id];
|
|
6
|
-
if (embedded === undefined || limit === undefined)
|
|
7
|
-
return { size: lengthOf(sentence, unit), limit: options.limit };
|
|
10
|
+
if (embedded === undefined || limit === undefined) {
|
|
11
|
+
return { size: lengthOf(sentence, unit) - pageMarkerSize(proseText(sentence), markers, unit), limit: options.limit };
|
|
12
|
+
}
|
|
8
13
|
return { size: lengthOf(sentence, embedded.lengthUnit), limit, variant: `embedded-${embedded.id}` };
|
|
9
14
|
};
|
|
10
|
-
export const sentenceLength = (doc, options) =>
|
|
11
|
-
.map((
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
15
|
+
export const sentenceLength = (doc, options) => {
|
|
16
|
+
const markers = pageMarkerPattern((options.lexicon ?? []).map((entry) => entry.pattern));
|
|
17
|
+
return doc.sentences
|
|
18
|
+
.map((sentence) => ({ sentence, measure: measureOf(sentence, doc.lengthUnit, options, markers) }))
|
|
19
|
+
.filter(({ measure }) => measure.size > measure.limit)
|
|
20
|
+
.map(({ sentence, measure }) => ({
|
|
21
|
+
rule: "max-sentence-length",
|
|
22
|
+
severity: "warning",
|
|
23
|
+
line: 0,
|
|
24
|
+
column: 0,
|
|
25
|
+
quote: proseText(sentence),
|
|
26
|
+
values: { count: measure.size, limit: measure.limit, offset: sentence.span.start },
|
|
27
|
+
...(measure.variant === undefined ? {} : { variant: measure.variant }),
|
|
28
|
+
}));
|
|
29
|
+
};
|
|
22
30
|
//# sourceMappingURL=sentence-length.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentence-length.js","sourceRoot":"","sources":["../../src/detectors/sentence-length.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"sentence-length.js","sourceRoot":"","sources":["../../src/detectors/sentence-length.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIrE;;;GAGG;AACH,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAE,IAAgB,EAAE,OAAwB,EAAE,OAA2B,EAAW,EAAE;IACzH,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAC3C,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzF,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IACvH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;AACtG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACzF,OAAO,GAAG,CAAC,SAAS;SACjB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;SACjG,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;SACrD,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC;QAC1B,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;QAClF,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;KACvE,CAAC,CAAC,CAAC;AACR,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentence-rhythm.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-rhythm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"sentence-rhythm.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-rhythm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAoC,MAAM,cAAc,CAAC;AAe/E,eAAO,MAAM,cAAc,EAAE,QAgB5B,CAAC"}
|
|
@@ -8,8 +8,11 @@ const coefficientOfVariation = (sizes) => {
|
|
|
8
8
|
const variance = sizes.reduce((sum, size) => sum + (size - mean) ** 2, 0) / sizes.length;
|
|
9
9
|
return Math.sqrt(variance) / mean;
|
|
10
10
|
};
|
|
11
|
+
/** 箇条書きの項目は揃えて書くのが正しい形なので、地の文の文だけを測る。 */
|
|
12
|
+
const proseSentences = (doc) => doc.paragraphs.flatMap((paragraph) => paragraph.sentences);
|
|
11
13
|
export const sentenceRhythm = (doc, options) => {
|
|
12
|
-
const
|
|
14
|
+
const sentences = proseSentences(doc);
|
|
15
|
+
const sizes = sentences.map((sentence) => charLength(sentence));
|
|
13
16
|
if (sizes.length < MIN_SENTENCES)
|
|
14
17
|
return [];
|
|
15
18
|
const spread = Math.round(coefficientOfVariation(sizes) * 100);
|
|
@@ -21,8 +24,8 @@ export const sentenceRhythm = (doc, options) => {
|
|
|
21
24
|
severity: "warning",
|
|
22
25
|
line: 0,
|
|
23
26
|
column: 0,
|
|
24
|
-
quote:
|
|
25
|
-
values: { count: spread, limit: options.limit, offset:
|
|
27
|
+
quote: sentences[0] === undefined ? "" : proseText(sentences[0]),
|
|
28
|
+
values: { count: spread, limit: options.limit, offset: sentences[0]?.span.start ?? 0 },
|
|
26
29
|
},
|
|
27
30
|
];
|
|
28
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentence-rhythm.js","sourceRoot":"","sources":["../../src/detectors/sentence-rhythm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGtD,uCAAuC;AACvC,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,sBAAsB,GAAG,CAAC,KAAwB,EAAU,EAAE;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvE,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACzF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,
|
|
1
|
+
{"version":3,"file":"sentence-rhythm.js","sourceRoot":"","sources":["../../src/detectors/sentence-rhythm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGtD,uCAAuC;AACvC,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,sBAAsB,GAAG,CAAC,KAAwB,EAAU,EAAE;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvE,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACzF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC,CAAC;AAEF,yCAAyC;AACzC,MAAM,cAAc,GAAG,CAAC,GAAkB,EAAuB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAE/H,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/D,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO;QACL;YACE,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;SACvF;KACF,CAAC;AACJ,CAAC,CAAC"}
|