For Your ISHIO Blog

データ分析や機械学習やスクラムや組織とか、色々つぶやくブログです。

textlintを利用した自動チェックで、ブログ原稿の校正をサポートする。

ブログを開始して2カ月が経過しました。お酒飲みながら書いたりしていると誤字脱字が多いです。そこで、textlintというオープンソースを利用して、ブログ原稿の校正をするプロセスを挟むことにします。

目次

思い至った経緯

先日Twitter上で、u++さんから下記コメントをいただきました。

内容云々以前の、最低限の品質を担保するために、せめて誤字脱字をチェックするようにしたいと思ったのが経緯です。

textlint

textlintは、JavaScriptで書かれたテキストをチェックするオープンソースのユーティリティです。自然言語は、言語や文脈などによって書き方の正解が変わってきますが、それらをプラグインのアプローチにより解決しています。プラグインで設定した様々なルールをもとに、文章の校正をサポート可能です。

textlint.github.io

textlintのメリット

インストールを行う前に、textlintを利用することのメリットについて考えます。

  1. 人間の負荷軽減
    • 原稿のチェックは、人間が行うには非常に負荷が高い作業。コンピュータがその作業の一部を補うことで、人間の負荷を軽減する
    • 人間の能力には限界があるため、見落としをすることがある。この見落としを抑制できる
  2. ばらつきの極小化
    • 複数人で原稿をチェックする場合、人によってばらつきが必ず生じます。そのばらつきの極小化に繋がる
  3. 一貫性の担保
    • チェックする人が入れ替わった場合でも、ルールは変わらないので、一貫性のある品質を維持できる

textlintはMarkdown形式のテキストにも対応していることが、非常にメリットが大きいです。

インストールしてみる

今回はブログ記事の校正用のため、手軽に利用する手段を検討しました。textlintの開発者本人が作成したwindowsMacで利用可能なアプリケーションがあり、それを採用しています。なお、ソースコードGithubに公開されているため、CIに組み込むことなども可能です。

インストール方法は下記を参照してください。 textlintのElectronアプリを作った | Web Scratch

インストール後、デスクトップにショートカットが作成されていましたので、アプリケーションを起動します。下記のような画面が起動したらインストールは完了しています。

f:id:ishitonton:20181202130850p:plain
textlint.app

画面中心部の「Edit with textlint」には、実際にチェックしたいテキストを入力します。そのチェックの結果は右側に表示されます。

また、チェック項目は、.textlintrcというファイルで設定する必要があり、画面左側の「Setting」より編集できるようになっています。

自分流の設定を行う。

.textlintrcを編集して、自分流の設定をします。技術書用のプリセットpreset-ja-technical-writingの中から、自分で必要なルールを採用しました。採用したルールは下記になります。

  • 冗長な表現をチェックする
  • 読点は1文中に2つまでとする
  • 連続できる最大の漢字長は6文字までとする
  • 本文は「ですます調」、箇条書きは「である調」とする
  • 文末の句点記号として「。」を使う
  • 二重否定は使用しない
  • ら抜き言葉を使用しない
  • 逆接の接続助詞「が」を連続して使用しない
  • 同じ接続詞を連続して使用しない
  • 同じ助詞を連続して使用しない
  • 同一の単語が連続している場合にチェックする
  • よくある日本語の誤用をチェックする
  • 冗長な表現をチェックする

.textlintrcは、下記のとおりです。

{
  "filters": {
    "comments": true
  },
  "rules": {
    "ja-no-redundant-expression": true,
    "period-in-list-item": {
      "periodMark": ""
    },
    "preset-ja-technical-writing": {
      "no-exclamation-question-mark": {
        "allowFullWidthQuestion": false
      },
      "sentence-length": {
        "max": 90
      },
      "max-ten": {
        "max": 3
      },
      "max-kanji-continuous-len": {
        "max": 6
      },
      "no-mix-dearu-desumasu": {
        "preferInHeader": "",
        "preferInBody": "ですます",
        "preferInList": "である",
        "strict": true
      },
      "ja-no-mixed-period": {
        "periodMark": "。"
      },
      "no-double-negative-ja": true,
      "no-dropping-the-ra": true,
      "no-doubled-conjunctive-particle-ga": true,
      "no-doubled-conjunction": true,
      "no-doubled-joshi": {
        "min_interval": 1
      },
      "ja-no-successive-word": true,
      "ja-no-abusage": true
    }
  }
}

たまにエラーになりますが、アプリケーションを再起動して実行するとうまくいったりします。

チェックして結果

今回のブログをチェックした結果、21件のエラーが検知されました。

f:id:ishitonton:20181202143917p:plain

エラーメッセージの一部です。

* 文章が”。”で終わっていません。
* "することが可能です"は冗長な表現です。”することが可能”を省き簡潔な表現にすると文章が明瞭になります。
* 箇条書き:”である調”と”ですます調”が混在
* should remove period maruk("。") at end of list item

少々基準が厳しすぎたようです。いくつか誤検知もありますが、それを無視すればよいです。

利用するプリセットによって、エラーメッセージに日本語や英語がありました。また、あまり長文を検査するとアプリケーションが重くなるので注意が必要です。

良かった点としては、自分の癖がよくわかることです。例えば私の場合、箇条書きに「ですます調」と「である調」が混在していました。また句点を付けるかどうかもルールが統一されていないことに気づきました。

無視したい部分は、フィルタができるはずですが、まだうまくできていないので宿題とします。そして、もともと指摘されたSkip-Granの誤字はいまだ検知できないのであります。