import requests
from flask import Flask, request, jsonify
app = Flask(__name__)
class SearchEngine:
def __init__(self, documents):
self.documents = documents
def search_local(self, query):
results = []
for doc in self.documents:
if query.lower() in doc["text"].lower():
results.append(doc)
return results
def search_wikipedia(self, query, lang='ja'):
base_url = f"https://{lang}.wikipedia.org/w/api.php"
params = {
'action': 'query',
'list': 'search',
'srsearch': query,
'format': 'json'
}
response = requests.get(base_url, params=params)
if response.status_code == 200:
search_results = response.json().get('query', {}).get('search', [])
return [{'id': result['pageid'], 'text': result['snippet']} for result in search_results]
else:
return []
# サンプルドキュメントデータ
documents = [
{"id": 1, "text": "Pythonは汎用の高水準言語です。"},
{"id": 2, "text": "検索エンジンは情報を検索するためのツールです。"},
{"id": 3, "text": "人工知能はコンピュータによる知的な振る舞いを実現する技術です。"},
{"id": 4, "text": "Web開発では、HTML、CSS、JavaScriptなどの技術が使われます。"},
{"id": 5, "text": "データサイエンティストはデータから有益な情報を引き出す専門家です。"}
]
# SearchEngineインスタンスの作成
search_engine = SearchEngine(documents)
@app.route("/", methods=["GET", "POST"])
def search():
# 以前の関数の内容は変更なし
if request.method == "POST":
query = request.form["query"]
local_results = search_engine.search_local(query)
wiki_results = search_engine.search_wikipedia(query)
all_results = local_results + wiki_results
if not all_results:
return "検索結果はありません。"
else:
result_text = "<br>".join([f"<div><strong>ID:</strong> {result['id']}, <strong>Text:</strong> {result['text']}</div>" for result in all_results])
return f"""
<!DOCTYPE html>
<html>
<head>
<title>検索エンジン</title>
<style>
body {{
font-family: Arial, sans-serif;
margin: 0 auto;
max-width: 800px;
padding: 20px;
}}
h1 {{
color: #333;
}}
form {{
margin-bottom: 20px;
}}
input[type="text"] {{
margin-right: 10px;
padding: 10px;
width: calc(100% - 122px);
}}
input[type="submit"] {{
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
cursor: pointer;
}}
input[type="submit"]:hover {{
background-color: #45a049;
}}
div {{
margin-bottom: 10px;
padding: 10px;
background-color: #f2f2f2;
border-left: 4px solid #4CAF50;
}}
</style>
</head>
<body>
<h1>検索エンジン</h1>
<form method="POST">
<label for="query">検索キーワード:</label>
<input type="text" name="query" id="query" required>
<input type="submit" value="検索">
</form>
{result_text}
</body>
</html>
"""
return """
<!DOCTYPE html>
<html>
<head>
<title>検索エンジン</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0 auto;
max-width: 800px;
padding: 20px;
}
h1 {
color: #333;
}
form {
margin-bottom: 20px;
}
input[type="text"] {
margin-right: 10px;
padding: 10px;
width: calc(100% - 122px);
}
input[type="submit"] {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<h1>検索エンジン</h1>
<form method="POST">
<label for="query">検索キーワード:</label>
<input type="text" name="query" id="query" required>
<input type="submit" value="検索">
</form>
</body>
</html>
"""
if __name__ == "__main__":
app.run(debug=True)
カテゴリー: programming
GPT-2とWikipediaを使って生成するAI
GPT-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;
}
h1 {
text-align: center;
margin-top: 50px;
}
form {
max-width: 600px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
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;
}
.response {
max-width: 600px;
margin: 20px auto;
padding: 20px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
.generated-text {
margin-top: 20px;
}
.tweet-link {
display: block;
margin-top: 10px;
text-align: center;
}
</style>
</head>
<body>
<h1>Generate Text</h1>
<form action="/generate" method="POST">
<label for="prompt">Enter your prompt:</label><br>
<input type="text" id="prompt" name="prompt"><br><br>
<button type="submit">Generate</button>
</form>
<!-- 生成されたテキストを表示 -->
{% if generated_text %}
<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" target="_blank">Tweet</a>
</div>
{% endif %}
</body>
</html>
templates/disambiguation.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Disambiguation Page</title>
</head>
<body>
<h1>Disambiguation</h1>
<p>Multiple meanings were found for the provided prompt. Please select the intended meaning:</p>
<ul>
{% for option in options %}
<li><a href="{{ url_for('generate_with_option', option=option) }}">{{ option }}</a></li>
{% endfor %}
</ul>
</body>
</html>
Javascript classList
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My JavaScript</title>
<style>
.pink-bg{
background: pink;
}
.red-border{
border: 2px solid red;
}
.green-color{
color: green;
}
</style>
</head>
<body>
<p>Hello</p>
<button>OK</button>
<script src="main.js"></script>
</body>
</html>
main.js
'use strict'
{
document.querySelector('button').addEventListener('click', ()=> {
//console.log('Clicked');
document.querySelector('p').classList.add('pink-bg', 'red-border');
document.querySelector('p').classList.add('green-color');
});
//console.log('Hello');
}
Javascript textContent
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My JavaScript</title>
</head>
<body>
<p>Hello</p>
<button>OK</button>
<script src="main.js"></script>
</body>
</html>
main.js
'use strict'
{
document.querySelector('button').addEventListener('click', ()=> {
//console.log('Clicked');
document.querySelector('p').textContent = document.querySelector('button').textContent;
});
//console.log('Hello');
}
Javascript イベントリスナー
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My JavaScript</title>
</head>
<body>
<button>OK</button>
<script src="main.js"></script>
</body>
</html>
main.js
'use strict';
{
document.querySelector('button').addEventListener('click', () => {
console.log('Clicked');
});
}
ruby 数値の計算
puts 10 + 3
puts 10 - 3
puts 10 * 3
puts 10 ** 3
puts 10 / 3
puts 10.0 / 3
puts 10 % 3
puts 10 + 2 * 3
puts (10 + 2) * 3
ruby コメント
# puts 10
# puts -8
# puts 2.5
# puts 1_000_000
# e を使った表現
puts 1.2e3 # 1.2かける10の3乗
puts 1.2e-3 # 1.2かける10の-3乗
ruby 数値
puts 10
puts -8
puts 2.5
puts 1_000_000
Javascript スプレッド構文
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My JavaScript</title>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
main.js
'use strict';
{
// let num = 10;
// const numBackup = num;
// num = 99;
// console.log(num);
// console.log(numBackup);
const nums = [10, 20, 30];
const numBackup = [...nums];
nums[0] = 99;
console.log(nums);
console.log(numBackup);
}
Javascript 値のバックアップ
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My JavaScript</title>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
main.js
'use strict';
{
// let num = 10;
// const numBackup = num;
// num = 99;
// console.log(num);
// console.log(numBackup);
const nums = [10, 20, 30];
const numBackup = nums;
nums[0] = 99;
console.log(nums);
console.log(numBackup);
}