DioDocs for PDFとGPT-5でPDFファイルの内容を要約して出力する

GeminiやChatGPT、Microsoft CopilotなどAIアシスタントでは、PDFファイルを直接AIアシスタントに読み込ませてPDFドキュメントの内容を要約して返すことが可能です。

しかし、AIアシスタントではオプトアウト設定をしておかなければ入力したデータが学習データとして利用されてしまいます。企業内でAIアシスタントを利用する場合は、あらかじめオプトアウト設定を実施しておくか機密情報や個人情報などを入力しないように注意する必要があります。一方で、Azure OpenAI ServiceなどのパブリッククラウドのサービスではAIモデルの学習データとして入力データを利用しないようになっており、企業内での利用に適しているといえます。

本記事では、DioDocs for PDF(ディオドック)Azure OpenAI Serviceを組み合わせて利用して、AIアシスタントの処理と同じようにPDFドキュメントの内容を要約するアプリケーションを作成します。

Azure OpenAIの利用準備

Azureポータルから「リソースの作成」を選択します。さらにAzure OpenAIを選択して[作成]をクリックします。

Azure OpenAIの利用準備

リソースの作成に必要な情報を入力します。ネットワークとタグはデフォルトのままで作成します。

Azure OpenAIの利用準備

作成が完了すると以下のように作成したAzure OpenAIのリソースが表示されます。

Azure OpenAIの利用準備

デプロイしたリソースをクリックします。左のメニューから「リソース管理」-「Keys and Endpoint」を選択します。表示されたキーとエンドポイントをメモ帳などに控えておきます。

Azure OpenAIの利用準備

左のメニューから「概要」をクリックします。さらに「Go to Azure AI Foundry portal」か[Explore Azure AI Foundry portal]をクリックします。

Azure OpenAIの利用準備

左のメニューから「チャット」をクリックします。さらに「新しいデプロイの作成」-「基本モデルから」をクリックします。

Azure OpenAIの利用準備

モデルは「gpt-5-mini」を選択して[確認]をクリックします。

Azure OpenAIの利用準備

デプロイ名は「mescius-gpt-5-mini-test」として[デプロイ]をクリックします。

Azure OpenAIの利用準備

デプロイが完了した後に、こちらのデプロイ名をメモ帳などに控えておきます。

アプリケーションの作成

Visual Studioでコンソールアプリケーションを作成します。

アプリケーションの作成

NuGetパッケージマネージャーから以下のパッケージをインストールします。

  • Azure.AI.OpenAI
  • DioDocs.Pdf.ja
  • Microsoft.Extensions.AI
  • Microsoft.Extensions.AI.OpenAI
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.UserSecrets
アプリケーションの作成

シークレットマネージャーを使用してAzure OpenAIのエンドポイントとデプロイ名を格納します。ソリューションエクスプローラーでプロジェクト名を右クリックして「ユーザーシークレットの管理」を選択します。

アプリケーションの作成

secret.jsonが表示されるので以下のような構成にします。Azure OpenAIのリソース情報を記載しておきます。

{
  "AZURE_OPENAI_ENDPOINT": "エンドポイントのURL",
  "AZURE_OPENAI_KEY": "キー",
  "AZURE_OPENAI_GPT_NAME": "デプロイ名"
}

Program.csでは以下のような実装を行います。

  1. PDFファイルを読み込んで各ページのテキストをGetTextで抽出(1~8行目)
  2. プロンプトと共に抽出したテキストをAzure OpenAIへ送信して要約を実施(10~30行目)
  3. 新規のPDFファイルにDrawTextLayoutで要約した結果を書き込んで保存(32~45行目)

Azure OpenAIへの要約の送信には、Microsoft.Extensions.AIIChatClientインターフェイスを使用してAzure OpenAIのクライアントAzureOpenAIClientを作成しています。

// PDFドキュメントを読み込む
using FileStream fs = File.OpenRead("wetlands.pdf");
GcPdfDocument doc = new();
doc.Load(fs);

// 読み込んだドキュメントのページのテキストを取得
List<string> texts = [];
doc.Pages.ToList().ForEach(p_ => texts.Add(p_.GetText()));

// プロンプト作成
StringBuilder textPrompt = new();
textPrompt.AppendLine("以下の英文を日本語で簡潔に説明してください。");
foreach (var text in texts)
{
    textPrompt.Append(text);
}

// Azure OpenAIの設定
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();

// Azure OpenAIクライアントの作成
var client =
    new AzureOpenAIClient(
        new Uri(config["AZURE_OPENAI_ENDPOINT"]),
        new AzureKeyCredential(config["AZURE_OPENAI_KEY"]))
    .GetChatClient(config["AZURE_OPENAI_GPT_NAME"])
    .AsIChatClient();

// GPT5-miniモデルを使用して要約を生成
var response = await client.GetResponseAsync(textPrompt.ToString());

// 要約出力用
GcPdfDocument summary = new();
Page page = summary.NewPage();
GcGraphics g = page.Graphics;
var tl = g.CreateTextLayout();
tl.MaxWidth = page.Size.Width - 72 * 2;

// レスポンスの内容をPDFに書き込む
tl.AppendLine($"Azure OpenAI(gpt5-mini)の応答:");
tl.AppendLine(response.Text);
g.DrawTextLayout(tl, new PointF(72, 72));

// PDFに保存
summary.Save("wetlands_overview.pdf");

アプリケーションを実行した後に保存されたPDFファイルwetlands_overview.pdfを表示すると、要約が出力されていることが確認できます。

アプリケーションの作成
元のPDF
アプリケーションの作成
要約したPDF

以上です。DioDocs for PDFとAzure OpenAIを連携して使用することで、PDFファイルのテキスト抽出・要約・保存といった一連の処理を、1つの .NETアプリケーション内で完結することが可能です。

動作を確認できるサンプルはこちらです。

さいごに

弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。

また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。

\  この記事をシェアする  /