textlint + prhで表記ゆれを検出する
proofread-helper
proofread-helperは@vvakameさんが作っている文章の校正補助ツールです。(TechBoosterとかの執筆で使っている?らしいです)
機能としては表記ゆれの辞書を指定して、そのルールに則って文章のチェック、また期待する単語への書き換えを行うことができます。
ものすごくざっくり書くと、期待する単語と表記ゆれを補足する正規表現の組み合わせを持った辞書を作ってチェックするような形です。
仕組み的にはazu/technical-word-rulesと殆ど同じですが、辞書をyaml形式で書けたり、辞書内に期待通りに動いているのかの簡単なテストも書くことができます。 なので、辞書の追加や管理がしやすいと思います。
例えば、以下のように辞書を書くことができます。
version: 1
rules:
# expectedのみだと 大文字小文字全角半角の統一 されてるかをチェックできる
- expected: jQuery
specs:
- from: jquery
to: jQuery
- from: JQUERY
to: jQuery
# patternにマッチするものはexpecetedが本来の表現であるというルール
# ディフォルト => デフォルト
# 表現の統一を図る
- expected: デフォルト
pattern: ディフォルト
今回このproofread-helperをtextlintから扱えるazu/textlint-rule-prhというルールを作ってみました。
textlintとは
textlintについてはMarkdownなどをルールを元にチェックできるツールで、詳しくは以下の記事を見てみて下さい。
インストール/使い方
実際にインストールとして文章をチェックしてみます。 次のリポジトリに同様の設定を行ったサンプルを用意してあります。
(サンプルでは-g
ではなく-D
でインストールしています)
1: textlintとtextlint-rule-prhをインストール
npm install -g textlint textlint-rule-prh
2: proofread-helperの辞書を追加する
proofread-helperにはデフォルトでWEB+DBをベースとした辞書が入っています。
今回は最小限のルールにしたいので、prh.yml
という名前でproofread-helperの辞書を追加します。
version: 1
rules:
- expected: jQuery
specs:
- from: jquery
to: jQuery
- from: JQUERY
to: jQuery
3: .textlintrc
を作成する
.textlintrc
はtextlintの設定ファイルで、どのルールを使うかとルール別の設定を追加できます。
textlint-rule-prhはrulePaths
にproofread-helperの辞書ファイルへのパスを設定する必要があります。
今回は先ほど作成したprh.yml
へのファイルパスを指定します。
{
"rules": {
"prh": {
"rulePaths": [
"./prh.yml"
]
}
}
}
文章をチェックする
textlintを使って文章をチェックしてみます。
$ textlint README.md
# サンプルプロジェクトではnpm run-script経由
# npm run textlint
実行結果を見てみると
> textlint README.md
/Users/azusa_okayama/.ghq/github.com/azu/prh-textlint-example/README.md
10:1 error JQuery => jQuery prh
✖ 1 problem (1 error, 0 warnings)
10行目の1列目にJQuery
となっていますが、それはjQuery
が正しいのでは?と提案してくれます。
$ textlint -f preety-error
でpreety-error
というフォーマッターを使ってみるともう少し見た目でも分かりやすいです。
Markdownを安全に処理する
これはtextlintの特徴なのですが、textlintはMarkdownをパースしてASTを介してルールが処理するので、単純なキーワードマッチとは少し異なります。
例えば、textlint-rule-prhでは次のようなリンクはチェックの対象から外しています。
[jquery.com](http://jquery.com/) というリンクの文字列は無視できる。
リンクや引用などは自分で書いた文字列じゃない事があるので、この部分の文字列をチェックして引っかかるとストレスなので、無視するようになっています。
proofread-helperでもignoreのルールが書けますが、正規表現で書くことになるのでtextlint経由で使った場合との違いになると思います。
辞書の追加
先程も書いたようにproofread-helperはyamlファイルに追加するだけで、 辞書を追加していけるのでプロジェクトごとの辞書を持ちやすいです。
JavaScript-Plugin-Architectureという書籍でも、この書籍内でのみ使うルールを管理して使っています。
例えば、"プラグインアーキテクチャ"という単語で表記ゆれが起きていたので、 辞書に以下のようなルールを追加してから修正するということが簡単に行えます。
version: 1
rules:
- expected: プラグインアーキテクチャ
pattern:
- プラグイン機構
- プラグインのアーキテクチャ
おわりに
textlintからproofread-helperを扱えるazu/textlint-rule-prhというtextlintルールについて紹介しました。
proofread-helperは簡単にルールを追加できて文章の表記ゆれをチェックするのに、とても便利です。
今回はtextlintから扱うことでMarkdownを安全に処理できるようになり、他のtextlintルールと合わせて使えるようにしました。
お知らせ欄
次に書くかもしれない記事候補
興味がありましたらIssues · efcl/efcl.github.ioからご意見下さい