freeelover2024-01-18

Googleドライブに保存したレシートを自動リネームする その1 – ドライブに保存したPDFからOCRでテキスト取得

インボイス制度開始後、証憑管理がとっても面倒なfreeeloverです。

今回は、「連載:Googleドライブに保存したレシートを自動リネームする」をお届けします。

実現したいことは、スキャナやスマホでGoogleドライブに保存したPDFファイルを”勘定科目_支払日(yyyyMMdd形式)_支払金額_支払先”という命名規則に自動リネームすることです。

開発方針:GoogleのOCRとOpenAIのGPT APIを使う

スキャンしたPDF画像は、あくまで画像データなので、そのままでは支払日や支払金額などを抽出することはできません。

そこで…

  1. Drive APIのOCR機能でレシート内のテキストを抽出
  2. 抽出したテキストから必要な情報をGPT APIで抽出
  3. ↑で取得した情報をもとにPDFファイルをリネーム

というステップで進めてみたいと思います。

Googleドライブに保存したPDFファイルからOCRでテキスト取得

第1回の今回は、「Googleドライブに保存したPDFファイルからOCRでテキスト取得」に挑戦します。

Drive APIを有効にする

Google Apps ScriptでOCR機能を使用する場合は、プロジェクトでDrive APIを有効にする必要があります。

左のメニューからサービスを選択
Drive APIを追加

PDFファイルをテキストに変換するスクリプト

早速ですが、Google Apps Scriptを使ってPDFファイルをテキストに変換し、その内容をコンソールに出力する方法について解説します。

このスクリプトは、Google Drive上のPDFファイルをGoogleドキュメントに変換し、そのテキスト内容を抽出してログに出力しています。

/**
 * 指定されたPDFファイルをテキストに変換し、その内容をコンソールに出力する関数
 * Google Drive上のPDFファイルをGoogle ドキュメントに変換し、そのテキストを抽出してログに出力します
 */

function blogPdf2Text() {
  // 指定された PDF ファイルを取得
  const filePdf = DriveApp.getFileById('PDFファイルのIDをここに入力');

  // 変換後のファイル名と MIME タイプの設定
  const meta = {
    name: filePdf.getName().replace(/\.pdf$/, ''), // 元のファイルの拡張子を削除
    mimeType: MimeType.GOOGLE_DOCS, // Googleドキュメントファイルに変換
  };

  // OCR設定(日本語を指定)
  const params = {
    ocrLanguage: 'ja'
  };

  // PDFファイルをGoogleドキュメントに変換
  const docTemp = Drive.Files.create(meta, filePdf.getBlob(), params);

  // 変換されたドキュメントからテキストを取得
  const text = DocumentApp.openById(docTemp.id).getBody().getText();

  // 一時的に作成されたドキュメントを削除
  DriveApp.getFileById(docTemp.id).setTrashed(true);

  // テキストをコンソールに出力
  console.log(text);
}

Drive APIのFiles.createメソッドを用いてPDFファイルから新しいGoogleドキュメントファイルを作成しています。

このcreateメソッドの引数には(ファイルのメタ情報, blobオブジェクト, オプションパラメータ)を渡します。

多くの日本語のブログ記事のスクリプトではエラーになる

ここで注意点というか、私もハマった点ですが、2024年1月現在で「GASでOCRする方法」を検索して出てくるブログ記事内のスクリプトだとエラーになります。

理由としては、Drive APIのバージョンがアップデートされたためで、Drive APIのバージョンを古いものを指定すると動くのではないかと思います(試してません)。

現在はv3となっていますので、このバージョンに対応したパラメータを引数に渡してあげる必要があります。

参考:Apps Script Drive.Files.insert not a function

メタ情報とオプションパラメータ

まずメタ情報で、変換後のファイル名とMIMEタイプを設定しています。ファイル名からはPDFの拡張子が削除され、MIMEタイプはGoogleドキュメントに設定します。

  // 変換後のファイル名と MIME タイプの設定
  const meta = {
    name: filePdf.getName().replace(/\.pdf$/, ''), // 元のファイルの拡張子を削除
    mimeType: MimeType.GOOGLE_DOCS, // Googleドキュメントファイルに変換
  };

オプションパラメータでは、PDFファイルをGoogleドキュメントに変換する際にOCR(光学文字認識)を行うための設定をします。

ocrLanguageに’ja’(日本語)を指定し、変換するPDFファイルの言語を設定します。

一時的にGoogleドキュメントファイルを作成し、削除する

まずDrive APIのFiles.createメソッドを用いてPDFファイルをGoogleドキュメントに変換し、その後、変換されたドキュメントからテキスト内容を取得します。

テキストを取得した後は、ドキュメントファイルは不要なので、すぐに削除します。

  // PDFファイルをGoogleドキュメントに変換
  const docTemp = Drive.Files.create(meta, filePdf.getBlob(), params);

  // 変換されたドキュメントからテキストを取得
  const text = DocumentApp.openById(docTemp.id).getBody().getText();

  // 一時的に作成されたドキュメントを削除
  DriveApp.getFileById(docTemp.id).setTrashed(true);

無事にログ出力されました

ある日のコンビニのレシートを読み込ませたところ、無事にログ出力されました。

おわりに

今回は、ネットの情報が古くてかなりハマりました。そして困ったときのstack overflowが本当に助かります。同じように困っている誰かの目に触れますように。

シリーズ目次

  1. Googleドライブに保存したレシートを自動リネームする その1 – ドライブに保存したPDFからOCRでテキスト取得
  2. Googleドライブに保存したレシートを自動リネームする その2 – GASとOpenAI APIを使って質問に答えてもらう
  3. Googleドライブに保存したレシートを自動リネームする その3 – プロンプトとモデルを調整してJSON形式で応答結果を得る
  4. Googleドライブに保存したレシートを自動リネームする その4 – フォルダ内のすべてのPDF・画像ファイルをリネームする

Google Apps Scriptを勉強したい方へ

この記事を見て、GASを勉強したいなと思われた方はぜひノンプログラマーのためのスキルアップ研究会(通称 ノンプロ研)にご参加ください。私も未経験からこの学習コミュニティに参加し、講座を受講したことでGASが書けるようになりました。

学習コミュニティ「ノンプログラマーのためのスキルアップ研究会」

挫折しがちなプログラミングの学習も、コミュニティの力で継続できます。ノンプロ研でお待ちしております!

※入会時にfreeelover.comを見て入りました!と言うと、私がちょっぴりお小遣い的なのがもらえるので、私が喜びます。

Amazon欲しい物リスト公開しています。

ブログのモチベーションアップのためにAmazon欲しい物リストを公開しております。役に立ったよ!という方で、感謝の気持ちを示したい方は、何かいただけると嬉しいです笑

Amazon欲しい物リスト

タグ: , , ,
Share on:
Previous Post
freeelover2024-01-19
GAS活用法

Googleドライブに保存したレシートを自動リネームする その2 – GASとOpenAI APIを使って質問に答えてもらう

Next Post
UnsplashのMohnish Landgeが撮影した写真
GAS活用法

「神エクセル」をGASで自動転記!のための3つの関数