chaffjs 0.16.0 → 0.17.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 (187) hide show
  1. package/dist/calendar-number.d.ts +7 -2
  2. package/dist/calendar-number.d.ts.map +1 -1
  3. package/dist/calendar-number.js +10 -3
  4. package/dist/calendar-number.js.map +1 -1
  5. package/dist/closing-numbers.d.ts +20 -0
  6. package/dist/closing-numbers.d.ts.map +1 -0
  7. package/dist/closing-numbers.js +56 -0
  8. package/dist/closing-numbers.js.map +1 -0
  9. package/dist/commands/test.d.ts.map +1 -1
  10. package/dist/commands/test.js +11 -9
  11. package/dist/commands/test.js.map +1 -1
  12. package/dist/detectors/acronym-context.d.ts +2 -0
  13. package/dist/detectors/acronym-context.d.ts.map +1 -1
  14. package/dist/detectors/acronym-context.js +13 -0
  15. package/dist/detectors/acronym-context.js.map +1 -1
  16. package/dist/detectors/acronym-expansion.d.ts +2 -0
  17. package/dist/detectors/acronym-expansion.d.ts.map +1 -1
  18. package/dist/detectors/acronym-expansion.js +104 -1
  19. package/dist/detectors/acronym-expansion.js.map +1 -1
  20. package/dist/detectors/agreement-slip.d.ts +32 -0
  21. package/dist/detectors/agreement-slip.d.ts.map +1 -0
  22. package/dist/detectors/agreement-slip.js +137 -0
  23. package/dist/detectors/agreement-slip.js.map +1 -0
  24. package/dist/detectors/content-morphemes.d.ts +4 -0
  25. package/dist/detectors/content-morphemes.d.ts.map +1 -0
  26. package/dist/detectors/content-morphemes.js +12 -0
  27. package/dist/detectors/content-morphemes.js.map +1 -0
  28. package/dist/detectors/en-shape.d.ts +0 -1
  29. package/dist/detectors/en-shape.d.ts.map +1 -1
  30. package/dist/detectors/en-shape.js +0 -235
  31. package/dist/detectors/en-shape.js.map +1 -1
  32. package/dist/detectors/heading-echo.d.ts.map +1 -1
  33. package/dist/detectors/heading-echo.js +12 -18
  34. package/dist/detectors/heading-echo.js.map +1 -1
  35. package/dist/detectors/heading-overlap.d.ts +13 -0
  36. package/dist/detectors/heading-overlap.d.ts.map +1 -0
  37. package/dist/detectors/heading-overlap.js +52 -0
  38. package/dist/detectors/heading-overlap.js.map +1 -0
  39. package/dist/detectors/index.d.ts.map +1 -1
  40. package/dist/detectors/index.js +6 -1
  41. package/dist/detectors/index.js.map +1 -1
  42. package/dist/detectors/letter-joined-name.d.ts +13 -0
  43. package/dist/detectors/letter-joined-name.d.ts.map +1 -0
  44. package/dist/detectors/letter-joined-name.js +11 -0
  45. package/dist/detectors/letter-joined-name.js.map +1 -0
  46. package/dist/detectors/lexicon.d.ts.map +1 -1
  47. package/dist/detectors/lexicon.js +5 -2
  48. package/dist/detectors/lexicon.js.map +1 -1
  49. package/dist/detectors/orthography.js +2 -2
  50. package/dist/detectors/orthography.js.map +1 -1
  51. package/dist/detectors/oxford-comma.d.ts +3 -0
  52. package/dist/detectors/oxford-comma.d.ts.map +1 -0
  53. package/dist/detectors/oxford-comma.js +340 -0
  54. package/dist/detectors/oxford-comma.js.map +1 -0
  55. package/dist/detectors/signals.d.ts.map +1 -1
  56. package/dist/detectors/signals.js +29 -10
  57. package/dist/detectors/signals.js.map +1 -1
  58. package/dist/detectors/stacked-hedge.d.ts +0 -7
  59. package/dist/detectors/stacked-hedge.d.ts.map +1 -1
  60. package/dist/detectors/stacked-hedge.js +6 -3
  61. package/dist/detectors/stacked-hedge.js.map +1 -1
  62. package/dist/detectors/stray-space.d.ts +7 -0
  63. package/dist/detectors/stray-space.d.ts.map +1 -0
  64. package/dist/detectors/stray-space.js +34 -0
  65. package/dist/detectors/stray-space.js.map +1 -0
  66. package/dist/detectors/structure.d.ts +3 -1
  67. package/dist/detectors/structure.d.ts.map +1 -1
  68. package/dist/detectors/structure.js +4 -2
  69. package/dist/detectors/structure.js.map +1 -1
  70. package/dist/document.d.ts.map +1 -1
  71. package/dist/document.js +15 -3
  72. package/dist/document.js.map +1 -1
  73. package/dist/genre-parse.d.ts +5 -1
  74. package/dist/genre-parse.d.ts.map +1 -1
  75. package/dist/genre-parse.js +16 -3
  76. package/dist/genre-parse.js.map +1 -1
  77. package/dist/genre-suggest.d.ts.map +1 -1
  78. package/dist/genre-suggest.js +15 -1
  79. package/dist/genre-suggest.js.map +1 -1
  80. package/dist/line-paragraphs.d.ts.map +1 -1
  81. package/dist/line-paragraphs.js +3 -1
  82. package/dist/line-paragraphs.js.map +1 -1
  83. package/dist/mask.d.ts.map +1 -1
  84. package/dist/mask.js +2 -11
  85. package/dist/mask.js.map +1 -1
  86. package/dist/number-name.js +1 -1
  87. package/dist/number-name.js.map +1 -1
  88. package/dist/opening-line.d.ts +3 -0
  89. package/dist/opening-line.d.ts.map +1 -0
  90. package/dist/opening-line.js +14 -0
  91. package/dist/opening-line.js.map +1 -0
  92. package/dist/orthography.d.ts +5 -1
  93. package/dist/orthography.d.ts.map +1 -1
  94. package/dist/orthography.js +7 -1
  95. package/dist/orthography.js.map +1 -1
  96. package/dist/paragraph-length.d.ts +7 -0
  97. package/dist/paragraph-length.d.ts.map +1 -0
  98. package/dist/paragraph-length.js +10 -0
  99. package/dist/paragraph-length.js.map +1 -0
  100. package/dist/plugin.d.ts +6 -0
  101. package/dist/plugin.d.ts.map +1 -1
  102. package/dist/quoted-span.d.ts +0 -2
  103. package/dist/quoted-span.d.ts.map +1 -1
  104. package/dist/quoted-span.js +1 -1
  105. package/dist/quoted-span.js.map +1 -1
  106. package/dist/rule-load.d.ts.map +1 -1
  107. package/dist/rule-load.js +8 -0
  108. package/dist/rule-load.js.map +1 -1
  109. package/dist/run-semantic.d.ts +3 -1
  110. package/dist/run-semantic.d.ts.map +1 -1
  111. package/dist/run-semantic.js +8 -3
  112. package/dist/run-semantic.js.map +1 -1
  113. package/dist/run.d.ts +2 -0
  114. package/dist/run.d.ts.map +1 -1
  115. package/dist/run.js +4 -1
  116. package/dist/run.js.map +1 -1
  117. package/dist/semantic.d.ts +1 -1
  118. package/dist/semantic.d.ts.map +1 -1
  119. package/dist/semantic.js +10 -3
  120. package/dist/semantic.js.map +1 -1
  121. package/dist/span-merge.d.ts +4 -0
  122. package/dist/span-merge.d.ts.map +1 -0
  123. package/dist/span-merge.js +12 -0
  124. package/dist/span-merge.js.map +1 -0
  125. package/dist/speaker-labels.d.ts +4 -0
  126. package/dist/speaker-labels.d.ts.map +1 -0
  127. package/dist/speaker-labels.js +106 -0
  128. package/dist/speaker-labels.js.map +1 -0
  129. package/dist/stray-space.d.ts +17 -0
  130. package/dist/stray-space.d.ts.map +1 -0
  131. package/dist/stray-space.js +66 -0
  132. package/dist/stray-space.js.map +1 -0
  133. package/dist/structure/relative-resolve.d.ts.map +1 -1
  134. package/dist/structure/relative-resolve.js +26 -20
  135. package/dist/structure/relative-resolve.js.map +1 -1
  136. package/dist/team-names.d.ts.map +1 -1
  137. package/dist/team-names.js +11 -14
  138. package/dist/team-names.js.map +1 -1
  139. package/genres.yaml +34 -2
  140. package/package.json +3 -3
  141. package/rules/agreement-slip.yaml +36 -0
  142. package/rules/empty-conclusion.yaml +1 -0
  143. package/rules/heading-echo.yaml +1 -0
  144. package/rules/max-paragraph-length.yaml +9 -2
  145. package/rules/max-sentence-length.yaml +4 -0
  146. package/rules/oxford-comma-consistency.yaml +1 -1
  147. package/rules/stray-space.yaml +38 -0
  148. package/rules/undefined-acronym.yaml +1 -0
  149. package/src/calendar-number.ts +16 -7
  150. package/src/closing-numbers.ts +72 -0
  151. package/src/commands/test.ts +19 -14
  152. package/src/detectors/acronym-context.ts +16 -0
  153. package/src/detectors/acronym-expansion.ts +132 -1
  154. package/src/detectors/agreement-slip.ts +191 -0
  155. package/src/detectors/content-morphemes.ts +19 -0
  156. package/src/detectors/en-shape.ts +0 -269
  157. package/src/detectors/heading-echo.ts +12 -20
  158. package/src/detectors/heading-overlap.ts +65 -0
  159. package/src/detectors/index.ts +6 -1
  160. package/src/detectors/letter-joined-name.ts +15 -0
  161. package/src/detectors/lexicon.ts +6 -2
  162. package/src/detectors/orthography.ts +2 -2
  163. package/src/detectors/oxford-comma.ts +402 -0
  164. package/src/detectors/signals.ts +32 -9
  165. package/src/detectors/stacked-hedge.ts +6 -3
  166. package/src/detectors/stray-space.ts +40 -0
  167. package/src/detectors/structure.ts +10 -2
  168. package/src/document.ts +25 -4
  169. package/src/genre-parse.ts +30 -5
  170. package/src/genre-suggest.ts +15 -2
  171. package/src/line-paragraphs.ts +4 -1
  172. package/src/mask.ts +2 -11
  173. package/src/number-name.ts +1 -1
  174. package/src/opening-line.ts +17 -0
  175. package/src/orthography.ts +10 -2
  176. package/src/paragraph-length.ts +9 -0
  177. package/src/plugin.ts +6 -0
  178. package/src/quoted-span.ts +1 -1
  179. package/src/rule-load.ts +8 -0
  180. package/src/run-semantic.ts +28 -20
  181. package/src/run.ts +5 -1
  182. package/src/semantic.ts +11 -3
  183. package/src/span-merge.ts +13 -0
  184. package/src/speaker-labels.ts +129 -0
  185. package/src/stray-space.ts +81 -0
  186. package/src/structure/relative-resolve.ts +34 -19
  187. package/src/team-names.ts +13 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speaker-labels.d.ts","sourceRoot":"","sources":["../src/speaker-labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AA0HxC,iCAAiC;AACjC,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,IAAI,EAKhD,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * 戯曲・台本・議事録・書き起こしの、話し手の名前(`ALGERNON.`、行頭の `夫` と全角空白、`○事務局`)。
3
+ * 名前は誰が話すかの印であって本文ではない。文として数えると、名前だけの文が増え、名前が固有名詞と言い回しの繰り返しに入る。
4
+ *
5
+ * 形だけで決める。同じ形の行頭の名前が、MIN_SPEAKERS 人以上それぞれ MIN_TURNS 回以上繰り返され、どれも後に発言が続き、
6
+ * その形の行が文書の段落の多くを始める。1 つの名前の繰り返しは見出し(○ と全角空白の後の「注意事項」)、
7
+ * 繰り返されない名前は偶然、ときどき出るだけの `NOTE:` `WARNING:` は注記なので、話し手と読まない。
8
+ * そう読めた形では、1 度しか話さない人の名前も話し手の名前とする(議事録の委員)。
9
+ */
10
+ /** 話し手と読むのに要る、繰り返す名前の数。 */
11
+ const MIN_SPEAKERS = 2;
12
+ /** 名前が繰り返されたと読む回数。 */
13
+ const MIN_TURNS = 3;
14
+ /** 対話と読むのに要る、その形の行の数。数回の注記(NOTE: と WARNING:)は対話ではない。 */
15
+ const MIN_DIALOGUE_TURNS = 10;
16
+ /** その形の行が始める段落の割合の下限。会議録は長い発言が何段落も続くので、戯曲より低い。 */
17
+ const MIN_TURN_SHARE = 0.1;
18
+ /**
19
+ * 英語の名前は大文字で書いたものだけ(ALGERNON、LADY BRACKNELL、Mr. SMITH)。
20
+ * 大文字小文字まじりの「Title:」「Notes:」「Content-Type:」は、記録や表の項目の名前と形が同じで、見分けられない。
21
+ */
22
+ const CAPS_WORD = String.raw `[A-Z][A-Z'’&-]*\.?`;
23
+ const CAPS_NAME = String.raw `(?:[A-Z][a-z]{1,3}\. )?${CAPS_WORD}(?: ${CAPS_WORD}){0,3}`;
24
+ /** 日本語の名前に入らない文字。空白、括弧、句読点、かぎ括弧、コロン。 */
25
+ const JA_NAME = String.raw `[^\s\u3000()()、。,.「」『』::]`;
26
+ /** 各 pattern の 1 番目の組が行頭の空白、2 番目が覆う範囲、`name` の組が名前。 */
27
+ const SHAPES = [
28
+ { id: "caps", pattern: new RegExp(String.raw `^(\s*)((?<name>${CAPS_NAME})[.:]?)\s*$`, "u"), alone: true },
29
+ { id: "caps", pattern: new RegExp(String.raw `^(\s*)((?<name>${CAPS_NAME})[.:])\s+\S`, "u"), alone: false },
30
+ { id: "mark", pattern: new RegExp(String.raw `^([ \t\u3000]*)([○◯〇](?<name>${JA_NAME}{1,20})(?:([^)\n]*))?)[ \t\u3000]*$`, "u"), alone: true },
31
+ { id: "mark", pattern: new RegExp(String.raw `^([ \t\u3000]*)([○◯〇](?<name>${JA_NAME}{1,20})(?:([^)\n]*))?\u3000+)\S`, "u"), alone: false },
32
+ { id: "spaced", pattern: new RegExp(String.raw `^([ \t]*)((?<name>${JA_NAME}{1,10})\u3000+)\S`, "u"), alone: false },
33
+ { id: "quote", pattern: new RegExp(String.raw `^([ \t]*)((?<name>${JA_NAME}{1,10}))[ \t]*「`, "u"), alone: false },
34
+ ];
35
+ /**
36
+ * 名前でないもの。番号(数字・漢数字・ローマ数字・「第」で始まる序数・1 字の仮名)は見出しや項目の印で、話し手ではない。
37
+ * 助詞で終わる語は地の文の主語(「私は「…」」)。英字 1 字は、名前より略語や項目の印が多い。
38
+ */
39
+ const NUMERAL = /^[\d0-9一二三四五六七八九十百千〇IVXLCDM]+(?:の[\d0-9一二三四五六七八九十百千〇]+)*$/u;
40
+ const ORDINAL = /^第[\d0-9一二三四五六七八九十百千〇]/u;
41
+ const DIGIT = /[\d0-9]/u;
42
+ const SINGLE_KANA = /^[\p{Script=Hiragana}\p{Script=Katakana}]$/u;
43
+ const LETTER = /\p{L}/u;
44
+ const PARTICLE_END = /[はがもをにへとでやの]$/u;
45
+ const isName = (shape, name) => LETTER.test(name) &&
46
+ !NUMERAL.test(name.replace(/[\s.'’&-]/gu, "")) &&
47
+ !ORDINAL.test(name) &&
48
+ !DIGIT.test(name) &&
49
+ !SINGLE_KANA.test(name) &&
50
+ !(shape === "quote" && PARTICLE_END.test(name)) &&
51
+ !(shape === "caps" && name.replace(/[^A-Z]/gu, "").length < 2);
52
+ const linesOf = (text) => {
53
+ const scan = { start: 0 };
54
+ return text.split("\n").map((raw) => {
55
+ const line = { start: scan.start, text: raw.replace(/\r$/u, "") };
56
+ scan.start += raw.length + 1;
57
+ return line;
58
+ });
59
+ };
60
+ const isBlank = (line) => line === undefined || line.text.trim() === "";
61
+ /** 名前だけの行は、次の行に発言があるときだけ話し手の名前(空行の後の大文字の行は見出し)。 */
62
+ const candidateOf = (lines, index) => {
63
+ const line = lines[index];
64
+ if (line === undefined)
65
+ return undefined;
66
+ return SHAPES.flatMap((shape) => {
67
+ const match = shape.pattern.exec(line.text);
68
+ const lead = match?.[1];
69
+ const label = match?.[2];
70
+ const name = match?.groups?.["name"]?.replace(/[.:]$/u, "");
71
+ if (lead === undefined || label === undefined || name === undefined || !isName(shape.id, name))
72
+ return [];
73
+ if (shape.alone && isBlank(lines[index + 1]))
74
+ return [];
75
+ const start = line.start + lead.length;
76
+ return [{ shape: shape.id, name, span: { start, end: start + label.length } }];
77
+ })[0];
78
+ };
79
+ const countBy = (items, keyOf) => items.reduce((counts, item) => counts.set(keyOf(item), (counts.get(keyOf(item)) ?? 0) + 1), new Map());
80
+ const speakerKey = (candidate) => `${candidate.shape}\n${candidate.name}`;
81
+ /** 形ごとに、MIN_TURNS 回以上出る名前が MIN_SPEAKERS 人以上いるか。 */
82
+ const speakerShapes = (candidates) => {
83
+ const turns = countBy(candidates, speakerKey);
84
+ const speakers = [...new Map(candidates.map((candidate) => [speakerKey(candidate), candidate])).values()];
85
+ const repeated = speakers.filter((speaker) => (turns.get(speakerKey(speaker)) ?? 0) >= MIN_TURNS);
86
+ const perShape = countBy(repeated, (speaker) => speaker.shape);
87
+ return new Set([...perShape].filter(([, count]) => count >= MIN_SPEAKERS).map(([shape]) => shape));
88
+ };
89
+ /** 空行の後から始まる、空でない行のまとまり(段落)の数。 */
90
+ const paragraphCount = (lines) => lines.filter((line, index) => !isBlank(line) && (index === 0 || isBlank(lines[index - 1]))).length;
91
+ /** 話し手の形のうち、その形の行が MIN_DIALOGUE_TURNS 以上あり、段落の MIN_TURN_SHARE 以上を始めるもの。 */
92
+ const dialogueShapes = (candidates, paragraphs) => {
93
+ const turns = countBy(candidates, (candidate) => candidate.shape);
94
+ return new Set([...speakerShapes(candidates)].filter((shape) => {
95
+ const count = turns.get(shape) ?? 0;
96
+ return count >= MIN_DIALOGUE_TURNS && count >= paragraphs * MIN_TURN_SHARE;
97
+ }));
98
+ };
99
+ /** text の中の話し手の名前の範囲。発言は含まない。 */
100
+ export const speakerLabels = (text) => {
101
+ const lines = linesOf(text);
102
+ const candidates = lines.flatMap((_, index) => candidateOf(lines, index) ?? []);
103
+ const shapes = dialogueShapes(candidates, paragraphCount(lines));
104
+ return candidates.filter((candidate) => shapes.has(candidate.shape)).map((candidate) => candidate.span);
105
+ };
106
+ //# sourceMappingURL=speaker-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speaker-labels.js","sourceRoot":"","sources":["../src/speaker-labels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Sentence } from "./plugin.ts";
2
+ /** between-phrases は助詞の後ろ(文節の切れ目)、inside-phrase は文節を始められない語の前(助詞・助動詞・名詞に続く「する」)。 */
3
+ export type JointKind = "between-phrases" | "inside-phrase";
4
+ /** offset は前の語の終わり(文書の座標)。before / after は境目の両側の語。 */
5
+ export type Joint = {
6
+ readonly offset: number;
7
+ readonly kind: JointKind;
8
+ readonly spaced: boolean;
9
+ readonly before: string;
10
+ readonly after: string;
11
+ };
12
+ /**
13
+ * 文の中の、日本語の語と語の境目のうち、空けるか詰めるかを数えるもの。written は本文でないものを覆う前の、文と同じ範囲。
14
+ * 英字・数字との境目は latin-spacing が見るので入れない。
15
+ */
16
+ export declare const phraseJoints: (sentence: Sentence, written: string) => Joint[];
17
+ //# sourceMappingURL=stray-space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stray-space.d.ts","sourceRoot":"","sources":["../src/stray-space.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AAIzD,oFAAoF;AACpF,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE5D,sDAAsD;AACtD,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AA6DrJ;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,UAAU,QAAQ,EAAE,SAAS,MAAM,KAAG,KAAK,EAMvE,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { isJapanese } from "./orthography.js";
2
+ import { isWithinAny, quotedIn } from "./quoted-span.js";
3
+ const SPACES = /^[ \u3000]+$/u;
4
+ const PARTICLE = new Set(["ADP", "SCONJ"]);
5
+ // 文節の頭に立てない語。「確認 しました」の「する」は名詞の後ろのときだけ(「し始める」の「し」は動詞の頭に立つ)。
6
+ const BOUND = new Set(["ADP", "SCONJ", "PART", "AUX"]);
7
+ const LIGHT_VERB = "する";
8
+ /**
9
+ * 空白の後ろの「が」を、解析器は文頭の接続詞(「が、」)と読む。一字の接続詞(が・と・や・か)は助詞として扱う。
10
+ * 二字以上(また・なお)は文節を始める接続詞。
11
+ */
12
+ const isBound = (token) => BOUND.has(token.pos) || (token.pos === "CCONJ" && [...token.surface].length === 1);
13
+ const kindOf = (left, right) => {
14
+ if (isBound(right) || (right.lemma === LIGHT_VERB && left.pos === "NOUN"))
15
+ return "inside-phrase";
16
+ // 名詞どうし(担当 田中、赤坂 文弥、フルデスクトップ モード)は名札・名前・複合語の書き方で、数えない。
17
+ return PARTICLE.has(left.pos) ? "between-phrases" : undefined;
18
+ };
19
+ /**
20
+ * 行(か文)の頭の語か。助詞は前の語に付くので、行頭の「助詞」(「ヘ」)は項目の記号を読み違えたもので、後ろの空白は記号と本文の区切り。
21
+ * 行頭の内容語(折り返した「確認 しました」の「確認」)は語句の頭なので、ここでは外さない。
22
+ */
23
+ const isLineHead = (text, at) => text.slice(text.lastIndexOf("\n", at - 1) + 1, at).trim() === "";
24
+ const isWord = (token) => token.surface.trim() !== "";
25
+ const pairsOf = (tokens) => tokens.filter(isWord).flatMap((right, index, words) => {
26
+ const left = words[index - 1];
27
+ return left === undefined ? [] : [{ left, right }];
28
+ });
29
+ // 強調とリンクの括弧。読み手には見えない。
30
+ const CHROME = /[*_~[\]]/gu;
31
+ /**
32
+ * 空けたか詰めたか。間が何も無いか強調・リンクの括弧だけなら詰めた、書き手が書いた空白(半角・全角)だけなら空けた。
33
+ * 括弧の隣の空白(「**…こと** とする」「手順は [README]」)は、日本語の隣で強調が効かない Markdown のための空白なので数えない。
34
+ * 改行(Markdown の改行や、行の折り返し)や、見える字を覆った空白(コード)をまたぐ語も、境目に数えない。
35
+ */
36
+ const spacing = (sentence, written, pair) => {
37
+ const [from, to] = [pair.left.span.end - sentence.span.start, pair.right.span.start - sentence.span.start];
38
+ const gap = written.slice(from, to);
39
+ if (gap.replace(CHROME, "") === "")
40
+ return false;
41
+ return SPACES.test(gap) ? true : undefined;
42
+ };
43
+ const jointOf = (sentence, written, quoted, pair) => {
44
+ const { left, right } = pair;
45
+ if (!isJapanese(left.surface.at(-1)) || !isJapanese(right.surface.at(0)))
46
+ return undefined;
47
+ const spaced = spacing(sentence, written, pair);
48
+ if (spaced === undefined || isWithinAny(quoted, { start: left.span.start, end: right.span.end }))
49
+ return undefined;
50
+ const kind = kindOf(left, right);
51
+ if (kind === undefined || (kind === "between-phrases" && isLineHead(sentence.text, left.span.start - sentence.span.start)))
52
+ return undefined;
53
+ return { offset: left.span.end, kind, spaced, before: left.surface, after: right.surface };
54
+ };
55
+ /**
56
+ * 文の中の、日本語の語と語の境目のうち、空けるか詰めるかを数えるもの。written は本文でないものを覆う前の、文と同じ範囲。
57
+ * 英字・数字との境目は latin-spacing が見るので入れない。
58
+ */
59
+ export const phraseJoints = (sentence, written) => {
60
+ const quoted = quotedIn(sentence);
61
+ return pairsOf(sentence.tokens ?? []).flatMap((pair) => {
62
+ const joint = jointOf(sentence, written, quoted, pair);
63
+ return joint === undefined ? [] : [joint];
64
+ });
65
+ };
66
+ //# sourceMappingURL=stray-space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stray-space.js","sourceRoot":"","sources":["../src/stray-space.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"relative-resolve.d.ts","sourceRoot":"","sources":["../../src/structure/relative-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA6MlD,eAAO,MAAM,eAAe,GAAI,MAAM,aAAa,EAAE,eAAe,MAAM,GAAG,SAAS,KAAG,aAGxF,CAAC"}
1
+ {"version":3,"file":"relative-resolve.d.ts","sourceRoot":"","sources":["../../src/structure/relative-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA4NlD,eAAO,MAAM,eAAe,GAAI,MAAM,aAAa,EAAE,eAAe,MAAM,GAAG,SAAS,KAAG,aAGxF,CAAC"}
@@ -68,22 +68,22 @@ const continued = (level, node, context) => {
68
68
  return undefined;
69
69
  const parts = origin.target.split(".");
70
70
  const kept = level - context.articleLevel + 1;
71
- return parts.length < kept ? undefined : { target: parts.slice(0, kept).join("."), document: origin.document };
71
+ return parts.length < kept ? undefined : { ...origin, target: parts.slice(0, kept).join(".") };
72
72
  };
73
73
  /**
74
74
  * 参照が名指しした深さを覚える。名指しは、書き出しの深さ(第〇条なら条、前項なら項)から番地の深さまで。
75
75
  * 番地を深さで切る起点は条。条より外のまとまりは番地の形が違うので覚えない。
76
76
  */
77
- const remember = (context, target, document, from) => {
77
+ const remember = (context, reference, from) => {
78
78
  const articleLevel = context.articleLevel;
79
79
  // 章・節は番地の形(ch1)が条から始まらないので覚えない。覚えると「同条」が章を指してしまう。
80
80
  if (articleLevel === undefined || from < articleLevel)
81
81
  return;
82
- const parts = target.split(".");
82
+ const parts = reference.target.split(".");
83
83
  parts.forEach((_, index) => {
84
84
  const level = articleLevel + index;
85
85
  if (level >= from)
86
- context.last.set(level, { target: parts.slice(0, index + 1).join("."), document });
86
+ context.last.set(level, { ...reference, target: parts.slice(0, index + 1).join(".") });
87
87
  });
88
88
  };
89
89
  /** 「第二項第三号」を足す。一つ深いものは続け、二つ深い号は番号の無い第 1 項の中(x.1.n)に置く。 */
@@ -112,12 +112,16 @@ const baseOf = (way, node, anchor, last, context) => {
112
112
  }
113
113
  return anchor === undefined ? undefined : byPosition(way, Number(node.attrs["count"]), anchor);
114
114
  };
115
- /** 同と並びの続きは、元の参照が他の文書を指していれば、それを引き継ぐ。前・次・本はこの文書の中。 */
116
- const documentOf = (way, node, last, context) => {
115
+ /** 同と並びの続きは、元の参照が指した文書を引き継ぐ。前・次・本はこの文書の中。 */
116
+ const citedOf = (way, node, last, context) => {
117
117
  if (way === "same")
118
- return last?.document;
119
- return way === "continue" ? continued(Number(node.attrs["level"]), node, context)?.document : undefined;
118
+ return last;
119
+ return way === "continue" ? continued(Number(node.attrs["level"]), node, context) : undefined;
120
120
  };
121
+ const citedAttrs = (cited) => ({
122
+ ...(cited?.document === undefined ? {} : { document: cited.document }),
123
+ ...(cited?.unitWord === undefined ? {} : { unitWord: cited.unitWord }),
124
+ });
121
125
  const resolveOne = (node, path, context) => {
122
126
  const way = String(node.attrs["relative"]);
123
127
  const level = Number(node.attrs["level"]);
@@ -128,12 +132,11 @@ const resolveOne = (node, path, context) => {
128
132
  if (place === undefined)
129
133
  return undefined;
130
134
  const fallback = fallbackOf(place, context.implicitLevel);
131
- const document = documentOf(way, node, last, context);
132
135
  const attrs = {
133
136
  target: place.address,
134
137
  label: String(node.attrs["label"]),
135
138
  ...(fallback === undefined ? {} : { fallback }),
136
- ...(document === undefined ? {} : { document }),
139
+ ...citedAttrs(citedOf(way, node, last, context)),
137
140
  };
138
141
  return { ...node, attrs };
139
142
  };
@@ -142,19 +145,17 @@ const isRelative = (node) => node.kind === "reference" && node.attrs["relative"]
142
145
  const walk = (node, path, context) => {
143
146
  if (isRelative(node)) {
144
147
  const resolved = resolveOne(node, path, context);
145
- const target = resolved === undefined ? undefined : String(resolved.attrs["target"]);
146
- const document = optional(resolved?.attrs["document"]);
147
- if (target !== undefined)
148
- context.byStart.set(node.span.start, { target, document });
149
- if (target !== undefined)
150
- remember(context, target, document, Number(node.attrs["names"] ?? node.attrs["level"]));
148
+ if (resolved === undefined)
149
+ return undefined;
150
+ const reference = lastOf(resolved);
151
+ context.byStart.set(node.span.start, reference);
152
+ remember(context, reference, Number(node.attrs["names"] ?? node.attrs["level"]));
151
153
  return resolved;
152
154
  }
153
155
  if (node.kind === "reference") {
154
- const target = String(node.attrs["target"]);
155
- const document = optional(node.attrs["document"]);
156
- context.byStart.set(node.span.start, { target, document });
157
- remember(context, target, document, context.articleLevel ?? 0);
156
+ const reference = lastOf(node);
157
+ context.byStart.set(node.span.start, reference);
158
+ remember(context, reference, context.articleLevel ?? 0);
158
159
  }
159
160
  const inside = [...path, node];
160
161
  const children = node.children.flatMap((child) => {
@@ -164,6 +165,11 @@ const walk = (node, path, context) => {
164
165
  return { ...node, children };
165
166
  };
166
167
  const optional = (value) => (value === undefined ? undefined : String(value));
168
+ const lastOf = (reference) => ({
169
+ target: String(reference.attrs["target"]),
170
+ document: optional(reference.attrs["document"]),
171
+ unitWord: optional(reference.attrs["unitWord"]),
172
+ });
167
173
  const articlesOf = (node) => {
168
174
  const place = node.kind === "article" ? placeOf(node) : undefined;
169
175
  return [...(place === undefined ? [] : [place]), ...node.children.flatMap(articlesOf)];
@@ -1 +1 @@
1
- {"version":3,"file":"relative-resolve.js","sourceRoot":"","sources":["../../src/structure/relative-resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relative-resolve.js","sourceRoot":"","sources":["../../src/structure/relative-resolve.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"team-names.d.ts","sourceRoot":"","sources":["../src/team-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AA+BxC;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,SAAS,MAAM,EAAE,KAAG,IAAI,EAA8D,CAAC;AAEtI,yCAAyC;AACzC,eAAO,MAAM,UAAU,GAAI,OAAO,SAAS,IAAI,EAAE,EAAE,OAAO,MAAM,EAAE,KAAK,MAAM,KAAG,OAAqE,CAAC"}
1
+ {"version":3,"file":"team-names.d.ts","sourceRoot":"","sources":["../src/team-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AA2BxC;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,SAAS,MAAM,EAAE,KAAG,IAAI,EAIpE,CAAC;AAEJ,yCAAyC;AACzC,eAAO,MAAM,UAAU,GAAI,OAAO,SAAS,IAAI,EAAE,EAAE,OAAO,MAAM,EAAE,KAAK,MAAM,KAAG,OAAqE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { mergeSpans } from "./span-merge.js";
1
2
  const SPACE = /\s/u;
2
3
  const ESCAPE = /[.*+?^${}()|[\]\\]/gu;
3
4
  const WHITESPACE_RUN = String.raw `\s+`;
@@ -6,29 +7,25 @@ const WRAP = String.raw `(?:\r?\n[ \t]*)?`;
6
7
  const patternOf = (name) => {
7
8
  const pieces = Array.from(name.trim()).reduce((acc, char) => {
8
9
  const previous = acc.at(-1);
9
- if (SPACE.test(char))
10
- return previous === WHITESPACE_RUN ? acc : [...acc, WHITESPACE_RUN];
10
+ if (SPACE.test(char)) {
11
+ if (previous !== WHITESPACE_RUN)
12
+ acc.push(WHITESPACE_RUN);
13
+ return acc;
14
+ }
11
15
  const escaped = char.replace(ESCAPE, "\\$&");
12
- return previous === undefined || previous === WHITESPACE_RUN ? [...acc, escaped] : [...acc, WRAP, escaped];
16
+ if (previous !== undefined && previous !== WHITESPACE_RUN)
17
+ acc.push(WRAP);
18
+ acc.push(escaped);
19
+ return acc;
13
20
  }, []);
14
21
  return new RegExp(pieces.join(""), "gu");
15
22
  };
16
23
  const occurrences = (text, name) => name.trim().length === 0 ? [] : [...text.matchAll(patternOf(name))].map((match) => ({ start: match.index, end: match.index + match[0].length }));
17
- const merged = (spans) => spans
18
- .toSorted((left, right) => left.start - right.start)
19
- .reduce((acc, span) => {
20
- const last = acc.at(-1);
21
- if (last !== undefined && span.start < last.end)
22
- acc[acc.length - 1] = { start: last.start, end: Math.max(last.end, span.end) };
23
- else
24
- acc.push(span);
25
- return acc;
26
- }, []);
27
24
  /**
28
25
  * チームが chaff.yaml の names に並べた名前が、text のどこにあるか。綴りは書かれたとおり(Apple と apple は別)。
29
26
  * 重なる出現は 1 つの範囲にまとめる。接するだけなら別の名前(並んだ 2 つの名前は 2 つと数える)。位置は text の先頭を 0 とする。
30
27
  */
31
- export const nameSpans = (text, names) => merged(names.flatMap((name) => occurrences(text, name)));
28
+ export const nameSpans = (text, names) => mergeSpans(names.flatMap((name) => occurrences(text, name)), false);
32
29
  /** [start, end) が names の範囲のどれかと重なるか。 */
33
30
  export const touchesAny = (spans, start, end) => spans.some((span) => start < span.end && span.start < end);
34
31
  //# sourceMappingURL=team-names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"team-names.js","sourceRoot":"","sources":["../src/team-names.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"team-names.js","sourceRoot":"","sources":["../src/team-names.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,KAAK,GAAG,KAAK,CAAC;AACpB,MAAM,MAAM,GAAG,sBAAsB,CAAC;AACtC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA,KAAK,CAAC;AACvC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA,kBAAkB,CAAC;AAE1C,wDAAwD;AACxD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAW,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACpE,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,QAAQ,KAAK,cAAc;gBAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1D,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,cAAc;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CACzD,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAEnJ;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAAwB,EAAU,EAAE,CAC1E,UAAU,CACR,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAChD,KAAK,CACN,CAAC;AAEJ,yCAAyC;AACzC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAsB,EAAE,KAAa,EAAE,GAAW,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC"}
package/genres.yaml CHANGED
@@ -5,6 +5,10 @@
5
5
  # A group's rules apply to every genre in it; a genre's own rules win over its group's.
6
6
  # A rule turned off here is listed under "did not run" with the genre as the reason.
7
7
  # profile: the document profile (profiles/*.yaml) this genre reads with, when chaff.yaml names none.
8
+ # suggest: when no genre is set, what makes a file look like this genre, strongest first:
9
+ # paths (the file's path), then per language an opening (the body's first line, past front matter and
10
+ # headings) or a line with min_lines (how many lines must have that shape). A wrong suggestion misleads
11
+ # more than none, so a cue is added only where the corpus shows it does not fire on other kinds.
8
12
  # Which genres a rule applies to at all is the rule's use_for; the numbers behind a level are the rule's by_genre.
9
13
 
10
14
  groups:
@@ -106,6 +110,7 @@ groups:
106
110
  no-mixed-desumasu: off
107
111
  contraction-consistency: off
108
112
  doubled-word: off
113
+ agreement-slip: off
109
114
  agentless-passive: off
110
115
  expletive-construction: off
111
116
  excessive-hedging: off
@@ -191,6 +196,11 @@ genres:
191
196
  summary:
192
197
  ja: 仕事のメールと手紙
193
198
  en: Work email and letters
199
+ # A letter is a letter even when it encloses an agreement (an offer letter), so it goes by how it opens.
200
+ # Not by an addressee line (〇〇御中, To: ...): quotes and proposals open with one too.
201
+ suggest:
202
+ ja: { opening: "^(?:拝啓|謹啓|前略)(?:\\s|$)|^件名\\s*[::]" }
203
+ en: { opening: "^(?:Dear [^\\n]{1,60}|To whom it may concern)[,:]?$|^Subject\\s*:" }
194
204
  - id: business/press-release
195
205
  name: { ja: プレスリリース・お知らせ, en: Press release and notice }
196
206
  summary:
@@ -232,6 +242,14 @@ genres:
232
242
  paths: ["(^|/)(laws?|statutes?|regulations?|kitei|kisoku)(/|[-_.])"]
233
243
  ja: { line: "(?:この|本)(?:法律|政令|省令|府令|規則|規程|条例|定款|通達)", min_lines: 2 }
234
244
  en: { line: "\\b(?:[Tt]his (?:Act|[Pp]art|[Ss]ubpart|[Rr]egulation)|[Tt]hese [Rr]egulations)\\b|^§\\s?\\d", min_lines: 3 }
245
+ # A statute or an internal rule is read article by article against its own numbers, like a contract.
246
+ # The statutes in the corpus (yarn corpus) give these no findings, deleted articles (第三条 削除) and 第十条の二 included.
247
+ rules:
248
+ numbering-gap: normal
249
+ duplicate-definition: normal
250
+ dangling-reference: normal
251
+ date-weekday-mismatch: normal
252
+ total-mismatch: normal
235
253
  - id: legal/judgment
236
254
  name: { ja: 判決, en: Court decision }
237
255
  summary:
@@ -253,10 +271,9 @@ genres:
253
271
  summary:
254
272
  ja: 使い方の説明・手順書・ヘルプ
255
273
  en: User guides, how-to pages and help
274
+ # Path only: step and procedure headings are as common in tech blogs and specifications as in manuals.
256
275
  suggest:
257
276
  paths: ["(^|/)(manuals?|guides?|how-?tos?|help|tutorials?|user-?guides?)(/|[-_.])"]
258
- ja: { line: "^#{1,6}\\s.*(?:手順|操作方法|設定方法)", min_lines: 2 }
259
- en: { line: "^#{1,6}\\s*(?:Steps?\\b|Step \\d|Prerequisites|Before you begin|Troubleshooting)", min_lines: 2 }
260
277
  - id: docs/faq
261
278
  name: { ja: よくある質問, en: FAQ }
262
279
  summary:
@@ -275,6 +292,11 @@ genres:
275
292
  paths: ["(^|/)(glossary|glossaries|yogo|用語集)(/|[-_.])"]
276
293
  ja: { line: "^#{1,6}\\s*用語集", min_lines: 1 }
277
294
  en: { line: "^#{1,6}\\s*Glossary\\b", min_lines: 1 }
295
+ # A reader looks up one entry and reads only that. A definition is a noun phrase (風の吹いてくる方向。), and sibling
296
+ # entries share one wording on purpose (Portion of labor productivity change attributed to …), which no reader sees twice.
297
+ rules:
298
+ taigen-dome-in-prose: off
299
+ ngram-repetition: off
278
300
  - id: academic/paper
279
301
  name: { ja: 論文, en: Academic paper }
280
302
  summary:
@@ -293,8 +315,11 @@ genres:
293
315
  summary:
294
316
  ja: 小説・物語
295
317
  en: Novels and stories
318
+ # A line that is a spoken line (「…」, or 「…」と云った): a sentence in quotes, not a term being defined
319
+ # (「…」とは, 「…」という, 「…」とする, 「…」と定める, 「…」と称する, 「…」と呼ぶ).
296
320
  suggest:
297
321
  paths: ["(^|/)(novels?|fiction|stories|shosetsu)(/|[-_.])"]
322
+ ja: { line: "^「[^」]+」と(?!は|い[うい]|する|定め|称|呼)|^「[^」]*[、。?!…―][^」]*」$", min_lines: 10 }
298
323
  - id: literature/essay
299
324
  name: { ja: 随筆, en: Literary essay }
300
325
  summary:
@@ -305,15 +330,21 @@ genres:
305
330
  summary:
306
331
  ja: 詩・短歌・俳句
307
332
  en: Poems and verse
333
+ # Verse lines: short lines with no sentence punctuation (a tanka's three lines; a capitalised line of English verse).
334
+ # A glossary or a list of names has short lines too, so it takes many of them.
308
335
  suggest:
309
336
  paths: ["(^|/)(poems?|poetry|tanka|haiku)(/|[-_.])"]
337
+ ja: { line: "^(?=.*[ぁ-ゖ])[ぁ-ゖゝゞァ-ヺー-ヾ一-鿿々〆]{3,20}$", min_lines: 40 }
338
+ en: { line: "^\\s{0,8}[A-Z][a-z’']*,? [^.#|*\\[\\]()<>:0-9]{6,50}[a-z,;!?’—-]$", min_lines: 80 }
310
339
  - id: literature/play
311
340
  name: { ja: 戯曲・脚本, en: Play and script }
312
341
  summary:
313
342
  ja: 戯曲・脚本
314
343
  en: Plays and scripts
344
+ # A speaker's name before the line: 妻  あたしは… (two ideographic spaces; a statute's 第一条  has one), ALGERNON.
315
345
  suggest:
316
346
  paths: ["(^|/)(plays?|screenplays?|kyakuhon)(/|[-_.])"]
347
+ ja: { line: "^[^\\s○◯●※・]{1,6}  \\S", min_lines: 20 }
317
348
  en: { line: "^[A-Z][A-Z '-]{2,}\\.$", min_lines: 10 }
318
349
  - id: speech/address
319
350
  name: { ja: スピーチ・挨拶, en: Speech }
@@ -349,6 +380,7 @@ genres:
349
380
  no-mixed-desumasu: off
350
381
  contraction-consistency: off
351
382
  doubled-word: off
383
+ agreement-slip: off
352
384
  sasete-itadaku: off
353
385
  double-keigo: off
354
386
  cushion-phrase-density: off
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chaffjs",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "Prose validation harness. Finds what is hard to read, and never rewrites it for you.",
5
5
  "keywords": [
6
6
  "chaff",
@@ -55,8 +55,8 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@anthropic-ai/sdk": "^0.125.0",
58
- "@chaffjs/lang-en": "0.14.0",
59
- "@chaffjs/lang-ja": "0.15.0",
58
+ "@chaffjs/lang-en": "0.15.0",
59
+ "@chaffjs/lang-ja": "0.16.0",
60
60
  "mdast-util-from-markdown": "^2.0.3",
61
61
  "mdast-util-frontmatter": "^2.0.1",
62
62
  "mdast-util-gfm-table": "^2.0.0",
@@ -0,0 +1,36 @@
1
+ id: agreement-slip
2
+ layer: L3
3
+ status: experimental
4
+ how_to_find: agreement-slip
5
+ requires: [pos]
6
+ languages: [en]
7
+ extra_word_lists: [singular-determiner, plural-determiner, invariant-noun, count-adjective, dependent-possessive, finite-auxiliary, misnumbered-phrase]
8
+ severity: warning
9
+
10
+ name:
11
+ ja: 語の形が合っていない
12
+ en: Words that do not agree
13
+
14
+ why:
15
+ ja: 「a significant changes」「these new version」のように限定詞と名詞の単数・複数が食い違う文や、「Your can check」のように所有の語が主語の位置にある文は、書き換えの途中で片方だけ直した跡です。読み手はつまずき、急いで書いた文書に見えます。解析器の読みが一通りに決まる形だけを数え、単数と複数が同じ綴りの語(series / data)、代名詞にも読める this / these の直後の語、名詞を重ねた語(a sales team)は数えていません。
16
+ en: A determiner and a noun that differ in number ("a significant changes", "these new version"), or a possessive where the subject belongs ("Your can check"), is left over from an edit that fixed one word and not the other. The reader stumbles, and the document looks rushed. Only forms with one reading are counted; nouns spelled alike in both numbers ("series", "data"), a word right after "this" or "these" (which can stand alone), and nouns that modify another noun ("a sales team") are not.
17
+
18
+ message:
19
+ ja: 「{word}」で単数と複数が合っていません
20
+ en: '"{word}" mixes singular and plural'
21
+
22
+ messages:
23
+ number:
24
+ ja: 「{word}」で単数と複数が合っていません
25
+ en: '"{word}" mixes singular and plural'
26
+ possessive:
27
+ ja: 「{word}」で、所有の語が主語の位置にあります
28
+ en: '"{word}" puts a possessive where the subject belongs'
29
+
30
+ how_to_fix:
31
+ ja: 限定詞か名詞のどちらかに揃えてください(a significant change / significant changes)。所有の語なら、主語の語に直してください(Your can → You can、their is → there is)。
32
+ en: Make the determiner and the noun agree ("a significant change" or "significant changes"). For a possessive, write the subject you meant ("Your can" becomes "You can", "their is" becomes "there is").
33
+
34
+ levels: { strict: 1, normal: 1, relaxed: 1 }
35
+
36
+ use_for: [blog, business, technical, legal, docs, academic, literature, speech]
@@ -3,6 +3,7 @@ layer: L4
3
3
  status: stable
4
4
  how_to_find: empty-conclusion
5
5
  severity: warning
6
+ uses: [pos]
6
7
 
7
8
  name:
8
9
  ja: 結びに中身がない