2
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LangChain: HTMLテキストの内容を要約する

Posted at

0. はじめに

今回の記事は以前書いたPythonでのWebスクレイピングの続編です。

今回は、HTMLのテキストを取得できた前提で、そのテキストの内容の要約をつくらせてみようという話です。スクレイピングから要約までの一連の流れをスクリプトにまとめて自動化し、自分の欲しい情報があるURLのリストさえ作ってしまえば、欲しい情報を効率的に入手できるようになります! 適切な方法で行われるスクレイピングは、データ解析や市場調査などの多岐にわたる用途で非常に有用ですが、行う前には十分な注意と配慮が必要です。

法的問題:無許可でのスクレイピングは、著作権侵害や不正アクセスとみなされることがあります。
サイトの利用規約:多くのWebサイトは利用規約でスクレイピングを禁止している場合があります。
サーバーへの負荷:頻繁なアクセスはサイトのサーバーに負荷をかける可能性があります。

このような点には十分に気を付けてください。それでは早速みていきましょう。

1. LLMの定義

まずはいつも通りAPIキーやLLMを設定します。

import os
import openai
from langchain.chat_models import ChatOpenAI

# OpenAI APIキー設定
openai.api_key = os.environ['OPENAI_API_KEY']

# ChatOpenAIモデルの設定
LLM = ChatOpenAI(
    model_name='gpt-3.5-turbo-16k',
    temperature=0
)

2. プロンプトテンプレートの作成

次にChatPromptTemplateをつかってSystemMessageHumanMessageを仕込みます。そして最後に入力のテキストファイルを読み込みます。

from langchain.schema import AIMessage, HumanMessage, SystemMessage
from langchain.prompts import PromptTemplate, ChatPromptTemplate
from langchain.prompts.chat import SystemMessage, HumanMessagePromptTemplate

# プロンプトテンプレートを定義
template = ChatPromptTemplate.from_messages(
    [
        SystemMessage(
            content=(
                 "以下は、HTMLからテキストに変換したものです。"
                 "登場人物やあらすじについて4000字程度にまとめてください。"
            )
        ),
         HumanMessagePromptTemplate.from_template("{text}"),
    ]
)

# テキストの読み込み
with open("./output/html_data.txt", 'r', encoding='utf-8') as file:
    text_from_file = file.read()

3. 出力結果の確認

最後にLLMへ読み込んだテキストを入力します。

result = LLM(template.format_messages(text=text_from_file))
print(result)

それでは出力結果を確認してみましょう。今回は、ウィキペディアからドラゴンボール超について要約させてみました。

'『ドラゴンボール超』は、鳥山明の漫画作品『ドラゴンボール』を原作としたテレビアニメで、孫悟空を主人公に、魔
人ブウとの戦いのその後を描いています。物語はいくつかの編に分かれており、以下にそれぞれの編の概要をまとめま
す。

1. 破壊神ビルス編:ビルスとの戦いの後、悟空たちは平和な日々を過ごしていましたが、ビルスの双子の兄弟である破
壊神シャンパが現れ、地球の美味しい食べ物を求めて戦いを挑んできます。シャンパとビルスは各宇宙の戦士を選抜
して団体戦を行い、最終的に第7宇宙が勝利します。

2. “未来”トランクス編:未来のトランクスが現代にやってきて、ゴクウブラックという戦士が未来世界で暴れているこ
とを伝えます。悟空たちは未来世界に向かい、ゴクウブラックと戦います。最終的にはゴクウブラックを倒し、未来
世界を救います。

3. 宇宙サバイバル編:全宇宙の代表戦士たちによる武道大会「力の大会」が開催されます。第7宇宙の戦士たちは他の
宇宙の戦士たちと激闘を繰り広げ、最終的には第7宇宙が勝利します。

4. ブロリー編:ブロリーという強力な戦士が登場し、悟空たちは彼と戦います。最終的にはブロリーを倒し、平和を取
り戻します。

5. 銀河パトロール囚人編:凶悪犯のモロが脱獄し、悟空たちは彼と戦います。最終的にはモロを倒し、地球を救います。

6. 生残者グラノラ編:グラノラという生き残りのシリアル人が登場し、悟空たちは彼と戦います。最終的にはグラノラ
の復讐を果たし、彼と和解します。

7. スーパーヒーロー編:トランクスと悟天がヒーロー活動を行いながら、謎の敵と戦います。\n\n以上が『ドラゴンボ
ール超』の主な登場人物やあらすじの概要です。物語は悟空たちの戦いや成長、友情や家族の絆を描きながら、宇宙
の平和を守るために戦い続ける彼らの姿を描いています。

4000字程度という指示はあんまり守られている感じはしませんが、そもそも入力トークンがすでに16kに近かったため、致し方ないかなとは思います。

まとめ

LangChainのおかげで、ちょっとしたPythonコードを書くだけで簡単に文章の要約を行うことができるようになりました。これで大量の情報を効率よく把握することが可能になります。ぜひ、皆さんも試してみてください!

関連記事

参考文献

*本記事はcode snippetをもとに、ChatGPTに作らせています。(手直しはしてます)

2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?