omuriceman's blog

iOS / AWS / Firebase / Deep Learning を中心とした技術を発信します

typoの達人におすすめ?textlintとProofreading APIで文章ミスの無いブログ執筆環境を目指す!

f:id:omuriceman:20190505035824p:plain

皆さんこんにちは。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

次にVS Codeプラグインを入れます。

f:id:omuriceman:20190505010300p:plain

vscode-textlint - Visual Studio Marketplace

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

f:id:omuriceman:20190505010409p:plain
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リポジトリをフォークして自分用にカスタマイズができるようです。

Usage · Proofdict

まずは試しに使ってみたいので特に変更をかけずに使ってみます。

最終的にこのような設定ファイルになりました。

{
  "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です。

a3rt.recruit-tech.co.jp

上記にAPIの使用方法とデモサイトがありますので登録してみてください。リクルートのa3rtには他にも、文章要約APIや文章分類APIなど楽しそうなAPIが多数用意されています。 textlintが作成したルールに則って構成をかけるものに対してProofreading APIルール外のものにも適用できる可能性があるので、この2つを組み合わせることで最強の検閲機能が生まれるはずなのでは無いかと予想されるのです。

API KEYの発行

f:id:omuriceman:20190505022518p:plain
API KEY発行
上記よりメールアドレスを登録するとAPI KEYが発行できます。

デモを試す

デモ画面より早速例文を打ち込んでみましょう。 「経験や資格や活かせる職場です」 と入力すると、 f:id:omuriceman:20190505023728p:plain 上記のような形で助詞の指摘をしてくれるようですね。 うまくいけばかなり便利です。

組み合わせて使用する

上記の2つを組み合わせてブログ執筆環境構築を試してみましょう。 Proofreading APIは何かしらツールにしてみたいのですがまずはテスト運用として以下のようにしてみます。

  1. VSCodeにてMarkdownでブログを作成
  2. textlintのエラーが出なくなるまで執筆を続ける
  3. エラーが出なくなったタイミングでブログの一部をProofreading APIのデモサイトにアップする
  4. そこで提案された文字修正を反映するかを検討する

今の段階でははてなブログの管理画面に直接ブログを入力していますので、 文章をVS Codeに移行してみます。

問題点

早速ですが問題が発生しました。上記の「ですます調」という見出しや「経験や資格や活かせる職場です」という例文が文法チェックで引っかかってしまいました。これはtextlintでは無視したいですね。

f:id:omuriceman:20190505033059p:plain

f:id:omuriceman:20190505033114p:plain

またはてなブログの場合、画像のアップロードを行ってブログに挿入をしていくのでVS Codeとの相性が悪く思えます。 精度がいいだけにもう少し相性の良いtextlint環境を整えていきたいです。

それ以外のエラーは潰せたので次にProofreading APIを使ってAIの力で文章を直してみましょう。「早速ですが」から「直してみましょう」までをデモ画面に入力してみます。

f:id:omuriceman:20190505033125p:plain

個人的にはもう少し精度がよくなると良いかなと感じました!

求人系の文章を学習データとしている

とのことなのでまだまだ伸び代がありそうですね!

最後に

タイトルで散々煽っておいて恐縮ですが、typoが減らせるとはまだまだ思えませんでした。 改善できるポイントとしてtextlintに導入したProofdictの辞書数をどれだけ網羅できるかによるなと感じております。

皆さんはどのようにブログや文章の校正をされているんでしょうか。よければ教えてください!

参考サイト

textlint と VS Code で始める文章校正 - Qiita

textlint + VS Code で文章校正 | ハックノート