Gradioで作る!英作文の自動添削アプリ
✍️Gradioで作る!英作文の自動添削アプリ(language_tool_python使用)
🚀 はじめに
このページでは、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
: 結果用テキストボックス(ラベル「添削結果」) -
title
とdescription
: 画面の上に表示される説明文
🚀 5. アプリの起動
demo.launch()
-
ローカルホスト(通常は http://127.0.0.1:7860)でブラウザが開く
-
ユーザー入力 → 結果表示 という一連のUIが完成する
💡補足ポイント
-
複数のエラーがあればすべて一覧表示されます
-
提案は「, 」で区切られているので選択肢のイメージもつきやすい
-
tool.correct(text)
を使えば「自動修正文」も取得可能(発展編)
このコードはGradioやLanguageToolの入門としてとても良い例で、
「自然言語入力 → 分析 → 結果返す」というパターンのテンプレになります!
BookStackでページ化するなら、この説明を「コード全体の流れ」「文法チェック関数の仕組み」「GradioのUI設計」みたいに見出しで分けると見やすくなると思うよ!
🏁 おわりに
GradioとLanguageToolの組み合わせは、
-
軽い
-
ローカルで完結
-
使って楽しい
という点で初心者にもぴったり。今回のように、**「ユーザーが入力 → AIが応答」**という基本パターンをマスターすれば、他のアプリにも応用しやすいです。
気に入ったら、今度は「要約」や「翻訳」などのテーマにも挑戦してみてね!