Python で文法・スペルチェックを自動化!language_tool_python 完全ガイド

タグ Pythonlanguage_tool_python文法チェックスペルチェックLanguageToolNLPCI/CD自動校正columnコラムlinuxLinuxwindowsWindowsGitHubオープンソースjxmorris12
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

Python で文法・スペルチェックを自動化!language_tool_python 完全ガイド

ひとことでいうと

language_tool_python は、英語をはじめ 25 言語以上の文法・スペル・文体をまとめてチェックできる Python ライブラリです。世界中で使われているオープンソースの文法チェックエンジン「LanguageTool」を、Python のコードから手軽に呼び出せるようにしたものです。インターネット経由で使う「公開 API モード」と、パソコン内だけで完結する「ローカルサーバーモード」の両方を、同じ書き方で切り替えられます。AI ではなくルールベースのエンジンを採用しているため、結果が毎回一定で再現性が高く、自動校正ツールや CI/CD(継続的インテグレーション・デプロイのしくみ)への組み込みに広く使われています。


こんな人におすすめ

  1. 英語ドキュメントを自動チェックしたい開発者 コードのリポジトリ(ソースコードの置き場)に含まれる README や仕様書を、自動でチェックしてミスを事前に防ぎたい方に向いています。CLI(文字で命令を送るツール)の終了コードを使えば、シェルスクリプトや GitHub Actions などとも簡単に連携できます。

  2. NLP・テキスト前処理をしている研究者・データサイエンティスト AI モデルへ入力するテキストを事前にきれいにする(クリーニングする)際、ルールベースの誤り検出器として組み込むと、データの品質が上がります。結果が再現しやすいため、実験の管理もしやすいのが魅力です。

  3. 英語学習・作文支援ツールを作りたいエンジニア 英語学習アプリや作文チェックサービスのバックエンド(裏側の処理部分)として使えます。mother_tongue(母国語)パラメーターを設定すると、その言語を母語とする人が英語を書くときに起こりやすいミスを、より精度高く検出できます。


インストール・使い方

Step 1: パッケージをインストールする

ターミナル(文字で命令を送る画面)を開き、次のコマンドをコピー&ペーストして実行してください。

pip install --upgrade language_tool_python

pip は Python の公式パッケージ管理ツールです。このコマンドを実行すると、language_tool_python が自動でダウンロード・インストールされます。Python 3.9 以上が必要です。

Step 2: 公開 API モードで試してみる(Java 不要)

まずは最も手軽な「公開 API モード」から始めましょう。Java などの追加インストールは不要で、pip install が終わればすぐに動かせます。

import language_tool_python

with language_tool_python.LanguageToolPublicAPI("en-US") as tool:
    text = "This are a bad sentence with many error."
    matches = tool.check(text)
    for m in matches:
        print(f"[{m.ruleId}] {m.message}")
        print(f"  修正候補: {m.replacements}")
    print("修正後:", tool.correct(text))

tool.check() でテキストを検査すると、問題のある箇所が Match(マッチ)オブジェクトのリストとして返ってきます。tool.correct() を使うと、最初の修正候補を自動的に適用した修正済みテキストを一行で取得できます。

Step 3: ローカルサーバーモードで使う(完全オフライン)

Java 17 以上がインストールされている場合は、ローカルサーバーモードも使えます。初回実行時に LanguageTool が自動でダウンロードされ、以降はインターネットなしで動作します。レート制限(APIの利用上限)もありません。

import language_tool_python

with language_tool_python.LanguageTool("en-US") as tool:
    text = "A sentence with a error in the Hitchhiker's Guide tot he Galaxy"
    print(tool.correct(text))

with ブロックを使うと、処理が終わったあとにサーバーが自動的に終了します。長時間使う本格運用では、このモードの方が速度・安定性の両面で優れています。

Step 4: CLI(コマンドライン)から使う

Python スクリプトを書かなくても、ターミナルからファイルを直接チェックできます。

# ファイルをチェックする
language_tool_python -l en-US README.md

# キーボードから入力した文をチェックする
echo "This are bad." | language_tool_python -l en-US -

# 修正を自動適用してファイルを上書きする
language_tool_python -l en-US --apply input.txt

# 特定のルールだけを有効にしてチェックする
language_tool_python -l en-US --enabled-only --enable MORFOLOGIK_RULE_EN_US input.txt

-l en-US は言語の指定です。--apply をつけると修正内容をファイルに直接書き込んでくれます。--enabled-only--enable を組み合わせると、チェックするルールを絞り込めます。


動かしてみた

Python 3.12 の環境で pip install language_tool_python を実行したところ、エラーなく正常に完了しました。インストール後すぐに import language_tool_python が通り、ライブラリとして利用できる状態になっています。

公開 API モードで tool.check("This are bad.") を実行すると、Match オブジェクトのリストが返ってきます。各オブジェクトには ruleId(どのルールに引っかかったか)・message(説明文)・replacements(修正候補の一覧)・context(前後の文脈)などが入っており、一度のチェックで必要な情報をまとめて取得できます。tool.correct() を呼ぶと、最初の修正候補を自動適用したテキストが一行で返ってくるので、簡単な自動修正スクリプトをすぐに作れます。

ローカルサーバーモードでは Java 17 以上が必要です。Java が入っていない環境でも、公開 API モード(LanguageToolPublicAPI)を使えばすぐに動作確認できます。ローカルサーバーのダウンロード先は環境変数 LTP_PATH で変更でき、デフォルトは ~/.cache/language_tool_python/ です。すでに LanguageTool のファイルを持っている場合は LTP_JAR_DIR_PATH を指定すると再ダウンロードを省略できます。


ブラウザで試す(デモ)

インストールなしでも、Gradio(グラジオ)デモを使えばブラウザ上からすぐに体験できます。公開 API モードで動いているため Java は不要です。テキストを入力するだけで、文法上の問題点と修正案が表示されます。まずどんな結果が出るか確認したい方は、デモから試してみると感覚がつかみやすいでしょう。


実践のコツ:はじめの一歩

実際に使い始めるときに役立つポイントをまとめました。コードと合わせて確認してみてください。

import language_tool_python

tool = language_tool_python.LanguageToolPublicAPI("en-US")

# テキストをチェックして詳細を確認する
matches = tool.check("She don't know nothing about it.")
for m in matches:
    print(f"[{m.ruleId}] {m.message}")
    print(f"  Context : {m.context}")
    print(f"  修正候補: {m.replacements}")

# 自動修正する
print(tool.correct("She don't know nothing about it."))

# 特定のルールを無効化する(例: 二重否定の指摘を消す)
tool.disabled_rules.update({"DOUBLE_NEGATION"})

# スペルチェックだけを無効化する
tool.disable_spellchecking()

tool.close()
  • 公開 API と ローカルサーバーは同じ書き方で使えます。切り替えはクラス名(LanguageToolLanguageToolPublicAPI)を変えるだけです。
  • disabled_rules で誤検知を減らせますupdate() でルール ID を追加すると、そのルールによる指摘が表示されなくなります。
  • picky=True でより厳しくチェックできます。文体の改善提案も含む厳格モードになります。こだわりのある文書を仕上げるときに便利です。
  • disabled_categories でカテゴリ単位の無効化も可能です"CASING"(大文字・小文字)や "TYPOS"(タイポ)など、まとめて無効にしたい分類があるときに使います。
  • with ブロックを使うとリソースが自動解放されます。長時間動かすスクリプトやサーバーアプリでは積極的に使いましょう。

活用アイデア

  • CI/CD パイプラインへの組み込み: GitHub Actions などで PR(プルリクエスト)のドキュメントを自動チェックし、文法ミスをレビュー前に検出できます。CLI の終了コードが 0(問題なし)か 2(問題あり)かで処理を分岐できるため、パイプラインの制御が簡単です。--apply オプションで軽微なミスを自動修正して自動コミットする運用も考えられます。
  • 多言語コンテンツ管理システムへの統合: スペイン語・ドイツ語・フランス語など 25 言語以上をサポートしているため、グローバル向け CMS(コンテンツ管理システム)の品質ゲート(公開前のチェック関門)として使えます。mother_tongue パラメーターで書き手の母国語を指定すると、外国語特有の干渉ミスをより正確に検出できます。
  • カスタム辞書で誤検知を削減: new_spellings パラメーターで製品名や社内専門用語を登録しておくと、誤検知(本当は正しいのにミスと判定されること)を大幅に減らせます。new_spellings_persist=False にするとセッション(1回の起動中)限定での登録になり、共有環境や CI 環境での意図しない辞書の書き換えを防げます。
  • 英語学習・作文支援アプリのバックエンド: ユーザーが入力した英文を即座にチェックして、ミスの箇所と修正案をフィードバックする学習アプリを作れます。context フィールドを使えば問題の前後の文脈を表示でき、学習者が間違いの理由を理解しやすくなります。
  • NLP の前処理パイプラインへの組み込み: 機械学習モデルに渡す前のテキストデータを自動的にクリーニングするステップとして使えます。ルールベースのため結果が毎回同じになり、実験の再現性を保ちやすい点が研究用途に向いています。
  • 技術ドキュメントの一括チェックスクリプト: プロジェクト内の Markdown ファイルや rst ファイルをまとめてスキャンし、問題のある箇所をレポートするスクリプトを数十行で作れます。Match オブジェクトから行番号・列番号・修正候補をまとめて取り出せるため、レポートの整形も容易です。

用語とポイント解説

Match オブジェクト チェック結果の 1 件を表すデータのかたまりです。かんたんに言うと、「どこが・なぜ・どう直せばよいか」をひとまとめにして返してくれる入れ物です。ruleId(ルール名)・message(説明)・replacements(修正候補)・context(前後の文脈)・offsetInContext(文脈内での位置)などの情報を持っています。

LanguageTool(ローカルサーバーモード) パソコン内で Java サーバーを起動して使うクラスです。かんたんに言うと、インターネットにつながなくても使えるオフライン版です。初回起動時に LanguageTool のファイルが自動でダウンロードされ、次回からはそのファイルが再利用されます。レート制限がなく、大量のテキストを処理する本番運用に向いています。

LanguageToolPublicAPI(公開 API モード) languagetool.org のサーバーに問い合わせて結果を得るクラスです。かんたんに言うと、外部のサービスを借りて使うオンライン版です。Java のインストールが不要なため、手軽に試したいときに最適ですが、1 日あたりのリクエスト数に上限(レートリミット)があります。

disabled_rules(無効化ルールの集合) チェックから外したいルールの ID をまとめておく場所(Python の集合型)です。かんたんに言うと、「このルールの指摘はいらない」という除外リストです。update() でルール ID を追加し、difference_update() で取り消せます。誤検知を減らしたいときに使います。

picky モード picky=True と指定すると有効になる厳格チェックモードです。かんたんに言うと、文法ミスだけでなく「もっとよい書き方」の提案もしてくれる念入りモードです。通常モードでは出てこない文体改善の指摘が含まれるため、正式なドキュメントを仕上げるときに便利です。

LTP_PATH 環境変数 LanguageTool のファイルをダウンロードして保存する場所を指定する設定です。かんたんに言うと、「ファイルをここに置いてね」と保存先を教える指示です。デフォルトでは ~/.cache/language_tool_python/ に保存されます。ディスク容量の都合でフォルダを変えたいときに使います。

LTP_JAR_DIR_PATH 環境変数 すでにダウンロード済みの LanguageTool のフォルダを直接指定する設定です。かんたんに言うと、「もうファイルがあるのでダウンロードは不要です」と伝えるための指示です。CI 環境などで毎回ダウンロードするのを避けたいときや、特定のバージョンを固定して使いたいときに役立ちます。

mother_tongue(母国語パラメーター) テキストを書いた人の母国語を指定するオプションです。かんたんに言うと、「この文を書いた人の第一言語はこれです」と教えることで、その言語の影響を受けやすいミスをより精度高く検出できるようにする機能です。たとえば日本語を母国語とする人が英語を書く場合に特有のミスを見つけやすくなります。

ルールベースエンジン AI(機械学習)ではなく、人が書いたルールの集合でチェックを行うしくみです。かんたんに言うと、「このパターンはミス」という辞書・規則をもとに判定するエンジンです。AI と違って結果が毎回同じになる(再現性が高い)ため、自動化や実験管理に向いています。判定の根拠が明確なため、誤検知の原因も調べやすいです。


ぜひ英語ドキュメントの CI/CD 自動チェックや、英語学習アプリのバックエンド構築などに活用してみてはいかがでしょうか。