言語
chaff は日本語と英語の文章を見ます。言語はファイルごとに自動で決まるので、言語の指定は要りません。同じリポジトリに日本語と英語の文書が混ざっていても、それぞれの言語で見ます。
言語が決まったことを確かめる
画面の 1 行目に、ファイルごとに決まった言語が出ます。英語で書いた notes.md にかけると、次のように出ます。
$ npx chaffjs notes.md --compact
notes.md blog/tech · English genre from the default
0 findings, 71 rules not run
画面は文書の言語で出るので、英語の文書には英語で出ます。日本語のファイルなら、同じ場所に「日本語」と出ます。決まった言語が違うときは、chaff.yaml の language に ja か en を書いて固定します(設定)。
言語は本文の字で決めます。「参考文献」「References」という見出しがあれば、その下にある一覧は数えません。文献一覧は、引いた文献と同じ言語で書かれるからです。英語で書かれた文献を多く引く論文も、本文が日本語なら日本語と決まります。
画面の言語
指摘の画面は文書の言語で出ます。日本語の文書には日本語で、それ以外の文書には英語で出ます。いくつものファイルを見たときの締めの行は、言語がそろっていればその言語で出ます。混ざっていれば、下の決まりに従います。
chaff eval の測定結果も、測った文書の言語で出ます。言語の混ざった文書はまとめて測りません。
chaff test も同じです。機械と AI の判定の見出し、AI の指摘、--dry-run の送る予定は文書の言語で出ます。締めの行(合計、動かなかったときの断り、鍵の案内)は、そろっていればその言語で、混ざっていれば下の決まりに従います。
文書に結び付かない出力もあります。--help、genres、init、explain、relax、rules --json、設定の警告などです。これは chaff.yaml の language で決まり、無ければ端末のロケール(LC_ALL、LC_MESSAGES、LANG)で、それも無ければ英語で出ます。
CI のように端末のロケールが C の所で日本語にしたいときは、chaff.yaml に language: ja と書きます。
explain と rules --json の数字は、その言語の数え方になります(日本語は文字、英語は語)。
日本語と英語が混ざった文書
英語で要旨を書いた論文のように、一つの文書に両方の言語が混ざることがあります。日本語で書いた文書に英語の段落があれば、英語の文末(. ? !)で文に分けます。分けた英文は語で数え、max-sentence-length に英語で決めてある上限と比べます。英語で書いた文書に日本語の文があれば、文字で数えて、日本語で決めてある上限と比べます。
そのほかのルールは、文書の言語で決めたものだけが動きます。日本語で書いた文書にある英文には、英語だけのルールをかけません。英文も見たいときは、英語の部分を別のファイルに分けてかけてください。
どの言語でも動くルール
文の長さや見出しの繰り返しを見るルールは、日本語でも英語でも同じものが動きます。一文の長さは、日本語は文字で、英語は語で数えます。
受け身で誰がしたのかを書いていない所を見る agentless-passive も、品詞を使って両方の言語で動きます。
何がどう大事かを言わずに強めるだけの言い回しを見るルールも、共通です。検出の仕組みは一つで、語彙表だけが言語ごとにあります。ただし、新しい言語を足すには語彙表だけでは足りません。文の区切り方などを持つ言語パッケージが要ります(下の「ほかの言語を足す」)。
日本語だけのルール
日本語だけのルールには、品詞を見るものと、品詞を見ないものがあります。品詞の辞書は chaff に同梱してあるので、取得も設定も要りません。
品詞を見るルールは次のとおりです。
| ルール | 見るもの |
|---|---|
no-mixed-desumasu | です・ます と だ・である の混在 |
no-doubled-joshi | 「弊社の新製品の販売の計画」のような「の」の入れ子 |
taigen-dome-in-prose | 本文で体言止めが続く所 |
stray-space | 語句の途中の空白(「こころさんが 払った」「確認 しました」) |
stray-space も、文節ごとに空ける分かち書きを書き方の一つとして認めます。空けた所が文書の中で少ないときだけ、その空白を指摘します。
辞書を読むのに 2 秒ほどかかります。品詞を見るルールが 1 本も動かないときは、辞書を読みません。品詞を見られない言語では、黙って通さずに理由を出します。
no-doubled-joshi この言語では品詞解析が使えないため
品詞を見ないルールは次のとおりです。
| ルール | 見るもの |
|---|---|
double-keigo | 二重敬語(おっしゃられました) |
sasete-itadaku | 「させていただく」の重なり |
hiragana-fukushi | 表外漢字の副詞(殆ど・勿論) |
max-kanji-continuous | 漢字の連続(情報処理推進機構認定試験) |
no-nakaguro-parallel | 1 文に中黒の並列が何組も入る所 |
latin-spacing | 日本語と英数字の間に空白を入れるかどうかの混在 |
latin-spacing は、空白を入れる書き方も入れない書き方も認めます。
1 つの文書で両方が混ざっているときに、少ないほうを指摘します。
英語だけのルール
| ルール | 見るもの |
|---|---|
adverb-overuse | -ly 副詞の密度 |
expletive-construction | There is / It is … that |
sentence-initial-conjunction-run | And / But / So で始まる文の連続 |
title-case-consistency | 見出しの大文字化が文書の中で揃っているか |
oxford-comma-consistency | 並列の読点が文書の中で揃っているか |
contraction-consistency | 短縮形の使いかたが文書の中で揃っているか |
agreement-slip | 限定詞と名詞の単数・複数の食い違い(a significant changes)や、You can を Your can と書いた所 |
-consistency で終わるルールは、どちらの書き方が正しいかを決めません。
1 つの文書でそろっているかだけを見て、少ないほうを指摘します。
agreement-slip は品詞を見ます。
言語パッケージ
言語ごとの文の区切り方と語彙表は、言語パッケージに入っています。日本語は @chaffjs/lang-ja、英語は @chaffjs/lang-en です。
| パッケージ | 持っているもの |
|---|---|
@chaffjs/lang-ja | 文の区切り方(文末は 。!?、語の後の .、半角の !?)と語彙表 |
@chaffjs/lang-en | 文の区切り方と語彙表 |
どちらも chaff に同梱されているので、単体で入れる必要はありません。
npx chaffjs だけで、日本語と英語の文章を見られます。
ほかの言語を足す
同梱していない言語は、@chaffjs/lang-<言語> という名前のパッケージを探し、無ければ chaff-lang-<言語> を探して読みます。そのため、その言語のパッケージを入れれば、言語を足せます。
公式のものは @chaffjs/lang-<言語>、それ以外の人が出すものは chaff-lang-<言語> と名乗ります。この 2 つ以外の名前で出したパッケージは、入れても読まれません。