YouTube字幕ちゃんをひろひろして、ChatGPTでキュートに要約しちゃお♪

# 目的
このセミナーの動画はね、お話が1時間くらいあって、文字数も20,000字くらいなんだよ。だから、ChatGPTちゃんでパッと要約するのはちょっと難しいんだけどね。

でもね、文章をちょっとずつ切って、まとめちゃうと、すっきりして分かりやすい内容になるんだよ♪ だって、長々としたお話の動画って、ちょっぴり見る気が失せちゃうことあるもんね。

めんどくさいことは、お手伝い上手なPythonちゃんにお願いしちゃおうね！


https://www.youtube.com/watch?v=uqGjOE_C4b0&t=1523s&ab_channel=%E6%97%A5%E6%9C%AC%E9%9B%BB%E7%94%A3%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BENidec


# 方法
YouTubeで長～いセミナーや英語の動画って、見るのがちょっぴり大変だよね。しかも、途中で大切な話が出てくるかどうかもわからないんだもん。だから、そんな時に役立つように、重要な部分が分かるようにしてみたかったんだ♪

今回の動画は、文字数が20,156文字でトークン数は20,688だったの。でもね、このトークン数だとAPIに文章を渡すのができないんだよね。だから、1500文字ずつに分けて、それぞれの文章を要約してみることにしたの。

最後に、要約された文章をつなげて、まとめちゃおうと思ったんだけど、トークンの制約上、たくさんの文章を渡すと、ちょっとだけしか要約文を作ってくれなかったんだよね。

プロンプトはこんな感じで、分割された文章の要約を試みたんだ♪
```python
    res = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "あなたは賢いAIです。"}, 
            {"role": "user", "content": f"これから渡す文章はyoutubeの字幕を抽出したものです.日本語で要約してください. {text}"},
        ],
        temperature=1
    )
```

分割された文章の要約をつなぎ合わせると、ふんわりとした全体像が浮かんでくる文章になるんだよね♪ それぞれの要約を、スムーズにつながるように編集して、ちゃんとわかりやすくまとめちゃおう！
(分割された文章を要約したものを要約する)
```python
    res = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "あなたは賢いAIです。"},  # 役割設定（省略可）
            {"role": "user", "content": f"これから渡す文章を日本語でできる限り省略せず纏めてください. {text}"},  # 最初の質問
        ],
        temperature=1
    )
```

```python


# YouTubeのURLから動画IDを抽出する関数
def extract_youtube_id(url):
    """
    YouTubeの動画IDをURLから抽出する関数

    Args:
        url (str): YouTubeの動画URL

    Returns:
        str: YouTubeの動画ID
    """
    # YouTubeの動画IDの正規表現パターン
    regex_pattern = r"(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|[^\/]+\?.*v=))([a-zA-Z0-9_-]{11})"

    # 正規表現パターンでIDを検索する
    match = re.search(regex_pattern, url)

    # マッチオブジェクトからIDを抽出する
    if match:
        return match.group(1)
    else:
        return None

def split_string(text, length):
    """
    文字列を指定した長さで分割する関数

    Args:
        text (str): 分割する文字列
        length (int): 分割する文字数

    Returns:
        list: 分割された文字列のリスト
    """
    # 空のリストを作成
    result = []

    # 指定された長さで文字列を分割してリストに追加する
    for i in range(0, len(text), length):
        result.append(text[i:i + length])

    return result

def summarize_transcript(text):
    '''
    字幕の要約を行う関数
    :param text: 字幕のテキスト情報
    :return: 要約された字幕のテキスト情報
    '''
    res = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "あなたは賢いAIです。"},  # 役割設定（省略可）
            {"role": "user", "content": f"これから渡す文章はyoutubeの字幕を抽出したものです.日本語で要約してください. {text}"},  # 最初の質問
        ],
        temperature=1
    )
    return res["choices"][0]["message"]["content"]


def summarize(text):
    '''
    要約する関数
    :param text: 要約する文章
    :return: 要約された文章
    '''
    res = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "あなたは賢いAIです。"},  # 役割設定（省略可）
            {"role": "user", "content": f"これから渡す文章を日本語でできる限り省略せず纏めてください. {text}"},  # 最初の質問
        ],
        temperature=1
    )
    return res["choices"][0]["message"]["content"]

def get_token_number(text):
    '''
    文章のトークン数を取得する関数
    :param text: 文章
    :return: トークン数
    '''
    encoding: Encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
    tokens = encoding.encode(text)
    tokens_count = len(tokens)
    return tokens_count

# 字幕のテキスト情報を抽出する関数
def get_subtitles_texts(transcript_list):
    """
    字幕リストから、各字幕のテキスト情報を抽出して一つの文字列に連結する関数。

    Args:
        transcript_list (list): YouTubeTranscriptApi.list_transcripts() で取得した字幕リスト。

    Returns:
        str: 各字幕のテキスト情報を連結した文字列。
    """
    str = ""
    for transcript in transcript_list:
        for tr in transcript.fetch():
            str += tr['text']  # {'text': '字幕のテキスト情報', 'start': 字幕の開始時間, 'duration': 字幕が表示されている時間}
    return str

def main():
    # YouTubeの動画URL
    url = "https://www.youtube.com/watch?v=uqGjOE_C4b0&ab_channel=%E6%97%A5%E6%9C%AC%E9%9B%BB%E7%94%A3%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BENidec"

    # 動画IDを抽出する
    youtube_id = extract_youtube_id(url)
    print(youtube_id)

    # 字幕情報を取得する
    transcript_list = YouTubeTranscriptApi.list_transcripts(youtube_id)
    text = get_subtitles_texts(transcript_list)
    print(text)
    print("char count : ", len(text))
    print("token : ", get_token_number(text))

    text_list = split_string(text, 1500)
    summary = ""
    for t in text_list:
        summarized_text = summarize_transcript(t)
        print(summarized_text)
        summary += summarized_text + "."

    print(summarize(summary))


if __name__ == '__main__':
    main()
```


# 結果

ChatGPT3.5ちゃんを使って、箇条書きの文章をまとめてくれると、すっきりと整理された、読みやすい文章になるんだよね♪ ちょっとずつのポイントが、ぴゅあぴゅあなまとめ文に変身しちゃうの！
```
この文章は、オンラインで開催される日本電産株式会社の会社説明会の留意事項を説明するものである。セミナー中に音声が途切れる場合があったり、自動録画されるが個人情報は含まれないなどの説明がされている。司会進行を務める内藤氏が、日本電産がモーター産業で米国を追いかける存在であることや、小さなモーターから、船舶や家電製品に至るまで多岐に渡る製品を手がけていることを述べる。日本電産の強みは世界一のシェアを有することであり、この文化を持っていくことが企業の基本であると説明している。また、近年はエネルギーの分野にも進出しており、今後更なる成長が期待されることを示唆している。
品の開発に注力しています。特に、電力消費を減らす、振動や熱の発生を減らす、そして音や重さも軽くすることを目指しているそうです。それによって、ほとんどがコードレスの製品を開発しています。これらの努力により、会社の成長は驚異的で、株価や利益も大きく伸びています。特に、M&Aという企業買収に注力しており、2020年代までに10兆円規模の企業になることを目指しているそうです。日本電産は、モーターをはじめ、車や家電など多くの分野で製品開発を進めており、業界の中でも強い技術力を持っていると評価されています。日本電産は、環境問題やデジタル化など、多くの課題を解決するために、企業買収を含めた様々な戦略を進めています。
この文章は、製品の多様性がすごく増えてきており、工作機械分野でも進出している。特に、電気自動車はモーター、インバーター、ギアが一体になった革新的な技術であり、今後もこの分野の投資を進めることが必要である。また、電気自動車の普及によって、自動車産業構造も変化していくことが予想される。我々はこの分野で成長し、世界のシェアを拡大していくことが狙いである。冷蔵庫も、革新的な技術であるモーターを活用し、消費電力が少なく、静かな成熟した製品を提供していくことも目指す。
このビデオでは、世界で最大のシェアを持つゆるDCブラシレスモーターについて説明されています。このモーターは、静かで省エネであり、地球環境の保全に役立つとされています。また、ニデックという新しいブランド名を採用し、100年にわたり発展し続けることを目指しているとのことです。最後には、配当金の増加や株価の回復についても言及されています。
この文章は、ある会社の株主総会での発言をYouTubeの字幕から抽出したものです。発言者は、自社が50周年を迎え、一新して新しいスタートを切りたいと話し、また、車載用のモーターについて「必ず世界一になる」と自信を示しました。株主還元については、配当性向30%を決めているものの、利益が増加傾向にあるため、30%に届いていないと語りました。また、投資や研究開発にも多額の費用がかかっていると話し、今回の投資は将来への成長に必要だと語りました。最後に、売り手が少ないため株価がなかなか上がらないが、この会社が成長企業であるため、将来性を信じて株を保有することを訴えました。
この文章は、投資をする必要がない場合について話しており、会社が成長して株価や配当金を増やすことが重要だと述べています。また、長期的な視野で株を保有することが望ましく、現在も配当や自社株買いを行っていることを伝えています。次に、後継者についての質問があり、5人の副社長を選んでおり、将来のことについては準備しているが、自分がやめるつもりはなく、株価を上げて会社を成長させ、世界的な企業にすることを目指していると答えています。後継者については優秀な社員がいるため、結果を待つように促しています。また、50年以上を経過しても創業者が会社を経営している日本の例に触れ、経営者が代替わりした場合でも、社員たちが力を発揮し、会社を成長させていくことができると述べています。
この文章は、日本電産が海外進出に積極的で、中国リスクにも対策を持っていることを述べたものです。彼らは分散することでリスクを軽減し、世界中で工場を持っています。また、電気自動車市場は今後急速に成長すると予測され、彼らの事業も世界トップになる可能性があると述べています。また、安価な車の需要が増えることを指摘し、後進国での需要拡大を見込んでいます。
この動画では、日本電産の経営方針と、世界の自動車産業のトレンドについて話されています。日本電産は、大量生産に眼を向けており、2025年以降に小型車で世界トップを目指しています。また、電気自動車市場も重視しており、静かなモーターが特徴的で、お客様に安心して使用できる車を提供する方針です。新しい製品や注力分野については、特に触れられていません。
この文章は、モーターメーカーが新しい分野に進出していることや、ロボットや工作機械、プレス機械の重要性、そしてモーターを利用した製品が人々の生活を便利にしていることについて述べています。さらに、日本やフランスで新しい工場を建設する計画があり、技術的な進歩についても言及されています。
この文章は、日本電産という会社のモーターが世界中で使われていることを説明しています。彼らは独自の技術により、薄く、軽く、小さいモーターを作ることに特化しており、その技術は世界中で注目されています。また、彼らは静かで効率的な車や電気製品を開発することにも力を入れており、貧しい国の人々にも買いやすい価格帯の製品を提供しています。
この話は、日本電産のモーターが多くの製品に使われていること、同社がM＆Aを積極的に行っており、自社の売上を上げ、成長していることが語られています。また、これからの需要を考え、ドローンなどの新しい技術が生み出されることが期待されているとし、その分野に注力すると述べられています。最後に、問題解決のために、新しい製品の開発が必要であるという話があります。
この文章は、自転車で幼稚園に通う子供たちを乗せている姿を見て、より早く実現できるように電気自動車を開発することが重要だと述べています。そのためには適したモーターを提供することが必要です。また、質問者が尊敬する経営者について聞かれた時、長森会長はオムロンの立石一真さんや稲盛和夫さんから多くのことを学び、人に曲げない戦う人が好きだと話しました。最後に、長森会長は若い人たちを強く見ており、教育の改善が必要だと思っています。彼は京都先端科学大学を設立して、若い人たちが遊びながら勉強し、楽しく英語を学ぶことができる環境を作り上げたと話しています。
この動画では、楽しく働けばいいという考え方を提唱し、特定の大学に偏ることが人材不足の原因であると主張しています。また、会社の株価に関する質問があり、長期的な投資と製品や投資に対するリターンが重要であると述べています。最後に、自身の資産を京セラ株に投資していることを明かしています。
この文章は、個人投資家向けの会社説明会で、ある会社の株について話されている内容です。この会社の株を購入してほしいという意図があるようです。説明者は、自身の考え方や哲学について説明し、この会社のトップは株価を8回から10回もチェックしていることを強調しています。最後に、会社説明会を終了することをアナウンスしています。
```

chatGPT3.5で箇条書きの文章をまとめたもの
```
この文章は、日本電産株式会社のオンライン会社説明会での留意事項を説明する内容です。セミナー中の音声が途切れる場合や個人情報を含まない自動録画が行われることが説明され、モーター産業で米国を追いかける存在であることやエネルギー分野への進出など、日本電産の強みと将来性についての話がされています。さらに、M&Aを進めて成長する戦略や新しい分野への進出、世界中で使われているモーターの開発などが言及されています。また、株価や配当金の増加、後継者問題や海外進出についての話もあり、会社の成長と将来性について詳しく語られています。
```


# 結論

ChatGPT4ちゃんが使えるようになったら、もっとずっと素晴らしいことができちゃうみたいだよね♪ 早くウェイトリストに入れておけば良かったなぁ。

プロンプトの最適化ができていないのと、改行がなくて見にくいけど、色々試していくうちにもっと楽しくなりそうだよね。セミナー以外にも、ゆっくり解説系の動画をサクサクまとめてくれると嬉しいな♪

とりあえず、まとめてくれたら、見るか見ないかの判断ができるし、助かるって感じだよね。それにしても、これからもっと便利になるのが楽しみだね♪

実はね、思ったよりも要約しきれなくて、分割された文章の要約を見るだけでも十分かもしれないんだよね。でもね、なんでこんな動画をまとめなきゃいけないのかって、ちょっぴり意味がわからない感じもするんだけど…。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141779/6c3bc91c-6bf3-8c78-b78a-d6b310e6cf40.png)