1
1

【GCP】PDFファイルをOCR処理し、内容を構造化してCSVファイルを作成するツールを作ってみた(その2)

Last updated at Posted at 2024-06-07

1.おおまかな要件

① ローカルのPDFファイルをGoogle Cloud Storageに連携
② 連携したPDFファイルをGCP VisionAIでOCR処理し、JSONファイルに出力

↑ここまでが(その1)の範囲

③ ②で作成したJSONファイルをGCP-4のAPIを使用し、予め用意した構造化モデル(大げさ)設定ファイルを基に解析
④ ③で解析した結果をCSVファイルで出力

↑ここまでが(その2)の範囲

2.ツールのイメージ図(再掲)

ocr_csv_create構成イメージ.jpg

3.事前準備

・OpenAIアカウントの作成
 参考URL:OpenAIのアカウント作成方法を画像付きでわかりやすく解説!

・GPT Keyの発行
 参考URL:GPT-4o対応【24年5月最新】API Key 発行手順と課金方法

4.プログラム

GitHub:OpenAI-JSON-Anarysis.py
GitHub:json_config

(1)OpenAI Keyの実装

OpenAIアカウントで発行したキーの格納場所(環境変数)を設定し、GPT-APIを使用できるようにする。

OpenAI-JSON-Anarysis.py
import os
from openai import OpenAI
import json
import base64

#端末に格納したAPI Keyの環境変数を設定
OpenAI.api_key = os.environ['OPENAI_API_KEY']

client = OpenAI()

(2)構造化モデルの設定

今回のツールでは読み取ったPDFが試算表であることを想定して構造化モデルをJSONで作成。

balancesheet_config.json
{
"現金(貸方残高)": "number | null",
"現金(貸方合計)": "number | null",
"現金(借方残高)": "number | null",
"現金(借方合計)": "number | null",
"普通預金(貸方残高)": "number | null",
"普通預金(貸方合計)": "number | null",
"普通預金(借方残高)": "number | null",
"普通預金(借方合計)": "number | null",
・・・
}

(その1)でOCR処理した内容を記載したテキストファイルを準備する。
また、上段で用意した構造化モデル(試算表)のJSONファイルを準備する。

OpenAI-JSON-Anarysis.py
# 一時的な読込措置(その1でOCR処理結果を格納したファイル)
path = 'D:\\work\\tool\\ocr_csv_create_tool\\text\\test_w.txt'

with open(path) as f:
    string = f.read()

# JSONファイル(試算表のスキーマ)を読み込む
path_json = 'D:\\work\\tool\\ocr_csv_create_tool\\json_config\\balancesheet_config.json'
with open(path_json, 'r', encoding='utf-8') as f:
    schema = json.load(f) 

(3)JSON形式での出力

上段で準備したテキストファイル(OCR結果)とJSONファイル(構造化モデル)を基にGPT-APIを使って解析依頼を行う。
行った結果についてはJSONオブジェクトとして出力する。

OpenAI-JSON-Anarysis.py
# OCR処理したテキストファイルを指定したスキーマの形式にGPTで整理
response = client.chat.completions.create(
    model="gpt-4-turbo-preview",
    response_format={ "type": "json_object" },
    messages=[
      {"role": "system", "content": f"次の文字列から試算表の勘定科目毎の貸方残高・貸方合計・借方残高・借方合計を抜き出して、JSON形式で出力してください。JSONのスキーマは次の通りです:{schema}"},
      {"role": "user", "content": string}
    ]
  )

# GPTで整理した結果をJSONオブジェクトに変換
response_json = json.loads(response.choices[0].message.content)

# JSONオブジェクトを文字列に変換
json_str = json.dumps(response_json)

5.今後の課題

ここで作成したものはあくまでベースとして、PDFをOCR処理してJSONオブジェクト化するところのコアの部分になる為、これを誰でも使えるインターフェースや、今回準備した試算表以外にもJSONファイルを用意し、多種多様なPDFを手軽にCSV化できるようアプリケーション構築を進めていきたい。

1
1
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
1
1