日本語見出しから英語ファイル名を生成
[質問]
記事の日本語タイトルからファイル名を作りたいです。構成としては、HTML画面上に[記事タイトル]入力欄と、[ファイル名]入力欄があり、基本はどちらも手で入力します。しかし[ファイル名を自動生成]ボタンを押すと、タイトルからファイル名を生成します。あとから手で修正も可能です。
[回答] Gemini
ユーザーが入力した日本語タイトルから、「意味の通じる英語のファイル名」を自動生成する仕組みですね。
この場合、単なる翻訳だけでなく、ファイル名として適切な形(スペースをハイフンに置き換える、記号を除くなど)に整形する処理(Slugify)を組み合わせるのが一般的です。
Python(バックエンド)でこの機能を実装する際の、おすすめの構成とコード例を紹介します。
実装の全体像
- 翻訳:
DeepLまたはOpenAIで日本語タイトルを英語に変換。 - 整形: 英語のフレーズを小文字にし、記号を消してハイフンで繋ぐ(例:
My Article→my-article)。 - 返却: フロントエンド(HTML)のファイル名入力欄に値を戻す。
Pythonによる実装例
ここでは、最も汎用性が高く「気の利いたファイル名」になりやすい OpenAI (GPT-4o) を使った例を紹介します。
import re
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY")
def generate_filename(japanese_title):
# 1. 翻訳 (ファイル名に適した短い英語を依頼)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Translate the given Japanese title into a short, descriptive English phrase for a URL slug or filename. Use only lowercase and spaces."},
{"role": "user", "content": japanese_title}
]
)
english_text = response.choices[0].message.content.strip().lower()
# 2. 整形 (記号削除とハイフン連結)
# 英数字以外をスペースに置き換え、前後の空白を削除
clean_text = re.sub(r'[^a-z0-9\s-]', '', english_text)
# スペースをハイフンに変換し、連続するハイフンを1つにまとめる
filename = re.sub(r'\s+', '-', clean_text).strip('-')
return f"{filename}.html"
# テスト
title = "Pythonで効率的に翻訳APIを呼び出す方法"
print(generate_filename(title))
# 出力例: how-to-call-translation-api-efficiently-with-python.html
UI(HTML/JavaScript)の動き
ユーザーの利便性を考えると、以下のようなJavaScriptの挙動になります。
- [ファイル名を自動生成] ボタン: 1. タイトルの値を読み取る。
- Pythonサーバー(FlaskやFastAPIなど)へAPIリクエストを送る。
- 返ってきた文字列をファイル名入力欄にセットする。
- 手動修正: 生成された後、ユーザーが自由にその欄を書き換えられるように
inputタグにしておきます。
運用上のポイント
- 文字数制限: ファイル名が長くなりすぎないよう、プロンプトで「3〜5単語程度で」と制限をかけるのがコツです。
- DeepLを使う場合: DeepLには整形機能はないため、上記の
re.sub(正規表現)による整形処理を必ず自前で通すようにしてください。 - コスト管理: ユーザーがボタンを連打するとAPI費用がかさむため、フロントエンド側で「一度押したら数秒無効化する」などの制御を入れると安全です。
もし、この処理を組み込むための Webフレームワーク(Flask, Django, FastAPIなど) の具体的な書き方についても知りたい場合は、ぜひ教えてください!