見出し画像

ChatGPTに症例報告用のパワーポイントスライドを作ってもらいたい

0. はじめに

※ 悲報
2023/10 AIの日々の進化から本記事は完全に時代遅れになりました。
↓ 最新の情報となります

ChatGPT (AI) の普及で様々な手法で発表用のスライド作成の自動化が開発されています。症例報告のプレゼン用スライドはどの学会でも「ある程度の」決まった型があります。 そのようなプレゼンテーションではChatGPTの威力が発揮されると思います。以前twitterでワードファイルからパワポのスライドを半自動化で作成する方法を紹介しました。この手法自体は古くから存在するものでしたが, ChatGPTによって検査値の表作成の自動化など個人のプレゼンにカスタマイズすることができるようになりました。この辺りは次期MS office copilotでも出来ない荒業と個人的に思いますので今回紹介させていただきます。

1. 準備

病歴要約word ファイルから 症例報告 power pointファイルを作成します。

病歴要約の準備

テキストデータ (word file) を準備します。

title 【確定診断名】, 【主訴】, 【現病歴】・・・病歴要約の形式として作成されたテキストファイルを準備します。

患者テキストデータから「病歴要約」の形式にする方法を以下に紹介しています。

2. 作成

病歴要約をもとにパワーポイントスライドを作っていきます。手法として以下の2通りで検証します。

2.1 Wordでアウトラインレベルを設定しパワーポイントへ展開

2.1.1 アウトラインレベルの設定 (Word)

title (各スライドの見出し) をアウトラインレベル1
各スライドの内容 をアウトラインレベル2 に設定します。

デフォルトでは全ての文章がアウトラインレベル「本文」に設定されています。
Title 主訴 検査所見 入院時現症 などを見出し=アウトラインレベル1に設定

アウトラインレベル1 title (見出し) はパワーポイントのスライドの見出しに対応しており, titleに設定されたキーワードの数がパワーポイントスライドの枚数に対応します。

今回は 【主訴】【入院時現症】【検査所見】などをアウトラインレベル1に設定し, そのキーワードが各スライドの一番上のtitleになるようにしています。

各スライドの内容をアウトラインレベル2に設定

各スライドの内容 (本文) アウトラインレベル2はパワーポイントの各スライド本文に対応しています。

もちろん手動でWordの表示→アウトラインから特定の単語をアウトラインレベル1に設定する方法もあります。

症例報告のような決まった形式で毎回スライドを作成する場合は以下の方法でテンプレートを作成しておけば作成時間が大幅に短縮できます。

2.1.2 パワーポイントでアウトラインからインポート

パワーポイントを起動→挿入→新しいスライド→アウトラインからスライド
先ほど作成したワードファイルを選びます。

パワーポイントに病歴要約のスライドが展開されました。

2.1.3 表の作成

検査値の文字列が含まれるテキストボックスをクリックし, マクロを実行します。

n行×2列の検査項目を含む表が出来ました。

2.1.4 グラフの作成 

入院後経過などの複雑なグラフ (特に2軸) は, 現時点でChatGPT (AI) で作成は困難と考えています。sampleコードから作成する手法を今回採用しています。

一応, 自動??でグラフ作成できました。

2.1 ChatGPTでパワーポイントVBAを作成

こちらも古くからある手法でアウトラインレベルを設定することなく直接出力でき, 操作が簡便です。こちらの方が主流でしょうか。

Act as a VBA programmer. Write me VBA code to create PowerPoint slides about the sports
drink and hydration beverage category. think like a senior CPG brand manager and market
researcher. use your knowledge and create at least 10 slides.

GPT-4で「〇〇についてパワーポイント〇のスライドを作成するVBAコードを作って」くださいとプロンプトし, それをpower point VBAで実行するだけです。
ただし※プロンプトの文字数が1000文字を超えるあたりからエラーが頻出するような気がするので長文の場合は分割してプロンプトするしかなさそうです。

今回, カルテ原文とプロンプトを合わせて1000文字以内で作成したもので検証しました。
※S1, S2などのスライドの表記は手動で追記しました。
以下ChatGPT4にプロンプトします。

以下の文章をパワーポイントスライドVBAの形式に変更してください。スライド枚数は7枚です。
以下に各スライドの本文を提示します。

本文:
S1. Title 病院奇譚
【確定診断名】(#1(ネコミウイルス感染症)、#2(糖尿病)、#3(高血圧))
S2. 【主訴】咽頭痛、呼吸苦、発熱、倦怠感
【現病歴】糖尿病と高血圧症を抱える52歳の男性。血液検査で白血球数上昇が指摘され、キャッツ総合病院へ
緊急紹介された。812日、キャッツ総合病院への入院となった。
S3. 【既往歴】糖尿病、高血圧
【社会生活歴】アレルギー歴:なし、喫煙歴:1020本/日、飲酒歴:ウイスキーやワインを適量、
 職業:レストランマネージャー
【家族歴】父:脳卒中で死亡
S4. 【入院時現症】身長と体重は記載がないため不明。体温38.5℃.脈拍100/分,整。血圧150/95mmHg.
  呼吸数22/分。眼瞼結膜に貧血、眼球結膜に黄疸はない。胸部:肺音に異常はない。心音に異常はない。
 腹部:平坦,軟で圧痛はない。肝・脾を触知しない。四肢:下腿浮腫を認めない。皮疹はない。
リンパ節の腫脹や咽頭発赤を認める。
【検査所見】尿所見:なし、血液所見:赤血球 4.2万/μL、Hbなし、Htなし、白血球 9,000/μL
(NEなし、LY 20%、MONOなし、EOSなし)、血小板なし、PTなし、APTTなし、血漿フィブリノゲンなし、
血清FDPなし。血液生化学所見:TPなし、Albなし、フェリチンなし、AST 48 U/L、ALT 38 U/L、LDなし、
BUNなし、Cr 1.3 mg/dL。免疫血清学所見:CRP 25 mg/dL、リウマトイド因子陰性、MPO-ANCA <なし、
PR3-ANCA <なし、抗核抗体陰性。
S5. 【プロブレムリスト】(#1. ネコミウイルス感染症、#2. 糖尿病、#3. 高血圧)
【退院時処方】
アムロジピン 5 mg 1T 分1 朝食後, メトホルミン 500 mg 1T 分2 朝・夕食後, 
キャットフード(サーモン味) 1缶/日
S6. 【入院後経過と考察】
ハルミの症状が徐々に改善し始めた経過は次の通りである。当初の核酸増幅法検査でネコミウイルスに
陰性と判明したが、症状改善せず、メロペネム、アジスロマイシン、レムデシビル、ステロイドパルス療法に
も反応なし。
S7. 【総合考察】
医療界は基礎疾患と感染症の関連性を研究し、ハルミの事例では食事の変更が病状に影響を与えたことが
わかった。また、ドクターニャンソンは鼻舐め診断法の改善を試み、感染リスクの軽減と診断の精度向上を
示した。

得られたVBAコードは↓です。

Sub CreateSlides()

    Dim ppt As Presentation
    Dim sld As Slide
    Dim shp As Shape
    Dim slideTexts As Variant

    Set ppt = ActivePresentation

    slideTexts = Array("Title 病院奇譚【確定診断名】(#1(ネコミウイルス感染症)、#2(糖尿病)、#3(高血圧))", _
                       "【主訴】咽頭痛、呼吸苦、発熱、倦怠感【現病歴】糖尿病と高血圧症を抱える52歳の男性。血液検査で白血球数上昇が指摘され、キャッツ総合病院へ緊急紹介された。8月12日、キャッツ総合病院への入院となった。", _
                       "【既往歴】糖尿病、高血圧【社会生活歴】アレルギー歴:なし、喫煙歴:10〜20本/日、飲酒歴:ウイスキーやワインを適量、職業:レストランマネージャー【家族歴】父:脳卒中で死亡", _
                       "【入院時現症】身長と体重は記載がないため不明。体温38.5℃.脈拍100/分,整。血圧150/95mmHg.呼吸数22/分。眼瞼結膜に貧血、眼球結膜に黄疸はない。胸部:肺音に異常はない。心音に異常はない。腹部:平坦,軟で圧痛はない。肝・脾を触知しない。四肢:下腿浮腫を認めない。皮疹はない。リンパ節の腫脹や咽頭発赤を認める。【検査所見】尿所見:なし、血液所見:赤血球 4.2万/μL、Hbなし、Htなし、白血球 9,000/μL(NEなし、LY 20%、MONOなし、EOSなし)、血小板なし、PTなし、APTTなし、血漿フィブリノゲンなし、血清FDPなし。血液生化学所見:TPなし、Albなし、フェリチンなし、AST 48 U/L、ALT 38 U/L、LDなし、BUNなし、Cr 1.3 mg/dL。免疫血清学所見:CRP 25 mg/dL、リウマトイド因子陰性、MPO-ANCA <なし、PR3-ANCA <なし、抗核抗体陰性。", _
                       "【プロブレムリスト】(#1. ネコミウイルス感染症、#2. 糖尿病、#3. 高血圧)【退院時処方】アムロジピン 5 mg 1T 分1 朝食後, メトホルミン 500 mg 1T 分2 朝・夕食後, キャットフード(サーモン味) 1缶/日", _
                       "【入院後経過と考察】ハルミの症状が徐々に改善し始めた経過は次の通りである。当初の核酸増幅法検査でネコミウイルスに陰性と判明したが、症状改善せず、メロペネム、アジスロマイシン、レムデシビル、ステロイドパルス療法にも反応なし。", _
                       "【総合考察】医療界は基礎疾患と感染症の関連性を研究し、ハルミの事例では食事の変更が病状に影響を与えたことがわかった。また、ドクターニャンソンは鼻舐め診断法の改善を試み、感染リスクの軽減と診断の精度向上を示した。")

    For i = LBound(slideTexts) To UBound(slideTexts)
        Set sld = ppt.Slides.Add(i + 1, ppLayoutText)
        Set shp = sld.Shapes(2) 'assuming this is the content placeholder shape
        shp.TextFrame.TextRange.Text = slideTexts(i)
    Next i

End Sub

こちらをPowerPointのVBAに貼りつけるだけです。

パワーポイントスライドが出力されました。
こちらの手法は操作が非常に簡単ですが, 長文プロンプトはエラーが出やすい, S1, S2などのページ表記を自分で設定する必要があります。

3. デザインの強化 別途note

Office 365 デザイナー, 自動生成系AIなど使用することでデザイン性の優れた見栄えのよいスライド作成が可能となります。別途noteにて近日公開予定です。●

4. 作成の解説

4.1 背景

テキストファイルから文章をパワーポイントへ出力しスライド作成を半自動で行う方法は以前から提唱されています。

上のリンク先に詳細が記載されていますが, まとめますと
① テキストファイルの場合:
本文をTabキー押して入力+UTF-16LEファイルで保存 
② Wordファイルの場合:
・タイトル (見出し) をアウトラインレベル1
・内容をアウトラインレベルを2に設定

その後, パワーポイントでアウトラインレベルから挿入 を選ぶだけです。

ChatGPTの普及以後, 自動化の波がやってきました。noteでもすでに多くの手法が紹介されてます。。

ChatGPTに頼むことで, ビジュアルベーシック (VBA) のコードをプログラミングの知識なしで作ることが可能となり, テクストの貼り付け以外に, 表やグラス作成の自動化など各人に合わせたカスタマイズの幅が広がりました。

4.2 アウトラインレベルの設定 VBA code作成

前述した方法の他に今回, 自動化の代表ともいえるビジュアルベーシック (VBA) を用いた方法を紹介します。ビジュアルベーシック自体の使い方は以下にあります。
ChatGPTにWord用のVBAコード作成依頼します↓

プロンプト:
マイクロソフトWordのVBAコードを作成してください。
すべての段落をアウトラインレベル2に設定してください。
また、指定されたキーワードを含む段落をアウトラインレベル1に設定してください。
検索対象となるキーワードの例としては、「Title」「主訴」「入院時現症」「検査所見」
「プロブレムリスト」「入院後経過と考察」「退院時処方」「総合考察」があります。
すべての機能を1つのサブルーチンにまとめて実行できるようにしてください。

得られたコードは↓です。

Sub SetOutlineLevel2()
    Dim doc As Document
    Dim para As Paragraph
    Set doc = ActiveDocument

    ' すべての段落を処理
    For Each para In doc.Paragraphs
        ' 段落のアウトラインレベルを2に設定
        para.OutlineLevel = wdOutlineLevel2
    Next para
End Sub

Sub SetOutlineLevel1ForMultipleKeywords()
    Dim keywords() As Variant
    Dim keyword As Variant
    Dim targetRange As Range
    
    ' キーワードの配列を作成し、検索したい単語を設定します
    keywords = Array("Title", "主訴", "入院時現症", "検査所見", "プロブレムリスト", 
"入院後経過と考察", "退院時処方", "総合考察")

    ' 配列内の各キーワードに対して、検索とアウトラインレベル1の設定を行う
    For Each keyword In keywords
        With ActiveDocument.Content.Find
            .ClearFormatting
            .Text = keyword
            .Forward = True
            .Wrap = wdFindStop
            .Execute
            While .Found
                Set targetRange = ActiveDocument.Range(Start:=.Parent.Start, End:=.Parent.End)
                targetRange.ParagraphFormat.OutlineLevel = wdOutlineLevel1
                .Execute
            Wend
        End With
    Next keyword
End Sub

Sub SetOutlineLevels()
    ' まず、本文に設定されている段落をすべてアウトラインレベル2に変換します。
    SetOutlineLevel2

    ' 次に、指定されたキーワードが含まれている段落をアウトラインレベル1に設定します。
    SetOutlineLevel1ForMultipleKeywords
End Sub

このコードをword vbaで実行すると アウトラインレベルが自動で設定されます。

4.3 表作成 VBA code作成

パワーポイントで表を作成するVBA コード作成のプロンプトは以下です↓

プロンプト powerpoint 表作成
選択されたPowerPointテキストボックスのテキストを、カンマで区切られたデータとして扱い、
そのデータを基にしたテーブルを新しく作成するVBAマクロを作成してください。
テーブルの各行は、テキストデータの各要素に対応し、1列目にはラベル、2列目には値が入るようにしてください

得られたcodeは↓です

Sub CreateTableFromText()
    Dim text As String
    Dim data() As String
    Dim numRows As Integer
    Dim i As Integer
    Dim dataTable As Table
    Dim slide As slide

    ' Get the active slide
    Set slide = ActiveWindow.View.slide

    ' Get the text from the selected text box
    text = slide.Shapes(1).TextFrame.TextRange.text

    ' Replace full-width comma with half-width comma
    text = Replace(text, ",", ",")

    ' Split the text by comma
    data = Split(text, ",")

    ' Calculate the number of rows
    numRows = UBound(data) - LBound(data) + 1

    ' Create a table with numRows rows and 2 columns
    Set dataTable = slide.Shapes.AddTable(numRows, 2, 0, 0, 500, 300).Table

    ' Populate the table
    For i = LBound(data) To UBound(data)
        ' Split the data element into label and value
        Dim parts() As String
        parts = Split(Trim(data(i)), " ", 2)

        ' Set the label and value in the table
        dataTable.Cell(i + 1, 1).Shape.TextFrame.TextRange.text = parts(0)
        If UBound(parts) > 0 Then
            dataTable.Cell(i + 1, 2).Shape.TextFrame.TextRange.text = parts(1)
        End If
    Next i
End Sub

同様にパワーポイントVBAを起動して実行します。

4.4 ビジュアルベーシック (VBA) の設定

wordまたはpowerpointを開き 「Alt+F11」 を押します。

Microsoft Visula Basic for Applicationsが起動します

作成したコードを貼り付けます。

保存ボタンを押して保存します

※注意 ファイルの種類は「Word (Powerpoint) マクロ有効文書」とします

5. まとめ

完全自動まではまだまだですが, 一度,  マクロを埋め込んだwordファイルを作成しておけば次回から時間の大幅短縮化が可能となります。実際, 紙カルテをスキャナーを取り込み, power pointの形式まで出力するのに2-3分で出来ました。 今までなら検査値を手入力するだけで数分以上はかかっていましたので作業効率が見込まれます。