chatGPT-2.py
from flask import Flask, render_template, request, redirect, url_for
from transformers import GPT2Tokenizer, GPT2LMHeadModel
import wikipedia
app = Flask(__name__)
# GPT-2のトークナイザーとモデルをロード
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
@app.route('/')
def index():
return render_template('index.html')
@app.route('/generate', methods=['POST'])
def generate_text():
# ユーザーからの入力を取得
prompt_text = request.form['prompt']
try:
# Wikipediaからテキストを取得
wikipedia_text = wikipedia.summary(prompt_text)
# テキストの生成
inputs = tokenizer.encode(wikipedia_text, return_tensors="pt")
outputs = model.generate(inputs, max_length=100, num_return_sequences=1, temperature=0.7)
# 生成されたテキストをデコードしてHTMLコードに組み込む
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
# 生成されたテキストとWikipediaのテキストと共にHTMLを返す
return render_template('index.html', prompt_text=prompt_text, generated_text=generated_text, wikipedia_text=wikipedia_text)
except wikipedia.exceptions.DisambiguationError as e:
# 曖昧性がある場合は、候補のリストを表示
options = e.options
return render_template('disambiguation.html', options=options)
except wikipedia.exceptions.PageError:
wikipedia_text = "Wikipediaにそのトピックが見つかりませんでした。"
return render_template('index.html', prompt_text=prompt_text, wikipedia_text=wikipedia_text)
@app.route('/generate_with_option/<option>', methods=['GET'])
def generate_with_option(option):
try:
# Wikipediaからテキストを取得
wikipedia_text = wikipedia.summary(option)
# テキストの生成
inputs = tokenizer.encode(wikipedia_text, return_tensors="pt")
outputs = model.generate(inputs, max_length=100, num_return_sequences=1, temperature=0.7)
# 生成されたテキストをデコードしてHTMLコードに組み込む
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
# 生成されたテキストとWikipediaのテキストと共にHTMLを返す
return render_template('index.html', prompt_text=option, generated_text=generated_text, wikipedia_text=wikipedia_text)
except wikipedia.exceptions.PageError:
wikipedia_text = "Wikipediaにそのトピックが見つかりませんでした。"
return render_template('index.html', prompt_text=option, wikipedia_text=wikipedia_text)
if __name__ == '__main__':
app.run(debug=True)
templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Generate Text</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f4;
}
header {
text-align: center;
margin-top: 50px;
}
main {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.form-section, .response-section, .wikipedia-section {
background-color: #fff;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
padding: 20px;
margin-bottom: 20px;
}
.prompt-form {
max-width: 100%;
}
label {
font-weight: bold;
}
input[type="text"] {
width: 100%;
padding: 10px;
margin: 10px 0;
border: 1px solid #ccc;
border-radius: 4px;
}
button {
padding: 10px 20px;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #0056b3;
}
.generated-text {
margin-top: 20px;
}
.tweet-link {
display: block;
margin-top: 10px;
text-align: center;
}
footer {
text-align: center;
margin-top: 50px;
}
</style>
</head>
<body>
<header>
<h1>Generate Text</h1>
</header>
<main>
<section class="form-section">
<form action="/generate" method="POST" class="prompt-form">
<label for="prompt">Enter your prompt:</label><br>
<input type="text" id="prompt" name="prompt" placeholder="Enter your prompt..."><br><br>
<button type="submit">Generate</button>
</form>
</section>
<!-- 生成されたテキストを表示 -->
{% if generated_text %}
<section class="response-section">
<div class="response">
<h2>Generated Text:</h2>
<p class="generated-text">{{ generated_text }}</p>
<a href="https://twitter.com/intent/tweet?text={{ generated_text }}" class="tweet-link">Tweet</a>
</div>
</section>
{% endif %}
<!-- Wikipediaからの関連情報を表示 -->
{% if wikipedia_text %}
<section class="wikipedia-section">
<div class="wikipedia-info">
<h2>Wikipedia Info:</h2>
<p>{{ wikipedia_text }}</p>
</div>
</section>
{% endif %}
<!-- 保存ボタン -->
<button id="saveButton">Save Generated Text</button>
</main>
<footer>
<p>© 2024 Generate Text App</p>
</footer>
<script>
// 保存ボタンがクリックされたときの処理
document.getElementById('saveButton').addEventListener('click', function() {
// 生成されたテキストを取得
var generatedText = document.querySelector('.generated-text').innerText;
// テキストをダウンロード用にBlobに変換
var blob = new Blob([generatedText], { type: 'text/plain' });
// BlobをURLに変換
var url = window.URL.createObjectURL(blob);
// ダウンロード用のリンクを作成してクリック
var a = document.createElement('a');
a.href = url;
a.download = 'generated_text.txt';
document.body.appendChild(a);
a.click();
// 不要なURLを解放
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
});
</script>
</body>
</html>
今回はテキストデータを保存できるようにしました