OpenAIのAPIを使って青空文章の指定した作品を要約するPythonプログラムを書いてもらった

Bing_AI-Chatに、OpenAIのAPIを使って青空文章の指定した作品を要約するPythonプログラムを書いてもらいました。ChatGPTだとエラー(たまたまサーバ負荷が高い時間帯だったのか)だったのでBingを使ってます。

指示文(プロンプト):

キストを指定した行数で要約するPythonプログラムを提示してください。 ダウンロード元は青空文庫でURLを指定します。データの取得にはBeautiful Soup 4を使ってください。 テキストの要約にはopenAIのAPIを利用してください。

回答:

Python青空文庫からテキストを取得し、OpenAIのAPIを使って文章の要約をするプログラムを作成することができます。青空文庫からデータを取得するには、PythonのライブラリであるBeautiful Soup 4を使うことができます。これらのライブラリを使って、以下のようなプログラムを作成することができます。


import requests
from bs4 import BeautifulSoup
import openai

def summarize_text(url, num_sentences):
    # 青空文庫からテキストデータを取得
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    text = soup.find('div', {'class': 'main_text'}).text

    # OpenAI APIによる文章要約
    openai.api_key = "YOUR_API_KEY"
    model_engine = "text-davinci-002"
    prompt = (f"Please summarize the following text into {num_sentences} sentences:\n{text}")
    completions = openai.Completion.create(engine=model_engine, prompt=prompt, max_tokens=1024)
    message = completions.choices[0].text.strip()

    return message

url = "https://www.aozora.gr.jp/cards/000148/files/789_14547.html"
num_sentences = 3
print(summarize_text(url, num_sentences))
    

このプログラムは、指定したURLから青空文庫のテキストデータを取得し、OpenAI APIによって指定した行数で要約された文章を返します。

結果:

サンプルプログラムだと夏目漱石の「吾輩は猫である」がurlとして入ってましたが、これだと長すぎるので、吉川英治の「三国志 序」にしてみました。というか、たまたま短文を探していて「吉川 三国志」にあたったのですが、青空文庫で読めるのか、すごいな。。。

OpenAI APIには制限があり、長いテキストだとエラーになります。今回のモデルの最大コンテキスト長は4097トークンだそうです。あと、OpenAIからのレスポンスも不安定で、同じコードでも何度かやり直すと成功したり失敗したり、日本語ではなく別の言語で要約が帰ってきたりします。