『Snowflake』を用いて、PDFドキュメントからデータを取り出す

SnowflakeとAI機能(Cortex)を活用し、SQLの知識なしでPDFの複雑な表からデータを取り出しデータベース化する方法を解説。OCRの誤認識などの実用上の注意点も紹介します。

『Snowflake』を用いて、PDFドキュメントからデータを取り出す

今回は『Snowflake』を利用して、PDFに掲載されている表からデータを取り出します。Snowflakeの環境作成について知りたい方は、前回の記事を参照してください。

Snowflakeを用いてAIを利用したデータ分析を試してみる - 第1回 環境準備

サンプルとして利用するドキュメント

今回は、公益財団法人日本生産性本部が提供している、『2025年の労働生産性の国際比較のレポート』から、労働生産性に関するデータを取り出しデータベース化をします。

公益財団法人日本生産性本部のホームページ

こちらのホームページに掲載されているサマリレポートの8ページに以下の表があります。この表をデータベース化しよう、というのが今回の記事の主旨です。

2024年の日本の製造業労働生産性の順位や、2000年から2024年に至る上位20カ国の変遷を示す表とグラフ

1. 環境の準備

利用するデータベースを作成します。

※今回作成するデータベースはaxis_article_2となります

CREATE OR REPLACE DATABASE axis_article_2;

PDFファイルをアップロードするステージを作成します。

※今回作成するステージは axis_article_2.public.axis_stage となります。

CREATE OR REPLACE STAGE AXIS_ARTICLE_2.PUBLIC.AXIS_STAGE_SSE ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE') DIRECTORY = (ENABLE = TRUE);

ファイルをアップロードします。左のペインメニューの[Ingestion]→ [Add data]から、アップロードするファイルと、先ほど作成したステージを選択します。

Snowflakeの画面で「summary2025.pdf」というファイルをステージへアップロードする操作ダイアログ

左のペインメニューの[Catalog]→[Database Explore]から、先ほど追加したファイルが確認できます。

Snowflakeのステージ「AXIS_STAGE」内に「summary2025.pdf」が追加されている画面

2. テーブルの作成(抽出結果をそのまま保存)

次に、テーブルの設計を行います。従来はテーブルの設計は自分で考える必要がありましたが、今回は右側にあるCortexからAIを使って依頼を行うだけです。SQLの知識は一切不要です。

axis_article_2.public.axis_stage上のsummary2025.pdfの「国際的にみた日本の製造業の労働生産性」のページにある「製造業の労働生産性水準上位20ヵ国の変遷」のデータを格納するためのテーブルの作成をお願いします。テーブル名はaxis_article_2.public.global_productivity_2025として下さい。

本当にこれだけでこの(コンピューターから見て)複雑な表がテーブルに出来るの? と、思うかもしれませんが、待つこと数分、Cortexから返ってきた返答は以下です。

これでデータ構造が分かりました。テーブルには以下の列が必要です:

年(YEAR): 2000, 2005, 2010, 2015, 2020, 2021, 2022, 2023, 2024
順位(RANK): 1-20
国名(COUNTRY)
生産性の値 USドル(PRODUCTIVITY_USD)
テーブルを作成します。

CREATE OR REPLACE TABLE AXIS_ARTICLE_2.PUBLIC.GLOBAL_PRODUCTIVITY_2025 (
    YEAR INT COMMENT '対象年',
    RANK INT COMMENT '順位(1-20位)',
    COUNTRY VARCHAR(50) COMMENT '国名',
    PRODUCTIVITY_USD INT COMMENT '製造業の労働生産性水準(USドル)'
)
COMMENT = '製造業の労働生産性水準上位20カ国の変遷(出典:労働生産性の国際比較2025)'

今回のレポートでは、2000年から2020年までは5年毎の集計です。その後は1年毎の集計になっています。

しかし、AIはそのような変則的な表の構造も問題なく認識できているようです。テーブルは問題なさそうなので、そのままデータをロードしましょう。以下のような形でロードが進んでいきます。

INSERT INTO AXIS_ARTICLE_2.PUBLIC.GLOBAL_PRODUCTIVITY_2025 (YEAR, RANK, COUNTRY, PRODUCTIVITY_USD)
VALUES
(2000, 1, '日本', 86894),
(2000, 2, 'アイルランド', 79420),
(2000, 3, 'フィンランド', 66845),
(2000, 4, 'ルクセンブルク', 61548),
(2000, 5, 'イスラエル', 56188),
(2000, 6, 'カナダ', 55935),
(2000, 7, 'ベルギー', 55163),
(2000, 8, '英国', 54958),
(2000, 9, 'ノルウェー', 54174),
(2000, 10, 'オランダ', 50517),
(2000, 11, 'オーストリア', 49945),
(2000, 12, 'デンマーク', 47021),
(2000, 13, 'イタリア', 42398),
(2000, 14, 'オーストラリア', 41255),
(2000, 15, '韓国', 35310),
(2000, 16, 'スペイン', 34211),
(2000, 17, 'ギリシャ', 22736),
(2000, 18, 'ポルトガル', 16748),
(2000, 19, 'スロベニア', 16300),
(2000, 20, 'チリ', 15224)

最終的には、以下のようなテーブルが作成されました(4位未満の順位は省略)。

SnowflakeとAI(cortex)を使って、SQLの知識なしでPDFの表からテーブルを作成することが出来ました。

2000年から2024年の各年における、製造業労働生産性の上位3カ国(1位、2位、3位)とその値をまとめた表

おまけ

実際は全く問題なく作成できたわけではなく、いくつかの問題が発生しました。

2024年のデータは無い、と言い張るAI(Cortex)

申し訳ありませんが、2024年の製造業上位20カ国データはPDFのグラフ画像(横棒グラフ)にのみ含まれており、テキストテーブルには存在しません。AI解析ではグラフからの正確な数値読み取りができませんでした。

PDFでは確かに2023年の横にならんでいる『2024年のデータ』がなぜか存在しないというAI。しかも、最初の解析では2024年のデータを認識していたので余計に不可解です。私の方でそんなことはない、と反論します。

ページ8の表をもう一度注意深く確認します。表のヘッダーは「2000年 | 2005年 | 2010年 | 2015年」と「2020年 | 2021年 | 2022年 | 2023年」の2ブロックです。「2024年/OECD加盟国」は画像(グラフ)のキャプションで、表内には2024年のカラムがないと考えられます。

しかしユーザーは2024年データが含まれていると言っています。グラフimg-7から別のアプローチで抽出します。
もしかすると2024年データは別のページにあるか、OCRで取得されていない可能性があります。OCRのモードを変えて試します。
2024年データが見つかりました!OCRモードの結果から、グラフの横にテキストで2024年のデータが表示されています。データを抽出します:

私の指摘に合わせて、AIがいろいろなやり方を試行錯誤し、とうとう2024年度のデータを見つけてくれました。

「オーストラリア」と「オーストリア」の区別がつかないAI

「無事問題なくテーブルが作成された」と、言いましたが、見直してみるといくつか「オーストラリア」と「オーストリア」のデータが逆転していることに気づきました。AIに確認してみるとOCRの認識精度の問題のようです。AIでは「認識できないので、教えてくれ」と、言われました。

OCRで「オーストリア」と「オーストラリア」が同一文字列に変換されてしまっていて区別がつきません。

2020年・2022年・2023年について、上位の順位が「オーストリア」で下位が「オーストラリア」、それとも上位が「オーストラリア」で下位が「オーストリア」のどちらが正しいか教えていただけますか?

OCRは画像をテキストデータに変換する技術です。手書きのドキュメントのスキャンなどは特に問題が起きやすいですが、手書きでなくとも特にカタカナは問題が起きやすいようです。

現状では、やはりデータ投入後のチェックは欠かせないと言えそうです。

MEMBER / ライター
松原 英希
松原 英希インフラエンジニア / アヴァント株式会社

東京大学金属工学科卒業後にデータセンターの運用監視業務からキャリアをスタート。主にネットワークとLinux技術を学びながらインフラエンジニアとしてのキャリアを積む。2008年からソニーグローバルソリューションズ(株)に入社し、当初はインフラ技術者としてのデータセンター移行やクラウド移行プロジェクトに携り、プロジェクトマネージメント領域の経験を経て、海外赴任や新規事業のソリューション営業などを経験。その後、外資系のデータ分析系のスタートアップのセールスエンジニアのマネージメント職として入社し、その後、様々な縁があり、2022年にシービーラボに入社して今に至る。

私たちについて

AX——AIトランスフォーメーションとは、何なのか。
その答えを、言葉ではなく現場から見せていくメディアです。

お問い合わせ

取材・寄稿・協業・AI導入支援のご相談は、こちらからどうぞ。