社員用に作った文書校正ツールを一般公開した

f:id:gecko655:20210504184350g:plain
スクリーンショット

これはなに

会社で「PR用の文章を人力でチェックする工数が重くて、めっちゃ残業が発生している。なんとか自動化できないか」との依頼を受け、Word等のファイルをGUIでそのままtextlintできるツールをちゃちゃっと作って社内公開しました。その結果、いい感じに社内で有効利用してもらうことができたので、外部公開に踏み切ることにしました。

github.com

インストール&設定

1. インストーラーでツールをインストールする

GitHub上で配布しています。 https://github.com/gecko655/proofreading-tool/releases

Mac版で「開発元が未確認のため開けません」が出た方へ

https://support.apple.com/ja-jp/guide/mac-help/mh40616/mac を参考に、アプリケーションをセキュリティ設定の例外として扱うようにしてください。

Windows版で「WindowsによってPCが保護されました」が出た方へ

「詳細情報」からファイルを実行してください。

2. 校正設定ファイルを変更する

アプリを起動し、「設定ファイルを開く」ボタンで設定ファイルの配置してあるフォルダが開く。 prh.yml (使ってはいけない単語を設定するファイル)を、設定方法 を参考にしながら設定する。

  • prh.yml はなるべくバックアップを取っておいてください。(バージョンアップ時に消える可能性があるので)

アンインストール

Windows

Windowsの設定」→「アプリ」→「アプリと機能」で、「文書校正ツール.app」を右クリック→「アンインストール」

Mac

「文書校正ツール.app」をゴミ箱に移動等して削除

使い方

校正したい文書ファイルを、文書校正ツールのウインドウ上にドラッグ&ドロップする。

対応しているファイル形式

  • pdf
  • docx
  • pptx
  • xlsx
  • html
  • txt
  • epub
  • etc...

  • pdfのみxpdfを、それ以外はtextractを使用している。

技術的な説明

一言でいうと、「docx, pptx, pdf等のファイルのテキスト部分をtextractxpdfで抽出し、textlintしてくれるGUI(electron)ツール」です。

GUI部分を除くと、このツールの機能は以下のコマンドとほぼ同等です。

npm install textract  # https://github.com/dbashford/textract
npm install textlint  # https://github.com/textlint/textlint

npx textract input_file.docx | npx textlint --stdin

Related works

関連するツール群とこのツールの位置づけについて議論します。

textlintをリアルタイムで行なうWebアプリ

azu.github.io

https://textlint-editor.netlify.app/

  • テキストをサーバーに送る必要はなく、すべてローカルで動作する
  • pdfやdocx等をそのままtextlintすることはできない

textlintをローカルPC上でリアルタイムで行なうテキストエディタ

github.com

  • ローカルPCで動作する
  • pdfやdocx等をそのままtextlintすることはできない

textlintをローカルPC上でリアルタイムで行なうテキストエディタ拡張(VSCode)

marketplace.visualstudio.com

  • ローカルPCで動作する
  • 安心と信頼のVSCode上での実装なので、簡単に導入できそう。また、テキストエディタとして使いやすいはず。文書を書きながら校正したい場合はこれ使ったほうが良い気がします。
  • pdfやdocx等をそのままtextlintすることはできない

pdfやdocx等をそのままtextlintするCUIツール(CIツール含む)

たくさん事例がある。GUIではないのでshellに慣れてない人に使わせるのは難しい。

pdfやdocx等をそのままtextlintするGUIツール

このツールしかまだこの世に存在しないはず。多分。

FAQ

なんでGitHubの会社organizationじゃなくて個人アカウント配下にリポジトリがあるの

会社としてはどっちでもいい&どちらかというと社員で開発保守するより個人で保守・レビューするほうが都合が良さそうな気がしたので、個人アカウント配下で公開することにしました。

バグを見つけたんだけど

Issues and Pull Requests are welcome!

xxxな機能も実装してほしい

Issues and Pull Requests are welcome!


ここから追記

textlintルールの追加はできるの?

一般のtextlintルールは、ビルドからやり直さないと追加できない仕様になっています。日本語の文書を書くときに必要なものは大体入れたつもりですが、なにか要望があれば追加で入れようかなと思います。

例外として、prh.ymlは編集可能なので、prhの機能を使って、社内独自の使ってはいけない単語を設定することができます。 例えば200万ダウンロード突破したスマホアプリのPR文書を校正する際に、以下のようにprh.ymlを設定しておくと、古いダウンロード数の文書を校正に引っ掛けることができるようになります。

rules:
  - expected: 200万ダウンロード
    patterns:
      - 100万ダウンロード
prh.ymlを、GUIしか触れないような人に書かせるのキツくない?

実際ちょっとキツいと思うので、prh.ymlの雛形はこちらで用意して、ユーザー側で自由にprh.ymlを編集してもらいつつバグったらフォローしていくのが良いかなと思います。。 この辺をいい感じにするPull Requestもお待ちしてます

pdfの校正をさせてもうまく動かないんだけど

pdfファイルに文章を載っける際(いわゆる組版)に、文章がそのままpdfに載っていない場合は、pdfファイルのパースがうまくできず校正できない場合があります。

  • 要するに、xpdfがpdfファイルをパースして文章部分を抽出できるか否かにかかっている。

また、xpdfのパース結果にはBell(\u0007), Form Feed(\u000c)等の特殊文字が混ざったりすることがあります。これらは前処理で消すようにしていますが、特殊文字を網羅的に消せているわけではないので、pdfファイルを生成したソフトによっては校正がうまく動作しない場合があります。