では、先ほどの「コメント練習 50問」版に、
AIがコメント内容を自然文解析して自動評価する拡張版(ChatGPTローカル動作対応)を組み込みます。
コンセプト
- コメントの**質(意味・目的・理由の適切さ)**を、簡易AIスコアで評価
- 実際に ChatGPT API に接続しなくても、自然言語ルールベースで自己採点できます(模擬AIスコア)
- コード構文解析+コメント抽出+内容判定(キーワード・文構造)
- 採点結果は「点数+講評」として出力
ファイル名例
comment_ai_check.py
"""
コメント練習 AI採点版(自然文分析)
このスクリプトは、ソース内コメントを自動的に読み取り、
AI風スコア(自然文評価)をつけます。
目的:コメントの「良さ(説明の的確さ・意図の明確さ)」を数値化。
"""
import ast
import re
import textwrap
# ============================================
# 分析ロジック
# ============================================
def extract_comments(source: str):
"""Pythonソースコードからコメント(#...)を抽出"""
lines = source.splitlines()
comments = []
for i, line in enumerate(lines):
if "#" in line:
stripped = line.strip()
if stripped.startswith("#"):
comments.append((i + 1, stripped))
elif " #" in line:
parts = line.split(" #", 1)
comments.append((i + 1, "#" + parts[1]))
return comments
def score_comment(comment: str) -> tuple[int, str]:
"""
コメント内容を自然文分析してスコア化(擬似AIロジック)
100点満点で採点+講評を返す
"""
text = comment.lower()
# スコア初期値
score = 50
remarks = []
# ---- 内容の方向性 ----
if any(w in text for w in ["なぜ", "理由", "目的", "意図", "because"]):
score += 20
remarks.append("✅ 理由や意図を説明していて良いです。")
elif any(w in text for w in ["する", "です", "します"]):
score += 5
remarks.append("🙂 説明調で良いですが、もう少し『なぜ』を書くとより良いです。")
elif any(w in text for w in ["テスト", "確認", "仮"]):
score += 10
remarks.append("🔍 状況を明示していて良いです。")
# ---- 内容の充実度 ----
if len(text) > 30:
score += 10
remarks.append("🗒 内容が十分に書かれています。")
elif len(text) < 5:
score -= 20
remarks.append("⚠️ コメントが短すぎます。もう少し具体的に書きましょう。")
# ---- よくあるNGパターン ----
if any(w in text for w in ["足している", "print", "計算", "出力"]):
score -= 10
remarks.append("💤 コードの動作説明だけになっています。意図を書きましょう。")
if "todo" in text:
remarks.append("📝 TODO コメントです。後で対応予定を具体的に。")
# ---- 最終調整 ----
score = max(0, min(100, score))
summary = " ".join(remarks) or "(内容が短いため評価が難しいです)"
return score, summary
def evaluate_source(source: str):
"""全コメントを抽出してスコアリング"""
comments = extract_comments(source)
total_score = 0
results = []
for line_num, comment in comments:
score, summary = score_comment(comment)
total_score += score
results.append((line_num, comment, score, summary))
avg = total_score / len(comments) if comments else 0
return avg, results
# ============================================
# 実行部
# ============================================
def main():
print("🧠 Python コメントAI採点システム")
print("===================================")
# 自分自身を読み込む(=同じファイルのコメントを評価)
with open(__file__, "r", encoding="utf-8") as f:
source = f.read()
avg, results = evaluate_source(source)
print(f"\n💯 平均スコア: {avg:.1f} 点")
print("-----------------------------------")
# 上位/下位のコメントを表示
for line, comment, score, summary in sorted(results, key=lambda x: -x[2])[:5]:
print(f"✅ 良いコメント (行{line}): {comment} -> {score}点\n {summary}")
print("...")
for line, comment, score, summary in sorted(results, key=lambda x: x[2])[:3]:
print(f"⚠️ 改善が必要 (行{line}): {comment} -> {score}点\n {summary}")
print("\n👋 評価完了。コメントを改善し、再実行してスコアアップを狙いましょう!")
if __name__ == "__main__":
main()
Python特徴まとめ
| 機能 | 内容 |
|---|---|
| 🔍 コメント抽出 | コード内の # コメントを全行から抽出 |
| 🧠 自然文分析 | 「目的」「理由」「TODO」「冗長さ」「短さ」を評価 |
| 🧾 スコア出力 | 各コメントごとに点数+講評表示 |
| 📊 総合評価 | 平均スコアを100点満点で算出 |
| 🪄 学習法 | 自分のコメントを見直し → 改善 → 再実行で上達! |
使い方
- このファイルを保存(例:
comment_ai_check.py) - ファイル中のコメント(
# ...)を書き換える - 実行すると、コメントごとのスコアと講評が表示されます
python comment_ai_check.py


