{"id":19703,"date":"2024-02-21T12:52:40","date_gmt":"2024-02-21T03:52:40","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=19703"},"modified":"2024-02-21T12:54:07","modified_gmt":"2024-02-21T03:54:07","slug":"python-chatgpt2-ai","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=19703","title":{"rendered":"python chatGPT2-AI"},"content":{"rendered":"\n<p>chatGPT-2.py<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-python\" data-lang=\"Python\"><code>from flask import Flask, render_template, request, redirect, url_for\r\nfrom transformers import GPT2Tokenizer, GPT2LMHeadModel\r\nimport wikipedia\r\n\r\napp = Flask(__name__)\r\n\r\n# GPT-2\u306e\u30c8\u30fc\u30af\u30ca\u30a4\u30b6\u30fc\u3068\u30e2\u30c7\u30eb\u3092\u30ed\u30fc\u30c9\r\ntokenizer = GPT2Tokenizer.from_pretrained(&quot;gpt2&quot;)\r\nmodel = GPT2LMHeadModel.from_pretrained(&quot;gpt2&quot;)\r\n\r\n@app.route(&#39;\/&#39;)\r\ndef index():\r\n    return render_template(&#39;index.html&#39;)\r\n\r\n@app.route(&#39;\/generate&#39;, methods=[&#39;POST&#39;])\r\ndef generate_text():\r\n    # \u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u5165\u529b\u3092\u53d6\u5f97\r\n    prompt_text = request.form[&#39;prompt&#39;]\r\n    \r\n    try:\r\n        # Wikipedia\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u3092\u53d6\u5f97\r\n        wikipedia_text = wikipedia.summary(prompt_text)\r\n        \r\n        # \u30c6\u30ad\u30b9\u30c8\u306e\u751f\u6210\r\n        inputs = tokenizer.encode(wikipedia_text, return_tensors=&quot;pt&quot;)\r\n        outputs = model.generate(inputs, max_length=100, num_return_sequences=1, temperature=0.7)\r\n        \r\n        # \u751f\u6210\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u30c7\u30b3\u30fc\u30c9\u3057\u3066HTML\u30b3\u30fc\u30c9\u306b\u7d44\u307f\u8fbc\u3080\r\n        generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)\r\n        \r\n        # \u751f\u6210\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3068Wikipedia\u306e\u30c6\u30ad\u30b9\u30c8\u3068\u5171\u306bHTML\u3092\u8fd4\u3059\r\n        return render_template(&#39;index.html&#39;, prompt_text=prompt_text, generated_text=generated_text, wikipedia_text=wikipedia_text)\r\n    \r\n    except wikipedia.exceptions.DisambiguationError as e:\r\n        # \u66d6\u6627\u6027\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u5019\u88dc\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\r\n        options = e.options\r\n        return render_template(&#39;disambiguation.html&#39;, options=options)\r\n    \r\n    except wikipedia.exceptions.PageError:\r\n        wikipedia_text = &quot;Wikipedia\u306b\u305d\u306e\u30c8\u30d4\u30c3\u30af\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002&quot;\r\n        return render_template(&#39;index.html&#39;, prompt_text=prompt_text, wikipedia_text=wikipedia_text)\r\n\r\n@app.route(&#39;\/generate_with_option\/&lt;option&gt;&#39;, methods=[&#39;GET&#39;])\r\ndef generate_with_option(option):\r\n    try:\r\n        # Wikipedia\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u3092\u53d6\u5f97\r\n        wikipedia_text = wikipedia.summary(option)\r\n        \r\n        # \u30c6\u30ad\u30b9\u30c8\u306e\u751f\u6210\r\n        inputs = tokenizer.encode(wikipedia_text, return_tensors=&quot;pt&quot;)\r\n        outputs = model.generate(inputs, max_length=100, num_return_sequences=1, temperature=0.7)\r\n        \r\n        # \u751f\u6210\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u30c7\u30b3\u30fc\u30c9\u3057\u3066HTML\u30b3\u30fc\u30c9\u306b\u7d44\u307f\u8fbc\u3080\r\n        generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)\r\n        \r\n        # \u751f\u6210\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3068Wikipedia\u306e\u30c6\u30ad\u30b9\u30c8\u3068\u5171\u306bHTML\u3092\u8fd4\u3059\r\n        return render_template(&#39;index.html&#39;, prompt_text=option, generated_text=generated_text, wikipedia_text=wikipedia_text)\r\n    \r\n    except wikipedia.exceptions.PageError:\r\n        wikipedia_text = &quot;Wikipedia\u306b\u305d\u306e\u30c8\u30d4\u30c3\u30af\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002&quot;\r\n        return render_template(&#39;index.html&#39;, prompt_text=option, wikipedia_text=wikipedia_text)\r\n\r\nif __name__ == &#39;__main__&#39;:\r\n    app.run(debug=True)\r\n<\/code><\/pre><\/div>\n\n\n\n<p>templates\/index.html<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-html\" data-lang=\"HTML\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n    &lt;title&gt;Generate Text&lt;\/title&gt;\n    &lt;style&gt;\n        body {\n            font-family: Arial, sans-serif;\n            margin: 0;\n            padding: 0;\n            background-color: #f4f4f4;\n        }\n\n        header {\n            text-align: center;\n            margin-top: 50px;\n        }\n\n        main {\n            max-width: 800px;\n            margin: 0 auto;\n            padding: 20px;\n        }\n\n        .form-section, .response-section, .wikipedia-section {\n            background-color: #fff;\n            border-radius: 8px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n            padding: 20px;\n            margin-bottom: 20px;\n        }\n\n        .prompt-form {\n            max-width: 100%;\n        }\n\n        label {\n            font-weight: bold;\n        }\n\n        input[type=&quot;text&quot;] {\n            width: 100%;\n            padding: 10px;\n            margin: 10px 0;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n        }\n\n        button {\n            padding: 10px 20px;\n            background-color: #007bff;\n            color: #fff;\n            border: none;\n            border-radius: 4px;\n            cursor: pointer;\n            transition: background-color 0.3s ease;\n        }\n\n        button:hover {\n            background-color: #0056b3;\n        }\n\n        .generated-text {\n            margin-top: 20px;\n        }\n\n        .tweet-link {\n            display: block;\n            margin-top: 10px;\n            text-align: center;\n        }\n\n        footer {\n            text-align: center;\n            margin-top: 50px;\n        }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\n    &lt;header&gt;\n        &lt;h1&gt;Generate Text&lt;\/h1&gt;\n    &lt;\/header&gt;\n\n    &lt;main&gt;\n        &lt;section class=&quot;form-section&quot;&gt;\n            &lt;form action=&quot;\/generate&quot; method=&quot;POST&quot; class=&quot;prompt-form&quot;&gt;\n                &lt;label for=&quot;prompt&quot;&gt;Enter your prompt:&lt;\/label&gt;&lt;br&gt;\n                &lt;input type=&quot;text&quot; id=&quot;prompt&quot; name=&quot;prompt&quot; placeholder=&quot;Enter your prompt...&quot;&gt;&lt;br&gt;&lt;br&gt;\n                &lt;button type=&quot;submit&quot;&gt;Generate&lt;\/button&gt;\n            &lt;\/form&gt;\n        &lt;\/section&gt;\n\n        &lt;!-- \u751f\u6210\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u8868\u793a --&gt;\n        {% if generated_text %}\n        &lt;section class=&quot;response-section&quot;&gt;\n            &lt;div class=&quot;response&quot;&gt;\n                &lt;h2&gt;Generated Text:&lt;\/h2&gt;\n                &lt;p class=&quot;generated-text&quot;&gt;{{ generated_text }}&lt;\/p&gt;\n                &lt;a href=&quot;https:\/\/twitter.com\/intent\/tweet?text={{ generated_text }}&quot; class=&quot;tweet-link&quot;&gt;Tweet&lt;\/a&gt;\n            &lt;\/div&gt;\n        &lt;\/section&gt;\n        {% endif %}\n\n        &lt;!-- Wikipedia\u304b\u3089\u306e\u95a2\u9023\u60c5\u5831\u3092\u8868\u793a --&gt;\n        {% if wikipedia_text %}\n        &lt;section class=&quot;wikipedia-section&quot;&gt;\n            &lt;div class=&quot;wikipedia-info&quot;&gt;\n                &lt;h2&gt;Wikipedia Info:&lt;\/h2&gt;\n                &lt;p&gt;{{ wikipedia_text }}&lt;\/p&gt;\n            &lt;\/div&gt;\n        &lt;\/section&gt;\n        {% endif %}\n\n        &lt;!-- \u4fdd\u5b58\u30dc\u30bf\u30f3 --&gt;\n        &lt;button id=&quot;saveButton&quot;&gt;Save Generated Text&lt;\/button&gt;\n    &lt;\/main&gt;\n\n    &lt;footer&gt;\n        &lt;p&gt;&copy; 2024 Generate Text App&lt;\/p&gt;\n    &lt;\/footer&gt;\n\n    &lt;script&gt;\n        \/\/ \u4fdd\u5b58\u30dc\u30bf\u30f3\u304c\u30af\u30ea\u30c3\u30af\u3055\u308c\u305f\u3068\u304d\u306e\u51e6\u7406\n        document.getElementById(&#39;saveButton&#39;).addEventListener(&#39;click&#39;, function() {\n            \/\/ \u751f\u6210\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u53d6\u5f97\n            var generatedText = document.querySelector(&#39;.generated-text&#39;).innerText;\n            \/\/ \u30c6\u30ad\u30b9\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u7528\u306bBlob\u306b\u5909\u63db\n            var blob = new Blob([generatedText], { type: &#39;text\/plain&#39; });\n            \/\/ Blob\u3092URL\u306b\u5909\u63db\n            var url = window.URL.createObjectURL(blob);\n            \/\/ \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u7528\u306e\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3057\u3066\u30af\u30ea\u30c3\u30af\n            var a = document.createElement(&#39;a&#39;);\n            a.href = url;\n            a.download = &#39;generated_text.txt&#39;;\n            document.body.appendChild(a);\n            a.click();\n            \/\/ \u4e0d\u8981\u306aURL\u3092\u89e3\u653e\n            window.URL.revokeObjectURL(url);\n            document.body.removeChild(a);\n        });\n    &lt;\/script&gt;\n\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre><\/div>\n\n\n\n<p>\u4eca\u56de\u306f\u30c6\u30ad\u30b9\u30c8\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f<\/p>\n","protected":false},"excerpt":{"rendered":"<p>chatGPT-2.py templates\/index.html \u4eca\u56de\u306f\u30c6\u30ad\u30b9\u30c8\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[55,80,4,65],"tags":[3,39],"class_list":["post-19703","post","type-post","status-publish","format-standard","hentry","category-ai","category-html","category-programming","category-python","tag-programming","tag-python"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/19703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19703"}],"version-history":[{"count":1,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/19703\/revisions"}],"predecessor-version":[{"id":19704,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/19703\/revisions\/19704"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19703"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}