メインコンテンツへスキップ

Gradioで作る!英作文の自動添削アプリ

✍️Gradioで作る!英作文の自動添削アプリ(language_tool_python使用)

image.png

🚀 はじめに

このページでは、Gradioとlanguage_tool_pythonを使って、英作文を自動添削してくれる簡単なWebアプリを作成します。
ユーザーが英文を入力すると、スペルや文法のミスをチェックして指摘してくれる仕組みです。

ポイント:

  • HuggingFaceや重たいライブラリは不要

  • オフラインでも動作(言語パックは初回DLのみ)

  • VSCodeでそのままPythonスクリプトとして動かせる

  • GradioのUI操作も自然に学べる!


🧰 必要な環境

  • OS:Windows 10 または 11
  • Python:3.8 以降(インストール済)

  • VSCode:インストール済(任意だが作業しやすいため推奨)

Javaランタイム(JRE):インストール必須!

  • language_tool_pythonは内部でJavaベースの文法チェッカーを使用します

  • Oracle JDK または OpenJDK 17以降 をインストールしてください(詳細は後述)

Java Runtime Environmentが未インストールだと以下のようなエラーになります
インストール方法は別記事 Java Runtime Environment (JRE)インストール手順(Windows) に記載しています。

ModuleNotFoundError: No java install detected. Please install java to use language-tool-python.

使用ライブラリ

  • gradio(UI)

  • language_tool_python(英文の文法チェック)


📦 ステップ① ライブラリのインストール

まずは必要なライブラリをインストールします。
VSCodeのターミナル(PowerShellやcmd)で以下を実行してください。

pip install gradio language-tool-python

初回使用時にLanguageToolの言語モデルがダウンロードされます(英語モデルは比較的軽量です)。


📝 ステップ② Pythonスクリプトを作成

以下のコードをgrammar_checker.pyとして保存します。

import gradio as gr
import language_tool_python

# LanguageToolの英語インスタンスを作成
tool = language_tool_python.LanguageTool('en-US')

def check_grammar(text):
    # エラーの指摘を取得
    matches = tool.check(text)

    if not matches:
        return "✅ 文法上の問題は見つかりませんでした!"

    # 各エラーを表示形式にまとめる
    results = []
    for match in matches:
        results.append(f"❌ {match.message}\n→ 誤り部分: 『{text[match.offset:match.offset + match.errorLength]}』\n提案: {', '.join(match.replacements)}\n")

    return "\n\n".join(results)

# Gradioのインターフェース
demo = gr.Interface(
    fn=check_grammar,
    inputs=gr.Textbox(lines=5, placeholder="ここに英文を入力してください", label="英作文"),
    outputs=gr.Textbox(label="添削結果"),
    title="英作文 自動添削アプリ",
    description="英文を入力すると文法やスペルミスをチェックしてくれるツールです。",
)

# アプリ起動
demo.launch()

🖥 ステップ③ 実行してアプリを起動

保存後、VSCodeのターミナルで以下を実行します:

python grammar_checker.py

ブラウザが自動で立ち上がり、http://127.0.0.1:7860でアプリが表示されます。


🔍 使い方とサンプル

例えば、次のような文章を入れてみましょう:

He go to school every day.

→ 出力例:

❌ Did you mean 'goes'?
→ 誤り部分: 『go』
提案: goes

🎁 発展アイデア(+5分)

  • ✅ チェック対象言語を英語だけでなく日本語などに切り替え(LanguageTool('ja-JP')

  • 📝 添削後の文章を自動で修正提案(tool.correct(text)で全自動修正)

  • 📋 チェック内容を表形式で出力(gr.DataFrameの出力に対応可能)

 

🔍 コードの解説

このスクリプトは:

  • ユーザーがGradioのテキストボックスに英文を入力

  • LanguageToolで文法・スペルのミスをチェック

  • 結果を整形して画面に表示

という処理の流れで構成されています。


📦 1. ライブラリの読み込み

import gradio as gr
import language_tool_python
  • gradio: Web UIをローカルで立ち上げるPythonライブラリ

  • language_tool_python: 文法チェックに使うPythonラッパー(中身はJavaのLanguageTool)


🛠 2. LanguageToolのインスタンス作成

tool = language_tool_python.LanguageTool('en-US')
  • LanguageToolの英語(US)向けのチェッカーを初期化

  • tool.check() を使って文法エラーのリストを取得できるようになります


✍️ 3. 文法チェック関数の定義

def check_grammar(text):
    matches = tool.check(text)
  • 入力されたtextに対してtool.check()を実行

  • 結果はmatchesという エラー候補のリスト

    if not matches:
        return "✅ 文法上の問題は見つかりませんでした!"
  • エラーが0件なら「問題なし!」のメッセージを返す

    results = []
    for match in matches:
        results.append(
            f"❌ {match.message}\n"
            f"→ 誤り部分: 『{text[match.offset:match.offset + match.errorLength]}』\n"
            f"提案: {', '.join(match.replacements)}\n"
        )
  • 各エラー(match)について:

    • match.message: なぜダメなのか(例: “Did you mean…”)

    • match.offset: ミスの開始位置

    • match.errorLength: ミスの長さ

    • text[...]: 実際にミスが起きた部分

    • match.replacements: 修正候補リスト

    return "\n\n".join(results)
  • すべてのエラーを改行で連結して返す


🎛 4. Gradioインターフェースの構築

demo = gr.Interface(
    fn=check_grammar,
    inputs=gr.Textbox(lines=5, placeholder="ここに英文を入力してください", label="英作文"),
    outputs=gr.Textbox(label="添削結果"),
    title="英作文 自動添削アプリ",
    description="英文を入力すると文法やスペルミスをチェックしてくれるツールです。",
)
  • fn=check_grammar: UIに紐づける処理関数

  • inputs: テキストボックス(5行・プレースホルダ付き・ラベルは「英作文」)

  • outputs: 結果用テキストボックス(ラベル「添削結果」)

  • titledescription: 画面の上に表示される説明文


🚀 5. アプリの起動

demo.launch()

💡補足ポイント

  • 複数のエラーがあればすべて一覧表示されます

  • 提案は「, 」で区切られているので選択肢のイメージもつきやすい

  • tool.correct(text)を使えば「自動修正文」も取得可能(発展編)


このコードはGradioやLanguageToolの入門としてとても良い例で、
「自然言語入力 → 分析 → 結果返す」というパターンのテンプレになります!

BookStackでページ化するなら、この説明を「コード全体の流れ」「文法チェック関数の仕組み」「GradioのUI設計」みたいに見出しで分けると見やすくなると思うよ!


🏁 おわりに

GradioとLanguageToolの組み合わせは、

  • 軽い

  • ローカルで完結

  • 使って楽しい

という点で初心者にもぴったり。今回のように、**「ユーザーが入力 → AIが応答」**という基本パターンをマスターすれば、他のアプリにも応用しやすいです。

気に入ったら、今度は「要約」や「翻訳」などのテーマにも挑戦してみてね!