chaffjs 0.2.0 → 0.3.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/backends/anthropic.d.ts +24 -0
- package/dist/backends/anthropic.d.ts.map +1 -0
- package/dist/backends/anthropic.js +44 -0
- package/dist/backends/anthropic.js.map +1 -0
- package/dist/backends/openai.d.ts +29 -0
- package/dist/backends/openai.d.ts.map +1 -0
- package/dist/backends/openai.js +33 -0
- package/dist/backends/openai.js.map +1 -0
- package/dist/backends/types.d.ts +32 -0
- package/dist/backends/types.d.ts.map +1 -0
- package/dist/backends/types.js +18 -0
- package/dist/backends/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +4 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +60 -14
- package/dist/commands/test.js.map +1 -1
- package/dist/config/load.d.ts +4 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +10 -3
- package/dist/config/load.js.map +1 -1
- package/dist/detectors/agentless-passive.d.ts +3 -0
- package/dist/detectors/agentless-passive.d.ts.map +1 -0
- package/dist/detectors/agentless-passive.js +31 -0
- package/dist/detectors/agentless-passive.js.map +1 -0
- package/dist/detectors/char-shape.d.ts +12 -0
- package/dist/detectors/char-shape.d.ts.map +1 -0
- package/dist/detectors/char-shape.js +39 -0
- package/dist/detectors/char-shape.js.map +1 -0
- package/dist/detectors/en-shape.d.ts +19 -0
- package/dist/detectors/en-shape.d.ts.map +1 -0
- package/dist/detectors/en-shape.js +176 -0
- package/dist/detectors/en-shape.js.map +1 -0
- package/dist/detectors/index.d.ts.map +1 -1
- package/dist/detectors/index.js +33 -0
- package/dist/detectors/index.js.map +1 -1
- package/dist/detectors/lexicon.d.ts +15 -0
- package/dist/detectors/lexicon.d.ts.map +1 -0
- package/dist/detectors/lexicon.js +109 -0
- package/dist/detectors/lexicon.js.map +1 -0
- package/dist/detectors/repeated-head.d.ts.map +1 -1
- package/dist/detectors/repeated-head.js +17 -5
- package/dist/detectors/repeated-head.js.map +1 -1
- package/dist/detectors/sentence-ending.d.ts +3 -0
- package/dist/detectors/sentence-ending.d.ts.map +1 -0
- package/dist/detectors/sentence-ending.js +34 -0
- package/dist/detectors/sentence-ending.js.map +1 -0
- package/dist/detectors/signals.d.ts +6 -0
- package/dist/detectors/signals.d.ts.map +1 -0
- package/dist/detectors/signals.js +183 -0
- package/dist/detectors/signals.js.map +1 -0
- package/dist/detectors/structure.d.ts +24 -0
- package/dist/detectors/structure.d.ts.map +1 -0
- package/dist/detectors/structure.js +111 -0
- package/dist/detectors/structure.js.map +1 -0
- package/dist/detectors/token-shape.d.ts +4 -0
- package/dist/detectors/token-shape.d.ts.map +1 -0
- package/dist/detectors/token-shape.js +62 -0
- package/dist/detectors/token-shape.js.map +1 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +76 -8
- package/dist/document.js.map +1 -1
- package/dist/env.d.ts +12 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +20 -0
- package/dist/env.js.map +1 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +9 -6
- package/dist/init.js.map +1 -1
- package/dist/judge.d.ts +14 -16
- package/dist/judge.d.ts.map +1 -1
- package/dist/judge.js +0 -0
- package/dist/judge.js.map +1 -1
- package/dist/levels.d.ts +1 -9
- package/dist/levels.d.ts.map +1 -1
- package/dist/levels.js +15 -3
- package/dist/levels.js.map +1 -1
- package/dist/look-at.d.ts +18 -0
- package/dist/look-at.d.ts.map +1 -0
- package/dist/look-at.js +43 -0
- package/dist/look-at.js.map +1 -0
- package/dist/plugin.d.ts +44 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/render/explain.d.ts +1 -1
- package/dist/render/explain.d.ts.map +1 -1
- package/dist/render/explain.js +12 -4
- package/dist/render/explain.js.map +1 -1
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +13 -5
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/semantic.d.ts +2 -1
- package/dist/render/semantic.d.ts.map +1 -1
- package/dist/render/semantic.js +35 -0
- package/dist/render/semantic.js.map +1 -1
- package/dist/rule-load.d.ts.map +1 -1
- package/dist/rule-load.js +27 -1
- package/dist/rule-load.js.map +1 -1
- package/dist/run-semantic.d.ts +22 -1
- package/dist/run-semantic.d.ts.map +1 -1
- package/dist/run-semantic.js +21 -10
- package/dist/run-semantic.js.map +1 -1
- package/dist/run.d.ts +6 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +34 -2
- package/dist/run.js.map +1 -1
- package/dist/sentence-shape.d.ts +6 -0
- package/dist/sentence-shape.d.ts.map +1 -0
- package/dist/sentence-shape.js +15 -0
- package/dist/sentence-shape.js.map +1 -0
- package/package.json +4 -3
- package/rules/adverb-overuse.yaml +28 -0
- package/rules/agentless-passive.yaml +28 -0
- package/rules/ai-tell.yaml +27 -0
- package/rules/concrete-evidence-density.yaml +25 -0
- package/rules/cushion-phrase-density.yaml +26 -0
- package/rules/double-keigo.yaml +27 -0
- package/rules/emoji-density.yaml +26 -0
- package/rules/excessive-hedging.yaml +26 -0
- package/rules/expletive-construction.yaml +27 -0
- package/rules/hiragana-fukushi.yaml +27 -0
- package/rules/max-kanji-continuous.yaml +26 -0
- package/rules/max-paragraph-length.yaml +25 -0
- package/rules/max-sentence-length.yaml +22 -0
- package/rules/ngram-repetition.yaml +25 -0
- package/rules/no-doubled-joshi.yaml +28 -0
- package/rules/no-mixed-desumasu.yaml +29 -0
- package/rules/no-nakaguro-parallel.yaml +27 -0
- package/rules/oxford-comma-consistency.yaml +26 -0
- package/rules/paragraph-length-variance.yaml +25 -0
- package/rules/preamble-length.yaml +25 -0
- package/rules/repeated-conjunction.yaml +26 -0
- package/rules/rule-of-three.yaml +25 -0
- package/rules/sasete-itadaku.yaml +27 -0
- package/rules/section-length-uniformity.yaml +25 -0
- package/rules/sentence-initial-conjunction-run.yaml +27 -0
- package/rules/taigen-dome-in-prose.yaml +27 -0
- package/rules/title-case-consistency.yaml +26 -0
- package/rules/undefined-acronym.yaml +25 -0
- package/rules/unqualified-superlative.yaml +26 -0
- package/src/backends/anthropic.ts +61 -0
- package/src/backends/openai.ts +46 -0
- package/src/backends/types.ts +38 -0
- package/src/cli.ts +8 -4
- package/src/commands/eval.ts +4 -1
- package/src/commands/test.ts +72 -14
- package/src/config/load.ts +11 -3
- package/src/detectors/agentless-passive.ts +34 -0
- package/src/detectors/char-shape.ts +47 -0
- package/src/detectors/en-shape.ts +187 -0
- package/src/detectors/index.ts +33 -0
- package/src/detectors/lexicon.ts +124 -0
- package/src/detectors/repeated-head.ts +17 -6
- package/src/detectors/sentence-ending.ts +37 -0
- package/src/detectors/signals.ts +199 -0
- package/src/detectors/structure.ts +119 -0
- package/src/detectors/token-shape.ts +81 -0
- package/src/document.ts +81 -9
- package/src/env.ts +20 -0
- package/src/init.ts +9 -6
- package/src/judge.ts +0 -0
- package/src/levels.ts +16 -4
- package/src/look-at.ts +53 -0
- package/src/plugin.ts +45 -3
- package/src/render/explain.ts +12 -4
- package/src/render/rules-json.ts +16 -5
- package/src/render/semantic.ts +38 -1
- package/src/rule-load.ts +28 -1
- package/src/run-semantic.ts +32 -11
- package/src/run.ts +36 -3
- package/src/sentence-shape.ts +22 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: cushion-phrase-density
|
|
2
|
+
layer: L2
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: cushion-density
|
|
5
|
+
word_list: cushion-phrase
|
|
6
|
+
severity: info
|
|
7
|
+
|
|
8
|
+
name:
|
|
9
|
+
ja: クッション言葉が多い
|
|
10
|
+
en: Too many softeners
|
|
11
|
+
|
|
12
|
+
why:
|
|
13
|
+
ja: 1 つなら礼儀ですが、重なるほど本題が遠ざかります。読み手は用件を探して読み進めることになります。
|
|
14
|
+
en: One softener is courtesy. Several push the point further away, and the reader has to hunt for it.
|
|
15
|
+
|
|
16
|
+
message:
|
|
17
|
+
ja: 「{matched}」など、クッション言葉が 1000 語あたり {density} 個あります({limit} 個まで)
|
|
18
|
+
en: '"{matched}" and other softeners: {density} per 1000 words (limit {limit})'
|
|
19
|
+
|
|
20
|
+
how_to_fix:
|
|
21
|
+
ja: 最初の 1 つだけ残して、あとは用件を先に書いてください。
|
|
22
|
+
en: Keep the first one. Lead with the request after that.
|
|
23
|
+
|
|
24
|
+
levels: { strict: 2, normal: 5, relaxed: 10 }
|
|
25
|
+
|
|
26
|
+
use_for: [business]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: double-keigo
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: phrase-match
|
|
5
|
+
word_list: double-keigo
|
|
6
|
+
languages: [ja]
|
|
7
|
+
severity: warning
|
|
8
|
+
|
|
9
|
+
name:
|
|
10
|
+
ja: 二重敬語
|
|
11
|
+
en: Doubled honorific
|
|
12
|
+
|
|
13
|
+
why:
|
|
14
|
+
ja: 1 つの動詞に同じ種類の敬語を二重にかけた形です。丁寧さは増えず、読み手には不自然に映ります。
|
|
15
|
+
en: The same kind of honorific applied twice to one verb. It does not read as more polite, only as awkward.
|
|
16
|
+
|
|
17
|
+
message:
|
|
18
|
+
ja: 「{matched}」は敬語が二重になっています
|
|
19
|
+
en: '"{matched}" applies the honorific twice'
|
|
20
|
+
|
|
21
|
+
how_to_fix:
|
|
22
|
+
ja: どちらか一方にしてください。「おっしゃられました」は「おっしゃいました」で足ります。
|
|
23
|
+
en: Keep one. "Said" with a single honorific is enough.
|
|
24
|
+
|
|
25
|
+
levels: { strict: 1, normal: 1, relaxed: 2 }
|
|
26
|
+
|
|
27
|
+
use_for: [business]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: emoji-density
|
|
2
|
+
layer: L1
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: emoji-density
|
|
5
|
+
severity: info
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 絵文字が多い
|
|
9
|
+
en: Too many emoji
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 絵文字は 1 つなら目印になりますが、並ぶと文字そのものが読めなくなります。読み上げ環境では意味を持たない音が増えます。
|
|
13
|
+
en: One emoji marks a spot. Many turn the text into decoration, and a screen reader has to say all of them.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: 1000 語あたり {density} 個の絵文字があります({limit} 個まで)
|
|
17
|
+
en: "{density} emoji per 1000 words (limit {limit})"
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: 見出しや強調で代えられるものは代えてください。
|
|
21
|
+
en: Where a heading or emphasis would do the same job, use that instead.
|
|
22
|
+
|
|
23
|
+
# 1000 語あたりの個数。件数で数えると長い文書ほど当たる。
|
|
24
|
+
levels: { strict: 3, normal: 8, relaxed: 20 }
|
|
25
|
+
|
|
26
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: excessive-hedging
|
|
2
|
+
layer: L2
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: hedging-density
|
|
5
|
+
word_list: excessive-hedging
|
|
6
|
+
severity: warning
|
|
7
|
+
|
|
8
|
+
name:
|
|
9
|
+
ja: 逃げの表現が多い
|
|
10
|
+
en: Too much hedging
|
|
11
|
+
|
|
12
|
+
why:
|
|
13
|
+
ja: 断言を避けるほど、読み手は何が決まったのか分からなくなります。1 つなら慎重さですが、重なると誰も責任を取らない文書になります。
|
|
14
|
+
en: The more the text avoids claiming, the less the reader can tell what was decided. One hedge is caution; many mean nobody is accountable.
|
|
15
|
+
|
|
16
|
+
message:
|
|
17
|
+
ja: 「{matched}」など、逃げの表現が 1000 語あたり {density} 個あります({limit} 個まで)
|
|
18
|
+
en: '"{matched}" and other hedges: {density} per 1000 words (limit {limit})'
|
|
19
|
+
|
|
20
|
+
how_to_fix:
|
|
21
|
+
ja: 言い切れるものは言い切ってください。言い切れないなら、何が分かれば言い切れるのかを書いてください。
|
|
22
|
+
en: Commit where you can. Where you cannot, say what you would need to know.
|
|
23
|
+
|
|
24
|
+
levels: { strict: 3, normal: 6, relaxed: 12 }
|
|
25
|
+
|
|
26
|
+
use_for: [business, blog, technical]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: expletive-construction
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: expletive
|
|
5
|
+
requires: [pos]
|
|
6
|
+
languages: [en]
|
|
7
|
+
severity: info
|
|
8
|
+
|
|
9
|
+
name:
|
|
10
|
+
ja: 主語を後ろへ押しやる書き出し
|
|
11
|
+
en: Expletive construction
|
|
12
|
+
|
|
13
|
+
why:
|
|
14
|
+
ja: "There is / It is ... that は、主語を後ろへ押しやって誰が何をするのかを消します。"
|
|
15
|
+
en: '"There is" and "it is ... that" push the subject to the back and drop who does what.'
|
|
16
|
+
|
|
17
|
+
message:
|
|
18
|
+
ja: '"{word} is ..." の形が文書内に {count} 回あります({limit} 回まで)'
|
|
19
|
+
en: '"{word} is ..." appears {count} times (limit {limit})'
|
|
20
|
+
|
|
21
|
+
how_to_fix:
|
|
22
|
+
ja: 主語を前に出してください。"There is a need to review" を "The board must review" に。
|
|
23
|
+
en: Put the subject first. "There is a need to review" becomes "the board must review".
|
|
24
|
+
|
|
25
|
+
levels: { strict: 1, normal: 3, relaxed: 6 }
|
|
26
|
+
|
|
27
|
+
use_for: [blog, business]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: hiragana-fukushi
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: phrase-match
|
|
5
|
+
word_list: hiragana-fukushi
|
|
6
|
+
languages: [ja]
|
|
7
|
+
severity: info
|
|
8
|
+
|
|
9
|
+
name:
|
|
10
|
+
ja: 副詞は ひらがなで
|
|
11
|
+
en: Adverb better in kana
|
|
12
|
+
|
|
13
|
+
why:
|
|
14
|
+
ja: 表外漢字の副詞は、読める人と読めない人が分かれます。ひらがなで書けば誰でも読めて、意味は変わりません。公用文でかな書きと決まっているものだけを見ています。
|
|
15
|
+
en: Adverbs written with rare kanji split readers into those who can read them and those who cannot. Kana costs nothing.
|
|
16
|
+
|
|
17
|
+
message:
|
|
18
|
+
ja: 「{matched}」は ひらがなで書くのが読みやすいです
|
|
19
|
+
en: '"{matched}" reads more easily in kana'
|
|
20
|
+
|
|
21
|
+
how_to_fix:
|
|
22
|
+
ja: かなに開いてください。「殆ど」は「ほとんど」、「勿論」は「もちろん」。
|
|
23
|
+
en: Write it in kana.
|
|
24
|
+
|
|
25
|
+
levels: { strict: 1, normal: 1, relaxed: 3 }
|
|
26
|
+
|
|
27
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: max-kanji-continuous
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: kanji-run
|
|
5
|
+
languages: [ja]
|
|
6
|
+
severity: warning
|
|
7
|
+
|
|
8
|
+
name:
|
|
9
|
+
ja: 漢字が続きすぎている
|
|
10
|
+
en: Long run of kanji
|
|
11
|
+
|
|
12
|
+
why:
|
|
13
|
+
ja: 漢字が続くと、どこで語が切れるのか読み手が探すことになります。「情報処理推進機構認定試験」は 12 字あり、区切りが見えません。
|
|
14
|
+
en: A long unbroken run of kanji forces the reader to hunt for word boundaries.
|
|
15
|
+
|
|
16
|
+
message:
|
|
17
|
+
ja: 「{word}」は漢字が {count} 字続いています({limit} 字まで)
|
|
18
|
+
en: '"{word}" runs {count} kanji together (limit {limit})'
|
|
19
|
+
|
|
20
|
+
how_to_fix:
|
|
21
|
+
ja: ひらがなを 1 つ挟むか、助詞で割ってください。「情報処理推進機構の認定試験」に。
|
|
22
|
+
en: Break it with a particle or kana.
|
|
23
|
+
|
|
24
|
+
levels: { strict: 6, normal: 8, relaxed: 12 }
|
|
25
|
+
|
|
26
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: max-paragraph-length
|
|
2
|
+
layer: L1
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: paragraph-length
|
|
5
|
+
severity: warning
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 段落が長すぎる
|
|
9
|
+
en: Paragraph too long
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 1 段落に文を詰めると、読み手はどこで息継ぎしていいか分からなくなります。
|
|
13
|
+
en: A dense paragraph gives the reader nowhere to pause.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: この段落は {count} 文あります({limit} 文まで)
|
|
17
|
+
en: This paragraph runs {count} sentences (limit {limit})
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: 話題の変わり目で段落を割ってください。
|
|
21
|
+
en: Split it where the topic turns.
|
|
22
|
+
|
|
23
|
+
levels: { strict: 3, normal: 5, relaxed: 8 }
|
|
24
|
+
|
|
25
|
+
use_for: [blog, business, technical]
|
|
@@ -25,4 +25,26 @@ levels:
|
|
|
25
25
|
ja: { strict: 70, normal: 100, relaxed: 140 }
|
|
26
26
|
en: { strict: 18, normal: 25, relaxed: 35 }
|
|
27
27
|
|
|
28
|
+
# ジャンルで読まれかたが違う。spec §9 の初期値。
|
|
29
|
+
# 社内メールの 1 文と随筆の 1 文に同じ上限を課すと、どちらかが必ず間違う。
|
|
30
|
+
by_genre:
|
|
31
|
+
business/email:
|
|
32
|
+
ja: { strict: 50, normal: 70, relaxed: 100 }
|
|
33
|
+
en: { strict: 12, normal: 18, relaxed: 25 }
|
|
34
|
+
business/meeting-notes:
|
|
35
|
+
ja: { strict: 60, normal: 80, relaxed: 110 }
|
|
36
|
+
en: { strict: 14, normal: 20, relaxed: 28 }
|
|
37
|
+
business/proposal:
|
|
38
|
+
ja: { strict: 65, normal: 90, relaxed: 125 }
|
|
39
|
+
en: { strict: 16, normal: 22, relaxed: 30 }
|
|
40
|
+
business/press-release:
|
|
41
|
+
ja: { strict: 65, normal: 90, relaxed: 125 }
|
|
42
|
+
en: { strict: 16, normal: 22, relaxed: 30 }
|
|
43
|
+
blog/essay:
|
|
44
|
+
ja: { strict: 100, normal: 140, relaxed: 180 }
|
|
45
|
+
en: { strict: 25, normal: 35, relaxed: 45 }
|
|
46
|
+
blog/owned-media:
|
|
47
|
+
ja: { strict: 65, normal: 90, relaxed: 125 }
|
|
48
|
+
en: { strict: 16, normal: 22, relaxed: 30 }
|
|
49
|
+
|
|
28
50
|
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: ngram-repetition
|
|
2
|
+
layer: L1
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: ngram-repetition
|
|
5
|
+
severity: info
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 同じ言い回しの繰り返し
|
|
9
|
+
en: Repeated phrasing
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 同じ言い回しが何度も出ると、読み手は新しいことが書かれていないと感じます。文字の並びで見ているので、どの言語でも同じように効きます。
|
|
13
|
+
en: The same phrasing again and again reads as nothing new being said. Measured on character n-grams, so it works the same in any language.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: 「{word}」が {count} 回出てきます({limit} 回まで)
|
|
17
|
+
en: '"{word}" appears {count} times (limit {limit})'
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: 2 回目以降を言い換えるか、まとめて 1 度にしてください。
|
|
21
|
+
en: Rephrase the repeats, or say it once.
|
|
22
|
+
|
|
23
|
+
levels: { strict: 3, normal: 5, relaxed: 9 }
|
|
24
|
+
|
|
25
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
id: no-doubled-joshi
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: doubled-particle
|
|
5
|
+
word_list: nesting-particle
|
|
6
|
+
requires: [pos]
|
|
7
|
+
languages: [ja]
|
|
8
|
+
severity: warning
|
|
9
|
+
|
|
10
|
+
name:
|
|
11
|
+
ja: 同じ助詞が入れ子で続いている
|
|
12
|
+
en: Nested repeated particle
|
|
13
|
+
|
|
14
|
+
why:
|
|
15
|
+
ja: 「弊社の新製品の販売の計画」のように同じ助詞が読点を挟まずに続くと、どれがどれに係るのか読み手が追えなくなります。読点で区切られた並列は数えていません。
|
|
16
|
+
en: When the same particle repeats without a break, the reader cannot tell which phrase attaches to which. Items separated by punctuation are not counted.
|
|
17
|
+
|
|
18
|
+
message:
|
|
19
|
+
ja: 「{word}」が読点を挟まずに {count} 回続いています({limit} 回まで)
|
|
20
|
+
en: '"{word}" repeats {count} times with no break (limit {limit})'
|
|
21
|
+
|
|
22
|
+
how_to_fix:
|
|
23
|
+
ja: 文を割るか、係り先を言い換えてください。「弊社の新製品の販売の計画」を「弊社が新製品を販売する計画」に。
|
|
24
|
+
en: Split the sentence, or rephrase so the attachment is explicit.
|
|
25
|
+
|
|
26
|
+
levels: { strict: 1, normal: 2, relaxed: 3 }
|
|
27
|
+
|
|
28
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: no-mixed-desumasu
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: sentence-ending
|
|
5
|
+
word_list: polite-ending
|
|
6
|
+
requires: [pos]
|
|
7
|
+
languages: [ja]
|
|
8
|
+
severity: warning
|
|
9
|
+
|
|
10
|
+
name:
|
|
11
|
+
ja: 文末の調子が混ざっている
|
|
12
|
+
en: Mixed sentence-ending register
|
|
13
|
+
|
|
14
|
+
why:
|
|
15
|
+
ja: ですます調とである調が混ざると、読み手は「誰に向けた文書か」を掴み損ねます。どちらが正しいかではなく、1 つの文書で揃っているかの問題です。
|
|
16
|
+
en: Mixing polite and plain endings leaves the reader unsure who the document addresses. Neither register is wrong; consistency within one document is the point.
|
|
17
|
+
|
|
18
|
+
message:
|
|
19
|
+
ja: この文だけ他と文末の調子が違います(文書の中で {count} 文)
|
|
20
|
+
en: "This sentence's ending register differs from the rest ({count} in this document)"
|
|
21
|
+
|
|
22
|
+
how_to_fix:
|
|
23
|
+
ja: 多いほうに揃えてください。少数派のほうを直すのが、いちばん手数が少なくて済みます。
|
|
24
|
+
en: Match the majority. Rewriting the minority is the smallest change.
|
|
25
|
+
|
|
26
|
+
# 少数派が何文までなら「混在」と見るか。これを超えたら、混在ではなく別の文体と判断して黙る。
|
|
27
|
+
levels: { strict: 5, normal: 3, relaxed: 1 }
|
|
28
|
+
|
|
29
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: no-nakaguro-parallel
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: middle-dot
|
|
5
|
+
languages: [ja]
|
|
6
|
+
severity: info
|
|
7
|
+
|
|
8
|
+
name:
|
|
9
|
+
ja: 中黒で並べすぎている
|
|
10
|
+
en: Too many items joined by middle dots
|
|
11
|
+
|
|
12
|
+
why:
|
|
13
|
+
ja: 中黒の並列は 1 組なら読めますが、1 文に何組も入ると、どの項目がどの組に属するのか追えなくなります。実文書では 1 文 4 個までは普通に読めていました。
|
|
14
|
+
en: One run of middle dots reads fine. Several runs in one sentence make it impossible to tell which item belongs to which group.
|
|
15
|
+
|
|
16
|
+
message:
|
|
17
|
+
ja: この文に中黒が {count} 個あります({limit} 個まで)
|
|
18
|
+
en: "{count} middle dots in this sentence (limit {limit})"
|
|
19
|
+
|
|
20
|
+
how_to_fix:
|
|
21
|
+
ja: 文を割るか、箇条書きにしてください。組の切れ目がはっきりします。
|
|
22
|
+
en: Use commas, or turn it into a bullet list.
|
|
23
|
+
|
|
24
|
+
# 実文書の分布から。1 文 4 個までは読める。
|
|
25
|
+
levels: { strict: 3, normal: 5, relaxed: 8 }
|
|
26
|
+
|
|
27
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: oxford-comma-consistency
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: oxford-comma
|
|
5
|
+
languages: [en]
|
|
6
|
+
severity: info
|
|
7
|
+
|
|
8
|
+
name:
|
|
9
|
+
ja: 並列の読点が揃っていない
|
|
10
|
+
en: Oxford comma use is inconsistent
|
|
11
|
+
|
|
12
|
+
why:
|
|
13
|
+
ja: 最後の and の前に読点を打つかは、スタイルガイドで割れます。どちらが正しいかは決めません。1 つの文書で混ざっていると、読み手は項目の切れ目を毎回読み直すことになります。
|
|
14
|
+
en: Whether to put a comma before the final "and" is a style-guide split. Neither is wrong. Mixed within one document, the reader re-parses every list.
|
|
15
|
+
|
|
16
|
+
message:
|
|
17
|
+
ja: この文だけ並列の読点の打ちかたが他と違います(文書の中で {count} 文)
|
|
18
|
+
en: "This list punctuates differently from the rest ({count} in this document)"
|
|
19
|
+
|
|
20
|
+
how_to_fix:
|
|
21
|
+
ja: 多いほうに揃えてください。
|
|
22
|
+
en: Match the majority.
|
|
23
|
+
|
|
24
|
+
levels: { strict: 3, normal: 2, relaxed: 1 }
|
|
25
|
+
|
|
26
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: paragraph-length-variance
|
|
2
|
+
layer: L1
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: paragraph-variance
|
|
5
|
+
severity: info
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 段落の長さが揃いすぎている
|
|
9
|
+
en: Paragraph lengths are too uniform
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 人が書くと、言いたいことの重さで段落の長さは揺れます。揃いすぎは、埋めるために長さを合わせた跡です。
|
|
13
|
+
en: When a person writes, paragraph length follows what matters. Uniform length is the mark of filling a shape.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: 段落の長さのばらつきが {variance}% しかありません({limit}% 以上ほしい)
|
|
17
|
+
en: Paragraph length varies by only {variance}% (want at least {limit}%)
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: 短くできる段落を短くしてください。全部を同じ長さにしないこと。
|
|
21
|
+
en: Let the short ones be short.
|
|
22
|
+
|
|
23
|
+
levels: { strict: 40, normal: 30, relaxed: 20 }
|
|
24
|
+
|
|
25
|
+
use_for: [blog]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: preamble-length
|
|
2
|
+
layer: L1
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: preamble-length
|
|
5
|
+
severity: info
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 本題に入るまでが長い
|
|
9
|
+
en: Too long before the point
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 業務文書の読み手は結論を探しに来ています。最初の見出しまでに段落が重なると、探す手間だけが増えます。
|
|
13
|
+
en: A reader of a business document is looking for the decision. Paragraphs before the first heading only delay it.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: 最初の見出しまでに {count} 段落あります({limit} 段落まで)
|
|
17
|
+
en: "{count} paragraphs before the first heading (limit {limit})"
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: 結論を先に書くか、前置きを見出しの下へ移してください。
|
|
21
|
+
en: Put the conclusion first, or move the preamble under a heading.
|
|
22
|
+
|
|
23
|
+
levels: { strict: 1, normal: 2, relaxed: 4 }
|
|
24
|
+
|
|
25
|
+
use_for: [business]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: repeated-conjunction
|
|
2
|
+
layer: L2
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: repeated-conjunction
|
|
5
|
+
word_list: paragraph-opener
|
|
6
|
+
severity: warning
|
|
7
|
+
|
|
8
|
+
name:
|
|
9
|
+
ja: 段落が同じ調子で始まり続ける
|
|
10
|
+
en: Paragraphs keep opening the same way
|
|
11
|
+
|
|
12
|
+
why:
|
|
13
|
+
ja: 接続詞で始まる段落は 1 つなら流れを作りますが、続くとどの段落も前の付け足しに見えて、話がどこへ向かっているのか分からなくなります。
|
|
14
|
+
en: One paragraph opening with a conjunction carries the flow. A run of them makes every paragraph an afterthought.
|
|
15
|
+
|
|
16
|
+
message:
|
|
17
|
+
ja: 接続詞で始まる段落が {count} 続いています({limit} まで)
|
|
18
|
+
en: "{count} paragraphs in a row open with a conjunction (limit {limit})"
|
|
19
|
+
|
|
20
|
+
how_to_fix:
|
|
21
|
+
ja: どれか 1 つを残して、他は言いたいことから始めてください。
|
|
22
|
+
en: Keep one. Start the others with what you want to say.
|
|
23
|
+
|
|
24
|
+
levels: { strict: 1, normal: 2, relaxed: 4 }
|
|
25
|
+
|
|
26
|
+
use_for: [business, blog, technical]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: rule-of-three
|
|
2
|
+
layer: L1
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: rule-of-three
|
|
5
|
+
severity: info
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 3 項目の箇条書きばかり
|
|
9
|
+
en: Everything comes in threes
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 3 つ並べると収まりがよいので、言いたいことが 2 つでも 4 つでも 3 つにされます。
|
|
13
|
+
en: Three items feel complete, so two become three and four become three.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: 箇条書き {total} 個のうち {count} 個が 3 項目です({limit}% まで)
|
|
17
|
+
en: "{count} of {total} lists have exactly three items ({limit}% allowed)"
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: 数を合わせるために足した項目を消してください。2 つで足りるなら 2 つで。
|
|
21
|
+
en: Drop the item you added to reach three.
|
|
22
|
+
|
|
23
|
+
levels: { strict: 50, normal: 70, relaxed: 90 }
|
|
24
|
+
|
|
25
|
+
use_for: [blog]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: sasete-itadaku
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: phrase-match
|
|
5
|
+
word_list: sasete-itadaku
|
|
6
|
+
languages: [ja]
|
|
7
|
+
severity: info
|
|
8
|
+
|
|
9
|
+
name:
|
|
10
|
+
ja: 「させていただく」が多い
|
|
11
|
+
en: Overused humble form
|
|
12
|
+
|
|
13
|
+
why:
|
|
14
|
+
ja: 1 度なら丁寧ですが、重なると誰の判断で何をするのかが消えます。「検討させていただきます」は、検討するのかしないのかを言っていません。
|
|
15
|
+
en: Once it is polite. Repeated, it hides whose decision it is and what will actually happen.
|
|
16
|
+
|
|
17
|
+
message:
|
|
18
|
+
ja: 「{matched}」が文書内に {count} 回あります({limit} 回まで)
|
|
19
|
+
en: '"{matched}" appears {count} times in this document (limit {limit})'
|
|
20
|
+
|
|
21
|
+
how_to_fix:
|
|
22
|
+
ja: 主語を立てて言い切ってください。「検討させていただきます」を「来週までに結論を出します」に。
|
|
23
|
+
en: Name the actor and commit. "We will look into it" becomes "we will decide by Friday".
|
|
24
|
+
|
|
25
|
+
levels: { strict: 1, normal: 3, relaxed: 6 }
|
|
26
|
+
|
|
27
|
+
use_for: [business, blog]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: section-length-uniformity
|
|
2
|
+
layer: L1
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: section-uniformity
|
|
5
|
+
severity: info
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 節の長さが揃いすぎている
|
|
9
|
+
en: Section lengths are too uniform
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 見出しごとに機械的に埋めると、節の長さが揃います。書くことの量は節ごとに違うはずです。
|
|
13
|
+
en: Filling every heading to the same size is what a template does, not what a writer does.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: 節の長さのばらつきが {variance}% しかありません({limit}% 以上ほしい)
|
|
17
|
+
en: Section length varies by only {variance}% (want at least {limit}%)
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: 書くことの少ない節は短いままにしてください。
|
|
21
|
+
en: Let the thin sections stay thin.
|
|
22
|
+
|
|
23
|
+
levels: { strict: 45, normal: 35, relaxed: 25 }
|
|
24
|
+
|
|
25
|
+
use_for: [blog]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: sentence-initial-conjunction-run
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: conjunction-run
|
|
5
|
+
word_list: sentence-opener
|
|
6
|
+
languages: [en]
|
|
7
|
+
severity: info
|
|
8
|
+
|
|
9
|
+
name:
|
|
10
|
+
ja: 接続詞で始まる文が続いている
|
|
11
|
+
en: Run of sentences opening with a conjunction
|
|
12
|
+
|
|
13
|
+
why:
|
|
14
|
+
ja: 接続詞で始まる文は 1 つなら効きますが、続くとどの文も前の文の付け足しに見えて、何が主張なのかが分からなくなります。
|
|
15
|
+
en: One sentence opening with "And" or "But" lands. A run of them makes every sentence read as an afterthought.
|
|
16
|
+
|
|
17
|
+
message:
|
|
18
|
+
ja: 接続詞で始まる文が {count} 文続いています({limit} 文まで)
|
|
19
|
+
en: "{count} sentences in a row open with a conjunction (limit {limit})"
|
|
20
|
+
|
|
21
|
+
how_to_fix:
|
|
22
|
+
ja: どれか 1 つを残して、他は前の文に繋ぐか独立させてください。
|
|
23
|
+
en: Keep one. Join the others to the previous sentence, or let them stand alone.
|
|
24
|
+
|
|
25
|
+
levels: { strict: 1, normal: 2, relaxed: 4 }
|
|
26
|
+
|
|
27
|
+
use_for: [blog, business]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: taigen-dome-in-prose
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: noun-ending
|
|
5
|
+
requires: [pos]
|
|
6
|
+
languages: [ja]
|
|
7
|
+
severity: info
|
|
8
|
+
|
|
9
|
+
name:
|
|
10
|
+
ja: 体言止めが続いている
|
|
11
|
+
en: Too many noun-ending sentences
|
|
12
|
+
|
|
13
|
+
why:
|
|
14
|
+
ja: 体言止めは 1 つなら効きますが、続くと文が途中で切れたように読めます。箇条書きでは普通の書きかたなので、本文だけを見ています。
|
|
15
|
+
en: One noun-ending sentence lands. Several in a row read as unfinished. Bullet lists are excluded, where the form is normal.
|
|
16
|
+
|
|
17
|
+
message:
|
|
18
|
+
ja: 本文に体言止めが {count} 文あります({limit} 文まで)
|
|
19
|
+
en: "{count} sentences end on a noun in the body text (limit {limit})"
|
|
20
|
+
|
|
21
|
+
how_to_fix:
|
|
22
|
+
ja: 述語を足してください。「〜が課題。」を「〜が課題です。」に。
|
|
23
|
+
en: Add the predicate.
|
|
24
|
+
|
|
25
|
+
levels: { strict: 2, normal: 4, relaxed: 8 }
|
|
26
|
+
|
|
27
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: title-case-consistency
|
|
2
|
+
layer: L3
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: title-case-mix
|
|
5
|
+
languages: [en]
|
|
6
|
+
severity: info
|
|
7
|
+
|
|
8
|
+
name:
|
|
9
|
+
ja: 見出しの大文字化が揃っていない
|
|
10
|
+
en: Heading capitalisation is inconsistent
|
|
11
|
+
|
|
12
|
+
why:
|
|
13
|
+
ja: Title Case と sentence case のどちらが正しいかは決めません。1 つの文書で混ざっていると、見出しの階層が変わったように見えます。
|
|
14
|
+
en: Neither Title Case nor sentence case is wrong. Mixed within one document, the headings look like they change level.
|
|
15
|
+
|
|
16
|
+
message:
|
|
17
|
+
ja: この見出しだけ他と大文字化の流儀が違います(文書の中で {count} 個)
|
|
18
|
+
en: "This heading's capitalisation differs from the rest ({count} in this document)"
|
|
19
|
+
|
|
20
|
+
how_to_fix:
|
|
21
|
+
ja: 多いほうに揃えてください。
|
|
22
|
+
en: Match the majority.
|
|
23
|
+
|
|
24
|
+
levels: { strict: 3, normal: 2, relaxed: 1 }
|
|
25
|
+
|
|
26
|
+
use_for: [blog, business, technical]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: undefined-acronym
|
|
2
|
+
layer: L1
|
|
3
|
+
status: experimental
|
|
4
|
+
how_to_find: undefined-acronym
|
|
5
|
+
severity: info
|
|
6
|
+
|
|
7
|
+
name:
|
|
8
|
+
ja: 略語が説明なしで出てくる
|
|
9
|
+
en: Acronym never expanded
|
|
10
|
+
|
|
11
|
+
why:
|
|
12
|
+
ja: 略語は読む人によって指すものが違います。社内で通じても、半年後の自分や別の部署には通じません。
|
|
13
|
+
en: An acronym means different things to different readers. What is obvious inside one team is not obvious outside it.
|
|
14
|
+
|
|
15
|
+
message:
|
|
16
|
+
ja: 「{word}」が説明なしで使われています(説明のない略語 {count} 個)
|
|
17
|
+
en: '"{word}" is used without an expansion ({count} such acronyms)'
|
|
18
|
+
|
|
19
|
+
how_to_fix:
|
|
20
|
+
ja: 初出のところで括弧に入れて展開してください。「CI(継続的インテグレーション)」のように。
|
|
21
|
+
en: Expand it in brackets at first use.
|
|
22
|
+
|
|
23
|
+
levels: { strict: 1, normal: 3, relaxed: 6 }
|
|
24
|
+
|
|
25
|
+
use_for: [business, technical]
|