
皆さんこんにちは。typoの達人です。2019/4/1からブログを書き始めて1ヵ月ほどになりますが、いまだにtypoが多くて悩まされております。
今回はそんな自分を変えるべく、lintとAIツールを駆使してtypo環境を改善していきます。
textlint
textlintとは
文章作成などに使える自然言語のためのlintツールです。 textlint.github.io
環境構築
Node.jsはインストール済みの前提で進めていきます
npm install --save-dev textlint #スペースの設定 npm install --save-dev textlint-rule-preset-ja-spacing #細かい表記ルールの設定 npm install --save-dev textlint-rule-preset-ja-technical-writing #表記揺れの設定 npm install --save-dev textlint-rule-proofdict
※パッケージをインストールする際にインストールオプション(--globalか--save-dev)を途中から変更するとエラーが発生するので注意してください。
textlint/failed-to-load-textlints-module.md at master · textlint/textlint · GitHub

vscode-textlint - Visual Studio Marketplace
VS Codeのコマンドパレットで
textlint: Create '.textlintrc' File
を実行します。

※ファイルを直接開いている場合.textlintrcファイルの作成に失敗しますのでご注意ください。
textlintを自分好みの設定にカスタマイズする
次は公式のGitHubの説明を元にカスタマイズしていきましょう。
技術文書向けルールプリセット
GitHub - textlint-ja/textlint-rule-preset-ja-technical-writing: 技術文書向けのtextlintルールプリセット
上記に記載のある設定を全て有効にする場合は、
{
"rules": {
"preset-ja-technical-writing": true
}
}
これだけで問題ありません。
以下個別の設定です。
- 1文の長さは120文字以下とする
"senten $ce-length": {
max: 120
},
- 「ですます調」、「である調」を統一します
"no-mix-dearu-desumasu": {
"preferInHeader": "",
"preferInBody": "ですます",
"preferInList": "である",
"strict": true
},
- ら抜き言葉を使用しない
"no-dropping-the-ra": true,
- 同じ助詞を連続して使用しない
"no-doubled-joshi": {
"min_interval": 1
},
スペースの設定
半角文字と全角文字の間にスペースを入れる場合の設定は下記のようになります。
"preset-ja-spacing": {
"ja-space-between-half-and-full-width": {
space: "always",
exceptPunctuation: true
}
},
が私の場合はスペースを空けることに全くこだわりがなかったので以下のような設定にしました。
"preset-ja-spacing": true,
表記揺れの検知設定
"proofdict": {
"dictURL": "https://azu.github.io/proof-dictionary/"
}
このproofdictはGitHubのリポジトリをフォークして自分用にカスタマイズができるようです。
まずは試しに使ってみたいので特に変更をかけずに使ってみます。
最終的にこのような設定ファイルになりました。
{
"filters": {},
"rules": {
"preset-ja-technical-writing": {
"sentence-length": {
max: 120
},
"ja-no-mixed-period": false,
"no-exclamation-question-mark": false,
"no-mix-dearu-desumasu": {
"preferInHeader": "",
"preferInBody": "ですます",
"preferInList": "である",
"strict": true
},
"no-dropping-the-ra": true,
"no-doubled-joshi": {
"min_interval": 1
},
},
"preset-ja-spacing": true,
"proofdict": {
"dictURL": "https://azu.github.io/proof-dictionary/"
}
}
}
これでtextlintの設定は終了になります。
Proofreading API
Proofreading APIとは
リクルートが作成している機械学習を活用した文章の怪しい箇所を検知するAPIです。
上記にAPIの使用方法とデモサイトがありますので登録してみてください。リクルートのa3rtには他にも、文章要約APIや文章分類APIなど楽しそうなAPIが多数用意されています。
textlintが作成したルールに則って構成をかけるものに対してProofreading APIはルール外のものにも適用できる可能性があるので、この2つを組み合わせることで最強の検閲機能が生まれるはずなのでは無いかと予想されるのです。
API KEYの発行

デモを試す
デモ画面より早速例文を打ち込んでみましょう。
「経験や資格や活かせる職場です」
と入力すると、
上記のような形で助詞の指摘をしてくれるようですね。
うまくいけばかなり便利です。
組み合わせて使用する
上記の2つを組み合わせてブログ執筆環境構築を試してみましょう。 Proofreading APIは何かしらツールにしてみたいのですがまずはテスト運用として以下のようにしてみます。
- VSCodeにてMarkdownでブログを作成
- textlintのエラーが出なくなるまで執筆を続ける
- エラーが出なくなったタイミングでブログの一部をProofreading APIのデモサイトにアップする
- そこで提案された文字修正を反映するかを検討する
今の段階でははてなブログの管理画面に直接ブログを入力していますので、 文章をVS Codeに移行してみます。
問題点
早速ですが問題が発生しました。上記の「ですます調」という見出しや「経験や資格や活かせる職場です」という例文が文法チェックで引っかかってしまいました。これはtextlintでは無視したいですね。


またはてなブログの場合、画像のアップロードを行ってブログに挿入をしていくのでVS Codeとの相性が悪く思えます。 精度がいいだけにもう少し相性の良いtextlint環境を整えていきたいです。
それ以外のエラーは潰せたので次にProofreading APIを使ってAIの力で文章を直してみましょう。「早速ですが」から「直してみましょう」までをデモ画面に入力してみます。

個人的にはもう少し精度がよくなると良いかなと感じました!
求人系の文章を学習データとしている
とのことなのでまだまだ伸び代がありそうですね!
最後に
タイトルで散々煽っておいて恐縮ですが、typoが減らせるとはまだまだ思えませんでした。 改善できるポイントとしてtextlintに導入したProofdictの辞書数をどれだけ網羅できるかによるなと感じております。
皆さんはどのようにブログや文章の校正をされているんでしょうか。よければ教えてください!