chaffjs 0.10.0 → 0.12.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.
Files changed (198) hide show
  1. package/dist/cli-text.d.ts.map +1 -1
  2. package/dist/cli-text.js +2 -0
  3. package/dist/cli-text.js.map +1 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +5 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/date-stamp.d.ts +14 -0
  8. package/dist/date-stamp.d.ts.map +1 -0
  9. package/dist/date-stamp.js +40 -0
  10. package/dist/date-stamp.js.map +1 -0
  11. package/dist/declared-lists.d.ts +4 -0
  12. package/dist/declared-lists.d.ts.map +1 -0
  13. package/dist/declared-lists.js +3 -0
  14. package/dist/declared-lists.js.map +1 -0
  15. package/dist/detectors/acronym-context.d.ts +13 -0
  16. package/dist/detectors/acronym-context.d.ts.map +1 -0
  17. package/dist/detectors/acronym-context.js +42 -0
  18. package/dist/detectors/acronym-context.js.map +1 -0
  19. package/dist/detectors/acronym-expansion.d.ts +9 -0
  20. package/dist/detectors/acronym-expansion.d.ts.map +1 -0
  21. package/dist/detectors/acronym-expansion.js +67 -0
  22. package/dist/detectors/acronym-expansion.js.map +1 -0
  23. package/dist/detectors/char-shape.d.ts.map +1 -1
  24. package/dist/detectors/char-shape.js +34 -2
  25. package/dist/detectors/char-shape.js.map +1 -1
  26. package/dist/detectors/doubled-word.d.ts +27 -0
  27. package/dist/detectors/doubled-word.d.ts.map +1 -0
  28. package/dist/detectors/doubled-word.js +94 -0
  29. package/dist/detectors/doubled-word.js.map +1 -0
  30. package/dist/detectors/en-shape.d.ts.map +1 -1
  31. package/dist/detectors/en-shape.js +110 -9
  32. package/dist/detectors/en-shape.js.map +1 -1
  33. package/dist/detectors/gram-place.d.ts +14 -0
  34. package/dist/detectors/gram-place.d.ts.map +1 -0
  35. package/dist/detectors/gram-place.js +39 -0
  36. package/dist/detectors/gram-place.js.map +1 -0
  37. package/dist/detectors/heading-echo.d.ts.map +1 -1
  38. package/dist/detectors/heading-echo.js +22 -12
  39. package/dist/detectors/heading-echo.js.map +1 -1
  40. package/dist/detectors/index.d.ts.map +1 -1
  41. package/dist/detectors/index.js +2 -0
  42. package/dist/detectors/index.js.map +1 -1
  43. package/dist/detectors/lead-in.d.ts +8 -0
  44. package/dist/detectors/lead-in.d.ts.map +1 -0
  45. package/dist/detectors/lead-in.js +13 -0
  46. package/dist/detectors/lead-in.js.map +1 -0
  47. package/dist/detectors/lexicon-match.d.ts +15 -0
  48. package/dist/detectors/lexicon-match.d.ts.map +1 -0
  49. package/dist/detectors/lexicon-match.js +48 -0
  50. package/dist/detectors/lexicon-match.js.map +1 -0
  51. package/dist/detectors/lexicon.d.ts +5 -0
  52. package/dist/detectors/lexicon.d.ts.map +1 -1
  53. package/dist/detectors/lexicon.js +32 -22
  54. package/dist/detectors/lexicon.js.map +1 -1
  55. package/dist/detectors/phrase-match.d.ts.map +1 -1
  56. package/dist/detectors/phrase-match.js +7 -6
  57. package/dist/detectors/phrase-match.js.map +1 -1
  58. package/dist/detectors/repeated-head.d.ts.map +1 -1
  59. package/dist/detectors/repeated-head.js +15 -5
  60. package/dist/detectors/repeated-head.js.map +1 -1
  61. package/dist/detectors/sentence-ending.d.ts.map +1 -1
  62. package/dist/detectors/sentence-ending.js +7 -3
  63. package/dist/detectors/sentence-ending.js.map +1 -1
  64. package/dist/detectors/signals.d.ts.map +1 -1
  65. package/dist/detectors/signals.js +97 -59
  66. package/dist/detectors/signals.js.map +1 -1
  67. package/dist/detectors/structure.d.ts.map +1 -1
  68. package/dist/detectors/structure.js +14 -1
  69. package/dist/detectors/structure.js.map +1 -1
  70. package/dist/detectors/superlative-scope.d.ts +16 -0
  71. package/dist/detectors/superlative-scope.d.ts.map +1 -0
  72. package/dist/detectors/superlative-scope.js +40 -0
  73. package/dist/detectors/superlative-scope.js.map +1 -0
  74. package/dist/document.d.ts.map +1 -1
  75. package/dist/document.js +38 -19
  76. package/dist/document.js.map +1 -1
  77. package/dist/eval.d.ts.map +1 -1
  78. package/dist/eval.js +3 -2
  79. package/dist/eval.js.map +1 -1
  80. package/dist/heading-title.d.ts +6 -0
  81. package/dist/heading-title.d.ts.map +1 -0
  82. package/dist/heading-title.js +8 -0
  83. package/dist/heading-title.js.map +1 -0
  84. package/dist/in-page-nav.d.ts +19 -0
  85. package/dist/in-page-nav.d.ts.map +1 -0
  86. package/dist/in-page-nav.js +44 -0
  87. package/dist/in-page-nav.js.map +1 -0
  88. package/dist/lexicon-tokens.d.ts +4 -0
  89. package/dist/lexicon-tokens.d.ts.map +1 -0
  90. package/dist/lexicon-tokens.js +23 -0
  91. package/dist/lexicon-tokens.js.map +1 -0
  92. package/dist/orthography.d.ts +1 -0
  93. package/dist/orthography.d.ts.map +1 -1
  94. package/dist/orthography.js +4 -3
  95. package/dist/orthography.js.map +1 -1
  96. package/dist/page-furniture.d.ts +10 -0
  97. package/dist/page-furniture.d.ts.map +1 -0
  98. package/dist/page-furniture.js +35 -0
  99. package/dist/page-furniture.js.map +1 -0
  100. package/dist/plugin.d.ts +8 -0
  101. package/dist/plugin.d.ts.map +1 -1
  102. package/dist/render/compact.d.ts.map +1 -1
  103. package/dist/render/compact.js +11 -2
  104. package/dist/render/compact.js.map +1 -1
  105. package/dist/rule-load.d.ts.map +1 -1
  106. package/dist/rule-load.js +2 -0
  107. package/dist/rule-load.js.map +1 -1
  108. package/dist/run.d.ts.map +1 -1
  109. package/dist/run.js +10 -7
  110. package/dist/run.js.map +1 -1
  111. package/dist/sentence-shape.d.ts +6 -0
  112. package/dist/sentence-shape.d.ts.map +1 -1
  113. package/dist/sentence-shape.js +15 -0
  114. package/dist/sentence-shape.js.map +1 -1
  115. package/dist/structure/bare-numbers.d.ts +14 -0
  116. package/dist/structure/bare-numbers.d.ts.map +1 -0
  117. package/dist/structure/bare-numbers.js +53 -0
  118. package/dist/structure/bare-numbers.js.map +1 -0
  119. package/dist/structure/build.d.ts +2 -0
  120. package/dist/structure/build.d.ts.map +1 -1
  121. package/dist/structure/build.js +6 -3
  122. package/dist/structure/build.js.map +1 -1
  123. package/dist/structure/issues.d.ts.map +1 -1
  124. package/dist/structure/issues.js +11 -2
  125. package/dist/structure/issues.js.map +1 -1
  126. package/dist/structure/of.d.ts.map +1 -1
  127. package/dist/structure/of.js +4 -2
  128. package/dist/structure/of.js.map +1 -1
  129. package/dist/structure/total.d.ts +1 -0
  130. package/dist/structure/total.d.ts.map +1 -1
  131. package/dist/structure/total.js +37 -13
  132. package/dist/structure/total.js.map +1 -1
  133. package/dist/structure/universal.d.ts +2 -2
  134. package/dist/structure/universal.d.ts.map +1 -1
  135. package/dist/structure/universal.js +13 -4
  136. package/dist/structure/universal.js.map +1 -1
  137. package/dist/version.d.ts +5 -0
  138. package/dist/version.d.ts.map +1 -1
  139. package/dist/version.js +17 -2
  140. package/dist/version.js.map +1 -1
  141. package/package.json +3 -3
  142. package/rules/ai-tell.yaml +1 -0
  143. package/rules/closing-cliche.yaml +1 -0
  144. package/rules/concrete-evidence-density.yaml +2 -0
  145. package/rules/cushion-phrase-density.yaml +1 -0
  146. package/rules/double-keigo.yaml +1 -0
  147. package/rules/doubled-word.yaml +27 -0
  148. package/rules/empty-intensifier.yaml +1 -0
  149. package/rules/excessive-hedging.yaml +1 -0
  150. package/rules/hiragana-fukushi.yaml +1 -0
  151. package/rules/latin-spacing.yaml +2 -2
  152. package/rules/max-kanji-continuous.yaml +2 -0
  153. package/rules/ngram-repetition.yaml +2 -0
  154. package/rules/padded-intro.yaml +1 -0
  155. package/rules/repeated-conjunction.yaml +1 -0
  156. package/rules/sasete-itadaku.yaml +1 -0
  157. package/rules/undefined-acronym.yaml +1 -0
  158. package/rules/unqualified-superlative.yaml +2 -0
  159. package/src/cli-text.ts +2 -0
  160. package/src/cli.ts +5 -1
  161. package/src/date-stamp.ts +65 -0
  162. package/src/declared-lists.ts +5 -0
  163. package/src/detectors/acronym-context.ts +53 -0
  164. package/src/detectors/acronym-expansion.ts +81 -0
  165. package/src/detectors/char-shape.ts +38 -3
  166. package/src/detectors/doubled-word.ts +128 -0
  167. package/src/detectors/en-shape.ts +138 -7
  168. package/src/detectors/gram-place.ts +41 -0
  169. package/src/detectors/heading-echo.ts +13 -3
  170. package/src/detectors/index.ts +2 -0
  171. package/src/detectors/lead-in.ts +14 -0
  172. package/src/detectors/lexicon-match.ts +54 -0
  173. package/src/detectors/lexicon.ts +44 -25
  174. package/src/detectors/phrase-match.ts +8 -7
  175. package/src/detectors/repeated-head.ts +21 -7
  176. package/src/detectors/sentence-ending.ts +7 -3
  177. package/src/detectors/signals.ts +122 -60
  178. package/src/detectors/structure.ts +21 -2
  179. package/src/detectors/superlative-scope.ts +66 -0
  180. package/src/document.ts +43 -19
  181. package/src/eval.ts +2 -1
  182. package/src/heading-title.ts +8 -0
  183. package/src/in-page-nav.ts +67 -0
  184. package/src/lexicon-tokens.ts +28 -0
  185. package/src/orthography.ts +4 -3
  186. package/src/page-furniture.ts +45 -0
  187. package/src/plugin.ts +13 -1
  188. package/src/render/compact.ts +12 -2
  189. package/src/rule-load.ts +2 -0
  190. package/src/run.ts +11 -7
  191. package/src/sentence-shape.ts +16 -0
  192. package/src/structure/bare-numbers.ts +78 -0
  193. package/src/structure/build.ts +9 -3
  194. package/src/structure/issues.ts +16 -2
  195. package/src/structure/of.ts +4 -2
  196. package/src/structure/total.ts +45 -19
  197. package/src/structure/universal.ts +14 -3
  198. package/src/version.ts +21 -3
@@ -1,20 +1,17 @@
1
1
  import { joinWords } from "./word-list.js";
2
- import { proseText } from "../measure.js";
3
2
  import { wordsOf } from "./structure.js";
3
+ import { entryIn, entryOpens, entryRanges } from "./lexicon-match.js";
4
+ import { scoped, scopeMarkersOf } from "./superlative-scope.js";
4
5
  const PER = 1000;
5
6
  /** 密度を見る rule は短い文書を測らない。単位は言語で違うので床も分ける。 */
6
7
  const FLOOR = { word: 200, char: 500 };
7
- const hitsFor = (doc, patterns) => doc.sentences.flatMap((sentence) => {
8
- const text = sentence.text.toLowerCase();
9
- return patterns.filter((pattern) => text.includes(pattern.toLowerCase())).map((matched) => ({ sentence, matched }));
10
- });
8
+ const hitsFor = (doc, lexicon) => doc.sentences.flatMap((sentence) => lexicon.filter((entry) => entryIn(sentence, entry)).map((entry) => ({ sentence, matched: entry.pattern })));
11
9
  /**
12
10
  * 単位長あたりの出現率。件数で数えると長い文書ほど当たる(bold-density と同じ)。
13
11
  * rule の id は呼び出し側が持つ。detector は「密度が閾値を超えたか」しか知らない。
14
12
  */
15
13
  const densityRule = (rule) => (doc, options) => {
16
- const patterns = (options.lexicon ?? []).map((entry) => entry.pattern);
17
- const hits = hitsFor(doc, patterns);
14
+ const hits = hitsFor(doc, options.lexicon ?? []);
18
15
  const length = wordsOf(doc);
19
16
  const rate = length === 0 ? 0 : Math.round((hits.length / length) * PER);
20
17
  const first = hits[0];
@@ -31,14 +28,29 @@ const densityRule = (rule) => (doc, options) => {
31
28
  };
32
29
  export const hedgingDensity = densityRule("excessive-hedging");
33
30
  export const cushionDensity = densityRule("cushion-phrase-density");
31
+ /** 数字は語ではないので言語を問わない。数があれば測った結果を言っている。品詞の数(NUM)は "the best one" の one まで含むので使わない。 */
32
+ const DIGIT = /\d/u;
33
+ const qualifiersOf = (doc) => ({
34
+ comparison: doc.lexicons["comparison-marker"] ?? [],
35
+ scope: scopeMarkersOf(doc.lexicons["superlative-scope"] ?? []),
36
+ });
37
+ /** どの出現も範囲を持つときだけ。1 つでも範囲の無い出現があれば、その文には限定の無い最上級がある。 */
38
+ const everyScoped = (sentence, entry, scope) => {
39
+ const ranges = entryRanges(sentence, entry);
40
+ return ranges.length > 0 && ranges.every((range) => scoped(sentence.tokens ?? [], range, scope));
41
+ };
42
+ const qualified = (sentence, entry, qualifiers) => DIGIT.test(sentence.text) || qualifiers.comparison.some((marker) => entryIn(sentence, marker)) || everyScoped(sentence, entry, qualifiers.scope);
43
+ const bareHits = (doc, lexicon) => {
44
+ const qualifiers = qualifiersOf(doc);
45
+ return doc.sentences.flatMap((sentence) => lexicon.filter((entry) => entryIn(sentence, entry) && !qualified(sentence, entry, qualifiers)).map((entry) => ({ sentence, matched: entry.pattern })));
46
+ };
34
47
  /**
35
48
  * 限定のない最上級。「最も速い」だけでは、何と比べて最もなのかが無い。
36
- * 同じ文に比較対象や条件があれば、それは主張であって誇張ではない。
49
+ * 同じ文に比較対象・条件・範囲(日本で最も、the best in the world)があれば、それは主張であって誇張ではない。
50
+ * 比較と範囲を言う語は言語パッケージの語彙表が持つ。
37
51
  */
38
- const QUALIFIER = /\d|より|に比べ|のうち|among|than|compared|based on|according/iu;
39
52
  export const unqualifiedSuperlative = (doc, options) => {
40
- const patterns = (options.lexicon ?? []).map((entry) => entry.pattern);
41
- const bare = hitsFor(doc, patterns).filter((hit) => !QUALIFIER.test(hit.sentence.text));
53
+ const bare = bareHits(doc, options.lexicon ?? []);
42
54
  if (bare.length < options.limit)
43
55
  return [];
44
56
  return bare.map((hit) => ({
@@ -50,17 +62,16 @@ export const unqualifiedSuperlative = (doc, options) => {
50
62
  values: { matched: hit.matched, count: bare.length, limit: options.limit, offset: hit.sentence.span.start },
51
63
  }));
52
64
  };
53
- const openerOf = (doc, patterns) => doc.paragraphs.map((paragraph) => {
54
- const head = paragraph.sentences[0]?.text.trim().toLowerCase() ?? "";
55
- return patterns.find((pattern) => head.startsWith(pattern.toLowerCase()));
65
+ const openerOf = (doc, lexicon) => doc.paragraphs.map((paragraph) => {
66
+ const head = paragraph.sentences[0];
67
+ return head === undefined ? undefined : lexicon.find((entry) => entryOpens(head, entry))?.pattern;
56
68
  });
57
69
  /**
58
70
  * 段落が同じ接続詞で始まり続ける。1 つなら流れを作るが、続くとどの段落も
59
71
  * 前の段落の付け足しに見えて、話がどこへ向かっているのか分からなくなる。
60
72
  */
61
73
  export const repeatedConjunction = (doc, options) => {
62
- const patterns = (options.lexicon ?? []).map((entry) => entry.pattern);
63
- const openers = openerOf(doc, patterns);
74
+ const openers = openerOf(doc, options.lexicon ?? []);
64
75
  const runs = openers.reduce((acc, opener, index) => {
65
76
  if (opener === undefined)
66
77
  return { runs: [...acc.runs, acc.current], current: [] };
@@ -89,11 +100,10 @@ export const repeatedConjunction = (doc, options) => {
89
100
  * 単独で断じない。§20.2 の複合シグナルの入口で、これだけで「AI が書いた」とは言わない。
90
101
  */
91
102
  export const aiTell = (doc, options) => {
92
- const weights = new Map((options.lexicon ?? []).map((entry) => [entry.pattern.toLowerCase(), entry.weight ?? 1]));
93
- const body = doc.sentences.map(proseText).join(" ").toLowerCase();
94
- const found = [...weights.entries()].filter(([pattern]) => body.includes(pattern));
95
- const score = Math.round(found.reduce((sum, [, weight]) => sum + weight, 0) * 10);
96
- const first = doc.sentences.find((sentence) => found.some(([pattern]) => sentence.text.toLowerCase().includes(pattern)));
103
+ const entries = [...new Map((options.lexicon ?? []).map((entry) => [entry.pattern.toLowerCase(), entry])).values()];
104
+ const found = entries.filter((entry) => doc.sentences.some((sentence) => entryIn(sentence, entry)));
105
+ const score = Math.round(found.reduce((sum, entry) => sum + (entry.weight ?? 1), 0) * 10);
106
+ const first = doc.sentences.find((sentence) => found.some((entry) => entryIn(sentence, entry)));
97
107
  if (first === undefined || score <= options.limit)
98
108
  return [];
99
109
  return [
@@ -104,7 +114,7 @@ export const aiTell = (doc, options) => {
104
114
  column: 0,
105
115
  quote: first.text.trim(),
106
116
  values: {
107
- word: joinWords(found.map(([pattern]) => pattern), doc.language),
117
+ word: joinWords(found.map((entry) => entry.pattern.toLowerCase()), doc.language),
108
118
  count: found.length,
109
119
  density: score,
110
120
  limit: options.limit,
@@ -1 +1 @@
1
- {"version":3,"file":"lexicon.js","sourceRoot":"","sources":["../../src/detectors/lexicon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lexicon.js","sourceRoot":"","sources":["../../src/detectors/lexicon.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"phrase-match.d.ts","sourceRoot":"","sources":["../../src/detectors/phrase-match.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoC,MAAM,cAAc,CAAC;AAuB/E;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,QAazB,CAAC"}
1
+ {"version":3,"file":"phrase-match.d.ts","sourceRoot":"","sources":["../../src/detectors/phrase-match.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA6C,MAAM,cAAc,CAAC;AAwBxF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,QAazB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { entryIn } from "./lexicon-match.js";
1
2
  /** 冒頭は先頭 2 段落ぶん。「どの記事にも当てはまる書き出し」は冒頭にあるときだけ問題。 */
2
3
  const OPENING_SENTENCES = 4;
3
4
  /**
@@ -11,19 +12,19 @@ const inScope = (doc, where) => {
11
12
  return doc.sections.at(-1)?.sentences ?? [];
12
13
  return doc.sentences;
13
14
  };
14
- const hitsIn = (sentences, patterns) => sentences.flatMap((sentence) => {
15
- const matched = patterns.find((pattern) => sentence.text.toLowerCase().includes(pattern.toLowerCase()));
16
- return matched === undefined ? [] : [{ sentence, matched }];
15
+ const hitsIn = (sentences, lexicon) => sentences.flatMap((sentence) => {
16
+ const matched = lexicon.find((entry) => entryIn(sentence, entry));
17
+ return matched === undefined ? [] : [{ sentence, matched: matched.pattern }];
17
18
  });
18
19
  /**
19
20
  * 語彙表との照合。detector は共通で、語彙だけが言語別に差し替わる。spec §11。
20
21
  * これが L2 の全体像で、新しい言語は語彙表を書くだけで動く。
21
22
  */
22
23
  export const phraseMatch = (doc, options) => {
23
- const patterns = (options.lexicon ?? []).map((entry) => entry.pattern);
24
- if (patterns.length === 0)
24
+ const lexicon = options.lexicon ?? [];
25
+ if (lexicon.length === 0)
25
26
  return [];
26
- const hits = hitsIn(inScope(doc, options.where), patterns);
27
+ const hits = hitsIn(inScope(doc, options.where), lexicon);
27
28
  if (hits.length < options.limit)
28
29
  return [];
29
30
  return hits.map((hit) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"phrase-match.js","sourceRoot":"","sources":["../../src/detectors/phrase-match.ts"],"names":[],"mappings":"AAEA,kDAAkD;AAClD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;GAGG;AACH,MAAM,OAAO,GAAG,CAAC,GAAkB,EAAE,KAAyB,EAAuB,EAAE;IACrF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC1E,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACrE,OAAO,GAAG,CAAC,SAAS,CAAC;AACvB,CAAC,CAAC;AAIF,MAAM,MAAM,GAAG,CAAC,SAA8B,EAAE,QAA2B,EAAS,EAAE,CACpF,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;IAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxG,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAC/D,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QAC/B,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;KAC5G,CAAC,CAAC,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"phrase-match.js","sourceRoot":"","sources":["../../src/detectors/phrase-match.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,kDAAkD;AAClD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;GAGG;AACH,MAAM,OAAO,GAAG,CAAC,GAAkB,EAAE,KAAyB,EAAuB,EAAE;IACrF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC1E,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACrE,OAAO,GAAG,CAAC,SAAS,CAAC;AACvB,CAAC,CAAC;AAIF,MAAM,MAAM,GAAG,CAAC,SAA8B,EAAE,OAAgB,EAAS,EAAE,CACzE,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/E,CAAC,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QAC/B,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;KAC5G,CAAC,CAAC,CAAC;AACN,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"repeated-head.d.ts","sourceRoot":"","sources":["../../src/detectors/repeated-head.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAiC,MAAM,cAAc,CAAC;AA6B5E,eAAO,MAAM,YAAY,EAAE,QAUpB,CAAC"}
1
+ {"version":3,"file":"repeated-head.d.ts","sourceRoot":"","sources":["../../src/detectors/repeated-head.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAuC,MAAM,cAAc,CAAC;AA2ClF,eAAO,MAAM,YAAY,EAAE,QAUpB,CAAC"}
@@ -10,17 +10,27 @@ const headOf = (sentence, unit) => {
10
10
  return text.replace(/\s+/gu, "").slice(0, HEAD_CHARS);
11
11
  return text.split(/\s+/u).slice(0, HEAD_WORDS).join(" ");
12
12
  };
13
- const runsOf = (sentences, unit) => sentences.reduce((acc, sentence) => {
13
+ /** 文の入れ物。文の始まりを含む、いちばん内側の箇条書きの項目の始まり。地の文なら -1。 */
14
+ const containerOf = (sentence, lists) => lists.filter((item) => item.start <= sentence.span.start && sentence.span.start < item.end).reduce((innermost, item) => Math.max(innermost, item.start), -1);
15
+ /** 前の文と今の文のあいだで、箇条書きの項目が始まっているか。文を持たない項目(画像だけの - ![図](a.png))も連なりを切る。 */
16
+ const listBetween = (previous, sentence, lists) => previous !== undefined && lists.some((item) => item.start >= previous.span.end && item.start < sentence.span.start);
17
+ /**
18
+ * 連なりは同じ入れ物の中でだけ続く。箇条書きの項目どうしは同じ形で並べるのが書き方そのもの(「1. SRE に関する…」「2. SRE に関する…」)で、
19
+ * 項目をまたぐと切る。一つの項目の中の段落や、地の文の中では、これまでどおり数える。箇条書きの前後の地の文も、箇条書きで切れる。
20
+ */
21
+ const runsOf = (sentences, unit, lists) => sentences.reduce((acc, sentence) => {
14
22
  const head = headOf(sentence, unit);
23
+ const container = containerOf(sentence, lists);
15
24
  const last = acc.at(-1);
16
25
  // 短すぎる書き出しは「同じ」と言えない。単位ぶん揃って初めて連なりと見る。
17
26
  const full = unit === "char" ? head.length === HEAD_CHARS : head.split(" ").length === HEAD_WORDS;
18
- if (last !== undefined && last.head === head && full) {
19
- return [...acc.slice(0, -1), { head, members: [...last.members, sentence] }];
27
+ const joins = last !== undefined && last.head === head && last.container === container && !listBetween(last.members.at(-1), sentence, lists);
28
+ if (last !== undefined && joins && full) {
29
+ return [...acc.slice(0, -1), { head, container, members: [...last.members, sentence] }];
20
30
  }
21
- return [...acc, { head, members: [sentence] }];
31
+ return [...acc, { head, container, members: [sentence] }];
22
32
  }, []);
23
- export const repeatedHead = (doc, options) => runsOf(doc.sentences, doc.lengthUnit)
33
+ export const repeatedHead = (doc, options) => runsOf(doc.sentences, doc.lengthUnit, doc.listSpans)
24
34
  .filter((run) => run.members.length > options.limit)
25
35
  .map((run) => ({
26
36
  rule: "repeated-sentence-head",
@@ -1 +1 @@
1
- {"version":3,"file":"repeated-head.js","sourceRoot":"","sources":["../../src/detectors/repeated-head.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,QAAkB,EAAE,IAAgB,EAAU,EAAE;IAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC,CAAC;AAIF,MAAM,MAAM,GAAG,CAAC,SAA8B,EAAE,IAAgB,EAAS,EAAE,CACzE,SAAS,CAAC,MAAM,CAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,uCAAuC;IACvC,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;IAClG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC,EAAE,EAAE,CAAC,CAAC;AAET,MAAM,CAAC,MAAM,YAAY,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE,CAChE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC;KAClC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;KACnD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACb,IAAI,EAAE,wBAAwB;IAC9B,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACpE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;CACrH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"repeated-head.js","sourceRoot":"","sources":["../../src/detectors/repeated-head.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-ending.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-ending.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,cAAc,CAAC;AAiBhE,eAAO,MAAM,cAAc,EAAE,QAkB5B,CAAC"}
1
+ {"version":3,"file":"sentence-ending.d.ts","sourceRoot":"","sources":["../../src/detectors/sentence-ending.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,cAAc,CAAC;AAqBhE,eAAO,MAAM,cAAc,EAAE,QAkB5B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { hasPredicate, isClosed } from "../sentence-shape.js";
1
+ import { endingTokens, hasPredicate, isClosed } from "../sentence-shape.js";
2
2
  /**
3
3
  * 文末の調子が混ざっているかを見る。日本語の「ですます / である」がこれ。
4
4
  *
@@ -9,8 +9,12 @@ import { hasPredicate, isClosed } from "../sentence-shape.js";
9
9
  * 述語を持たないものは文として数えない。見出しの下の `MaaSサービス` のような
10
10
  * 名前だけの行がそのまま「である調」の少数派になり、実文書の誤検知はすべてこれだった。
11
11
  */
12
- const isSentence = (sentence) => isClosed(sentence) && hasPredicate(sentence);
13
- const isPolite = (sentence, polite) => (sentence.tokens ?? []).some((token) => polite.includes(token.lemma ?? token.surface));
12
+ const isSentence = (sentence) => isClosed(sentence) && hasPredicate(sentence) && endingTokens(sentence).length > 0;
13
+ /**
14
+ * 文末の語だけを見る。文の途中の引用(「ご覧ください」という表現を使う。)は文末の調子ではない。
15
+ * 書いた形でも原形でも当てる。「ください」の原形は「くださる」で、原形だけを見ると丁寧な文末を見落とす。
16
+ */
17
+ const isPolite = (sentence, polite) => endingTokens(sentence).some((token) => polite.includes(token.surface) || (token.lemma !== undefined && polite.includes(token.lemma)));
14
18
  export const sentenceEnding = (doc, options) => {
15
19
  const polite = (options.lexicon ?? []).map((entry) => entry.pattern);
16
20
  const judged = doc.sentences.filter(isSentence).map((sentence) => ({ sentence, polite: isPolite(sentence, polite) }));
@@ -1 +1 @@
1
- {"version":3,"file":"sentence-ending.js","sourceRoot":"","sources":["../../src/detectors/sentence-ending.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG9D;;;;;GAKG;AACH;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,QAAkB,EAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;AAEjG,MAAM,QAAQ,GAAG,CAAC,QAAkB,EAAE,MAAyB,EAAW,EAAE,CAC1E,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzF,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACtH,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/I,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;IACvD,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAC5D,4CAA4C;IAC5C,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAChD,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC;SACpD,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;KAC1E,CAAC,CAAC,CAAC;AACR,CAAC,CAAC"}
1
+ {"version":3,"file":"sentence-ending.js","sourceRoot":"","sources":["../../src/detectors/sentence-ending.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5E;;;;;GAKG;AACH;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,QAAkB,EAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAEtI;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,QAAkB,EAAE,MAAyB,EAAW,EAAE,CAC1E,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAExI,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,GAAG,EAAE,OAAO,EAAa,EAAE;IAClE,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACtH,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/I,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;IACvD,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAC5D,4CAA4C;IAC5C,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAChD,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC;SACpD,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QAC3B,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;KAC1E,CAAC,CAAC,CAAC;AACR,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/detectors/signals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoC,MAAM,cAAc,CAAC;AA4B/E,eAAO,MAAM,YAAY,EAAE,QAe1B,CAAC;AAgDF,eAAO,MAAM,eAAe,EAAE,QAiB7B,CAAC;AA4DF,eAAO,MAAM,gBAAgB,EAAE,QAiB9B,CAAC;AAQF,eAAO,MAAM,gBAAgB,EAAE,QAkB9B,CAAC;AAQF,eAAO,MAAM,WAAW,EAAE,QAezB,CAAC"}
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/detectors/signals.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAoD,MAAM,cAAc,CAAC;AA4B/F,eAAO,MAAM,YAAY,EAAE,QAe1B,CAAC;AA4EF,eAAO,MAAM,eAAe,EAAE,QAoB7B,CAAC;AAmEF,eAAO,MAAM,gBAAgB,EAAE,QAkB9B,CAAC;AA4BF,eAAO,MAAM,gBAAgB,EAAE,QAkB9B,CAAC;AAQF,eAAO,MAAM,WAAW,EAAE,QAezB,CAAC"}
@@ -1,5 +1,8 @@
1
1
  import { proseText } from "../measure.js";
2
2
  import { wordsOf } from "./structure.js";
3
+ import { compacted, placeOf } from "./gram-place.js";
4
+ import { notAcronymSpans } from "./acronym-context.js";
5
+ import { expansionAt } from "./acronym-expansion.js";
3
6
  const PER = 1000;
4
7
  /**
5
8
  * これより短い文書では密度が暴れる。1 個で「1000 あたり 100」になる。
@@ -75,15 +78,42 @@ const gramsOf = (doc) => {
75
78
  });
76
79
  return counts;
77
80
  };
81
+ /** 数えたときと同じ形の文。char 単位では空白を詰めてから数えている。 */
82
+ const gramText = (sentence, unit) => compacted(sentence.text, unit).text;
83
+ /** 動詞と助動詞。言い回し(ることができます、it is important to)にはこれが入り、主題の名前(state and local tax)には入らない。 */
84
+ const PREDICATE_POS = new Set(["VERB", "AUX"]);
85
+ const NOUNS = new Set(["NOUN", "PROPN", "ADJ"]);
86
+ /**
87
+ * 英語で名詞のすぐ前の動詞は、名詞を飾る語(形容詞を挟んでも同じ)(the upcoming fiscal year、the Disclosing Party、the borrow checker)で、
88
+ * 述語ではない。日本語の名詞の前の動詞(〜にあるコンポーネント)は言い回しの一部になるので、word 単位だけで見る。
89
+ */
90
+ const modifiesNoun = (tokens, index, unit) => unit === "word" && tokens[index]?.pos === "VERB" && NOUNS.has(tokens[index + 1]?.pos ?? "");
91
+ /**
92
+ * 語句が文の中で占める範囲に、動詞か助動詞があるか。範囲で見る。文字で探すと、同じ文の別の所の動詞「use」が、語句の中の名詞「use」に当たる。
93
+ * 品詞が無ければ見分けられないので、これまでどおり言い回しとして数える。
94
+ */
95
+ const hasPredicate = (gram, sentence, unit) => {
96
+ if (sentence.tokens === undefined)
97
+ return true;
98
+ const place = placeOf(compacted(sentence.text, unit), gram);
99
+ if (place === undefined)
100
+ return true;
101
+ const [start, end] = [sentence.span.start + place.start, sentence.span.start + place.end];
102
+ const tokens = sentence.tokens;
103
+ return tokens.some((token, index) => PREDICATE_POS.has(token.pos) && token.span.start < end && start < token.span.end && !modifiesNoun(tokens, index, unit));
104
+ };
78
105
  export const ngramRepetition = (doc, options) => {
79
106
  if (wordsOf(doc) < FLOOR[doc.lengthUnit])
80
107
  return [];
108
+ const sentenceWith = (gram) => doc.sentences.find((sentence) => gramText(sentence, doc.lengthUnit).includes(gram));
81
109
  const worst = [...gramsOf(doc).entries()]
82
- .filter(([gram]) => isPhrasing(gram, doc.lengthUnit))
83
- .reduce((best, [gram, count]) => (count > best.count ? { gram, count } : best), { gram: "", count: 0 });
84
- if (worst.count <= options.limit)
110
+ .filter(([gram, count]) => count > options.limit && isPhrasing(gram, doc.lengthUnit))
111
+ .sort(([, left], [, right]) => right - left)
112
+ .map(([gram, count]) => ({ gram, count, at: sentenceWith(gram) }))
113
+ .find(({ gram, at }) => at === undefined || hasPredicate(gram, at, doc.lengthUnit));
114
+ if (worst === undefined)
85
115
  return [];
86
- const at = doc.sentences.find((sentence) => sentence.text.includes(worst.gram));
116
+ const at = worst.at;
87
117
  return [
88
118
  {
89
119
  rule: "ngram-repetition",
@@ -98,67 +128,59 @@ export const ngramRepetition = (doc, options) => {
98
128
  /**
99
129
  * 略語が初出で展開されているか。「CI」だけでは、読む人によって指すものが違う。
100
130
  * 展開は「略語の直前か直後の括弧」か「括弧の中の略語」で書かれる。
131
+ *
132
+ * & で繋いだ大文字は 1 語として読む(ATT&CK、M&IE)。割ると CK や IE が別の略語に見える。
101
133
  */
102
- const ACRONYM = /\b[A-Z]{2,6}\b/gu;
103
- /** 読み手が説明なしで通じると見なしてよい語。展開すると逆に読みにくい。 */
104
- const COMMON = new Set([
105
- "OK",
106
- "NG",
107
- "URL",
108
- "API",
109
- "CSS",
110
- "HTML",
111
- "JSON",
112
- "YAML",
113
- "HTTP",
114
- "HTTPS",
115
- "PDF",
116
- "CPU",
117
- "GPU",
118
- "RAM",
119
- "USB",
120
- "AI",
121
- "ID",
122
- "FAQ",
123
- "PR",
124
- "OS",
125
- "CLI",
126
- "UI",
127
- "UX",
128
- "SQL",
129
- "CSV",
130
- "XML",
131
- "TODO",
132
- "NOTE",
133
- ]);
134
+ const EDGE_BEFORE = String.raw `(?<![A-Za-z0-9_&])`;
135
+ const EDGE_AFTER = String.raw `(?![A-Za-z0-9_&])`;
136
+ const ACRONYM = new RegExp(String.raw `${EDGE_BEFORE}(?:[A-Z]+(?:&[A-Z]+)+|[A-Z]{2,6})${EDGE_AFTER}`, "gu");
134
137
  /**
135
- * 展開は略語の**すぐ隣**にあるときだけ認める。
136
- * 60 文字も見ると、同じ文のどこかに括弧があるだけで「説明済み」になり、1 件も出なくなる。
138
+ * 大文字で書かれていても略語ではないもの。
137
139
  *
138
- * 認めるのは 2 つの形。どちらも実際によく書かれる。
139
- * CI(継続的インテグレーション) 略語のあとに括弧
140
- * Continuous Integration (CI) 括弧の中が略語
140
+ * 大文字だけの語が 3 つ以上、空白と引用符だけを挟んで続くのは強調(免責の定型文など)。
141
+ * 強調は読点や括弧をまたいで続くので(THE AUTHOR, THE COMPANY (IF ANY))、そういう続きを含む
142
+ * 「大文字以外の文字を含まない一続き」を丸ごと強調と見なす。小文字の語が挟まれば切れるので、
143
+ * 「SRE, SLO, MTTR」のような略語の並びは残る。引用符に包まれた大文字の句(“AS IS”)も強調。
141
144
  */
142
- const OPENS = /^\s*[((]/u;
143
- const CLOSES = /^\s*[))]/u;
144
- const OPENED = /[((]\s*$/u;
145
- const isExpanded = (body, acronym) => {
146
- const at = body.indexOf(acronym);
147
- if (at === -1)
148
- return false;
149
- const after = body.slice(at + acronym.length, at + acronym.length + 3);
150
- const before = body.slice(Math.max(0, at - 3), at);
151
- return OPENS.test(after) || (OPENED.test(before) && CLOSES.test(after));
152
- };
145
+ const CAPS_WORD = String.raw `[A-Z]+(?:&[A-Z]+)*`;
146
+ const SHOUTED_RUN = new RegExp(String.raw `${EDGE_BEFORE}${CAPS_WORD}(?:[\s"“”'‘’]+${CAPS_WORD}){2,}${EDGE_AFTER}`, "u");
147
+ const UNCASED_STRETCH = /(?:[A-Z]|\P{L})+/gu;
148
+ const QUOTED_CAPS = new RegExp(String.raw `["“'‘]${CAPS_WORD}(?:\s+${CAPS_WORD})+["”'’]`, "gu");
149
+ /** RFC 2119 の要件語。定義された普通の語で、1 語でも強調でも現れる。 */
150
+ const REQUIREMENT_WORD = new RegExp(String.raw `${EDGE_BEFORE}(?:(?:MUST|SHALL|SHOULD)(?:\s+NOT)?|NOT\s+RECOMMENDED|REQUIRED|RECOMMENDED|MAY|OPTIONAL)${EDGE_AFTER}`, "gu");
151
+ /** - か . で繋がり、数字を含む識別子(AC-2、MS.TEAMS.1.1v1)。大文字の部品は略語ではない。 */
152
+ const IDENTIFIER = /(?<![A-Za-z0-9_&.-])[A-Z0-9][A-Za-z0-9]*(?:[.-][A-Z0-9][A-Za-z0-9]*)+/gu;
153
+ /** Creative Commons のライセンス名。CC と BY は 1 つの名前の部品。 */
154
+ const LICENCE = new RegExp(String.raw `${EDGE_BEFORE}CC BY(?:-(?:SA|NC|ND))*${EDGE_AFTER}`, "gu");
155
+ const spanOf = (match) => ({ start: match.index, end: match.index + match[0].length });
156
+ const spansOf = (text) => [
157
+ ...[...text.matchAll(UNCASED_STRETCH)].filter((match) => SHOUTED_RUN.test(match[0])).map(spanOf),
158
+ ...[...text.matchAll(IDENTIFIER)].filter((match) => /\d/u.test(match[0])).map(spanOf),
159
+ ...[QUOTED_CAPS, REQUIREMENT_WORD, LICENCE].flatMap((pattern) => [...text.matchAll(pattern)].map(spanOf)),
160
+ ...notAcronymSpans(text),
161
+ ];
162
+ const acronymsOf = (doc) => doc.sentences.flatMap((sentence) => {
163
+ const excluded = spansOf(sentence.text);
164
+ return [...sentence.text.matchAll(ACRONYM)]
165
+ .filter((match) => !excluded.some((span) => span.start <= match.index && match.index + match[0].length <= span.end))
166
+ .map((match) => ({ word: match[0], hit: { sentence, offset: sentence.span.start + match.index } }));
167
+ });
168
+ /**
169
+ * どこか 1 か所で展開してあればよい。初出が節の見出し代わりの語(「5.3. DPA.」)で、
170
+ * 展開がその直後の文にあることが契約書では普通にある。見るのは語として現れた所だけ(CISA の中の CI は見ない)。
171
+ */
172
+ const isExpanded = (body, acronym, expandedAt) => [...body.matchAll(new RegExp(`${EDGE_BEFORE}${acronym}${EDGE_AFTER}`, "gu"))].some((match) => expandedAt(body, acronym, match.index));
173
+ const patternsOf = (doc, id) => (doc.lexicons[id] ?? []).map((entry) => entry.pattern);
153
174
  export const undefinedAcronym = (doc, options) => {
154
175
  const body = bodyOf(doc);
176
+ const common = new Set((options.lexicon ?? []).map((entry) => entry.pattern));
155
177
  const seen = new Map();
156
- findIn(doc, ACRONYM).forEach((hit) => {
157
- const text = /^[A-Z]{2,6}/u.exec(doc.source.slice(hit.offset, hit.offset + 6))?.[0] ?? "";
158
- if (text.length > 0 && !COMMON.has(text) && !seen.has(text))
159
- seen.set(text, hit);
178
+ acronymsOf(doc).forEach(({ word, hit }) => {
179
+ if (!common.has(word) && !seen.has(word))
180
+ seen.set(word, hit);
160
181
  });
161
- const bare = [...seen.entries()].filter(([acronym]) => !isExpanded(body, acronym));
182
+ const expandedAt = expansionAt({ markers: patternsOf(doc, "definition-marker"), verbs: patternsOf(doc, "definition-verb") });
183
+ const bare = [...seen.entries()].filter(([acronym]) => !isExpanded(body, acronym, expandedAt));
162
184
  if (bare.length < options.limit)
163
185
  return [];
164
186
  return bare.map(([acronym, hit]) => ({
@@ -175,9 +197,25 @@ export const undefinedAcronym = (doc, options) => {
175
197
  * 読み終えても何も持ち帰れない。**少ないほうを指摘する**ので、他の密度 rule と向きが逆。
176
198
  */
177
199
  const CONCRETE = /\d|`|https?:\/\//u;
200
+ /**
201
+ * 見出しのない導入部は、書き出しで呼ぶ。文書の言葉なので、message がどの言語でも混ざらない。
202
+ * 決まった呼び名(「この節」)を置くと、英語の文書の message に日本語が入る。
203
+ */
204
+ const OPENING = { word: 4, char: 12 };
205
+ const openingOf = (sentence, unit) => {
206
+ const text = sentence === undefined ? "" : proseText(sentence);
207
+ const pieces = unit === "word" ? text.split(" ") : Array.from(text);
208
+ const joiner = unit === "word" ? " " : "";
209
+ return pieces.length <= OPENING[unit] ? pieces.join(joiner) : `${pieces.slice(0, OPENING[unit]).join(joiner)}…`;
210
+ };
211
+ /**
212
+ * 形態素解析が数と読んだ語(UD の NumType=Card)。漢数字の「二割」「十五分」も、算用数字と同じ具体的な数。
213
+ * 言い回しの「二人三脚」「一人ひとり」は、辞書が一語として持つので数にならない。品詞が無ければ、数字だけを見る。
214
+ */
215
+ const hasNumeral = (section) => section.sentences.some((sentence) => (sentence.tokens ?? []).some((token) => token.features?.["NumType"] === "Card"));
178
216
  export const concreteEvidence = (doc, options) => {
179
217
  const sections = doc.sections.filter((section) => section.sentences.length >= 3);
180
- const empty = sections.filter((section) => !CONCRETE.test(doc.source.slice(section.span.start, section.span.end)));
218
+ const empty = sections.filter((section) => !CONCRETE.test(doc.source.slice(section.span.start, section.span.end)) && !hasNumeral(section));
181
219
  if (empty.length < options.limit)
182
220
  return [];
183
221
  return empty.map((section) => ({
@@ -187,7 +225,7 @@ export const concreteEvidence = (doc, options) => {
187
225
  column: 0,
188
226
  quote: section.heading.length > 0 ? section.heading : (section.sentences[0]?.text.trim() ?? ""),
189
227
  values: {
190
- word: section.heading.length > 0 ? section.heading : "この節",
228
+ word: section.heading.length > 0 ? section.heading : openingOf(section.sentences[0], doc.lengthUnit),
191
229
  count: empty.length,
192
230
  total: sections.length,
193
231
  limit: options.limit,
@@ -1 +1 @@
1
- {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/detectors/signals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/detectors/signals.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../src/detectors/structure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,QAAQ,EAAsB,aAAa,EAAW,MAAM,cAAc,CAAC;AAErG;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SAM3E,CAAC;AAsBF,4CAA4C;AAC5C,eAAO,MAAM,eAAe,EAAE,QAUvB,CAAC;AAIR,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,EAAE,QAI/B,CAAC;AAIF,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,QAI/B,CAAC;AAQF,eAAO,MAAM,WAAW,EAAE,QAgBzB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,QAkB5B,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,aAAa,KAAG,MAA8F,CAAC"}
1
+ {"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../src/detectors/structure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,QAAQ,EAAsB,aAAa,EAAiB,MAAM,cAAc,CAAC;AAI3G;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SAM3E,CAAC;AAsBF,4CAA4C;AAC5C,eAAO,MAAM,eAAe,EAAE,QAUvB,CAAC;AAIR,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,EAAE,QAI/B,CAAC;AAIF,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,QAI/B,CAAC;AAQF,eAAO,MAAM,WAAW,EAAE,QAgBzB,CAAC;AAiBF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,QAoB5B,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,aAAa,KAAG,MAA8F,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { charLength, lengthOf } from "../measure.js";
2
+ import { dateStampIndexes, stampCandidates } from "../date-stamp.js";
3
+ import { inDocumentOrder } from "../structure/issues.js";
2
4
  /**
3
5
  * ばらつきは変動係数(標準偏差 ÷ 平均)で測る。
4
6
  *
@@ -80,6 +82,14 @@ export const ruleOfThree = (doc, options) => {
80
82
  },
81
83
  ];
82
84
  };
85
+ const dateSpans = (doc) => doc.structure === undefined ? [] : inDocumentOrder(doc.structure).flatMap((node) => (node.kind === "date" ? [node.span] : []));
86
+ /** 更新日の刻印(「最終更新日:」「2025年6月20日」)は前置きに数えない。木を作るのは、数えて上限を超えたときだけ。 */
87
+ const withoutDateStamps = (doc, paragraphs) => {
88
+ const labels = (doc.lexicons["date-stamp-label"] ?? []).map((entry) => entry.pattern);
89
+ const candidates = stampCandidates(doc.source, paragraphs.map((paragraph) => paragraph.span), dateSpans(doc));
90
+ const stamps = dateStampIndexes(candidates, labels);
91
+ return paragraphs.filter((_, index) => !stamps.has(index));
92
+ };
83
93
  /**
84
94
  * 本題に入るまでが長い。業務文書では、読み手は結論を探しに来ている。
85
95
  *
@@ -90,7 +100,10 @@ export const preambleLength = (doc, options) => {
90
100
  const body = doc.sections.find((section) => section.depth >= 2);
91
101
  if (body === undefined)
92
102
  return [];
93
- const before = doc.paragraphs.filter((paragraph) => paragraph.span.start < body.span.start);
103
+ const all = doc.paragraphs.filter((paragraph) => paragraph.span.start < body.span.start);
104
+ if (all.length <= options.limit)
105
+ return [];
106
+ const before = withoutDateStamps(doc, all);
94
107
  if (before.length <= options.limit)
95
108
  return [];
96
109
  const first = before[0];