はじめに
Googleドライブに保存されたPDFファイルから、特定のパターンに一致する文字列を自動的に抽出する方法を紹介します。この記事では、Google Apps Scriptを使用して、PDFをGoogleドキュメントに変換し、正規表現を用いて必要な情報を抽出する手法を説明します。
スクリプトの概要
このスクリプトでは、以下のステップを実行します:
- 特定のGoogleドライブIDを持つPDFファイルを取得。
- PDFファイルをGoogleドキュメントに変換。
- Googleドキュメントのテキストから、正規表現を用いて特定のパターンに一致する文字列を抽出。
事前準備
Google Apps Scriptを使用する際には、以下の設定が必要です。プロジェクトの設定ファイルで、タイムゾーンや依存関係、OAuthスコープを設定します。
const config = {
timeZone: "Asia/Tokyo",
dependencies: {
enabledAdvancedServices: [
{
userSymbol: "Drive",
version: "v3",
serviceId: "drive"
}
]
},
exceptionLogging: "STACKDRIVER",
runtimeVersion: "V8",
oauthScopes: [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/script.scriptapp",
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/drive.file",
"https://www.googleapis.com/auth/documents",
"https://www.googleapis.com/auth/gmail.readonly",
"https://www.googleapis.com/auth/spreadsheets"
]
};
- timeZone: スクリプトのタイムゾーンを設定します。この例では、
Asia/Tokyoを設定しています。 - enabledAdvancedServices: ここでは、Google Drive APIを使用するために
Driveサービスを有効化しています。 - exceptionLogging: 例外発生時のログを記録するサービスを指定します。
STACKDRIVERを使用しています。 - runtimeVersion: スクリプトのランタイムバージョンを指定します。
V8を使用しています。 - oauthScopes: スクリプトがアクセスする権限を設定します。Gmail、Google Drive、Google Docs、Google Spreadsheetsへのアクセス権限を指定しています。
サンプルコード
以下に、特定のGoogleドライブIDを持つPDFファイルから、正規表現を用いて文字列を抽出するためのサンプルコードを示します。
function extractTextFromPdfFile(fileId) {
const docId = convertPdfToGoogleDoc(fileId);
if (docId) {
const text = extractTextFromGoogleDoc(docId);
DriveApp.getFileById(docId).setTrashed(true); // 一時的なGoogleドキュメントを削除
const extractedData = extractDataWithRegex(text);
return extractedData;
}
return null;
}
function convertPdfToGoogleDoc(fileId) {
const file = DriveApp.getFileById(fileId);
const blob = file.getBlob();
const resource = {
title: file.getName(),
mimeType: MimeType.GOOGLE_DOCS
};
const options = {
method: 'post',
contentType: 'application/pdf',
payload: blob,
convert: true
};
const response = Drive.Files.insert(resource, blob, options);
return response.id;
}
function extractTextFromGoogleDoc(docId) {
const doc = DocumentApp.openById(docId);
const body = doc.getBody();
return body.getText();
}
function extractDataWithRegex(text) {
const regexPattern = /¥([\d,]+円)/; // ここに抽出したい文字列の正規表現パターンを設定
const match = text.match(regexPattern);
return match ? match[0] : null;
}
// 例として、特定のファイルIDを指定して実行する場合
function runExtraction() {
const fileId = 'your-file-id-here'; // ここに対象のGoogleドライブIDを指定
const extractedData = extractTextFromPdfFile(fileId);
Logger.log(`抽出されたデータ: ${extractedData}`);
}
このスクリプトでは、以下の手順を実行します:
- PDFファイルの取得と変換
Googleドライブから指定されたIDのPDFファイルを取得し、Googleドキュメントに変換します。 - Googleドキュメントからのテキスト抽出
変換されたGoogleドキュメントからテキストを抽出します。 - 正規表現による文字列抽出
抽出されたテキストから、正規表現パターンに一致する文字列(この例では「¥〇〇円」)を抽出します。
まとめ
このスクリプトを使用することで、特定のGoogleドライブIDを持つPDFファイルから自動的に文字列を抽出し、必要な情報を得ることができます。これにより、手作業での情報抽出の手間を省き、効率的にデータを管理することができます。
ユースケース
例えば、メールに添付されている請求書(定型であれば使用可能と考えます)から、値段を抜き出し、スプレッドシートなどに保存するようなイメージです。
メール本文であれば、単純にGASとAPIでできると思いますが、PDFを一度ドキュメントに変換し、そこから正規表現で抽出する方法はあまり知られていないのではないかと思います。
なかなかユースケースが限られるかもしれませんが、PDFでも抽出できますよということを伝えたく書きました!