言語

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-parallel1 文に中黒の並列が何組も入る所
latin-spacing日本語と英数字の間に空白を入れるかどうかの混在

latin-spacing は、空白を入れる書き方も入れない書き方も認めます。 1 つの文書で両方が混ざっているときに、少ないほうを指摘します。

英語だけのルール

ルール見るもの
adverb-overuse-ly 副詞の密度
expletive-constructionThere is / It is … that
sentence-initial-conjunction-runAnd / 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 つ以外の名前で出したパッケージは、入れても読まれません。