PDFを正規表現で一括検索するシステムを作った経験談(EDINET PDF対応)

スポンサーリンク

手元のPDFを一括検索するシステムを作りました。上場企業を詳しく見るために必要になったんですね。それをどうやって作ったかという経験談です。アドビリーダーにもまとめて検索する機能はあるのですが、正規表現が使えないですし、あと、検索したい言葉がたくさんあっても、1回1回検索し直さないといけないんですね。とても時間がかかります。それを解決したくて作りました。

 

パイソンで作りました。パイソンから「PDFをテキストに変換するコマンドラインツール」を呼び出して、パイソンの正規表現で検索しました。その結果をCSVに出力して、エクセルで読み込む感じです。検索指示は、もちろんエクセルから出します。

 

まずは、PDFの前処理です。エディネットのPDFは、暗号化されているわけではないのですが、なぜか読み取り専用属性のようなフラグが付いています。内容を読み上げたりすることができません。ですが、グーグル翻訳は、そのようなエディットPDFを読み込んで翻訳したりすることができます。

 

そういったPDFも検索できるようにするために、キュー・ピー・ディー・エフ(Qpdf)を使いました。これで、テキストファイルへの変換を許可したPDFを作成します。特にパスワードなどは要りません。「qpdf.exe」に検索したいPDFと許可したPDFの保存先を指示します。キャッシュ専用のSSDとかハードディスクを用意して、そこにPDFを作るようにしました。

 

次に、PDFをテキストファイルに変換するところですね。エックスPDFツールズ(Xpdf tools)です。その中のPDFトゥーテキスト(pdftotext.exe)を使いました。日本語のランゲージ・サポート・パッケージが提供されていますので、それも入手して設定しました。

 

具体的な手順やPythonコードは、以下の記事にあります。

PDFを正規表現で検索する【Python】

 

これでPDFをテキストに変換するわけですね。変換を許可したPDFとテキストの保存先を、パイソンから指示します。変換されます。これも、キャッシュ専用のSSDとかハードディスクを用意して、そこにテキストファイルを作るようにしました。2回目以降は直接テキストを検索できるので、とても速くなります。

 

次はエクセルです。PDFのパスとか検索ワードって、結構長くなります。それをですね、パイソン画面に打ち込むのは不便すぎるので、エクセルから使います。とりあえず、セルを選択した状態でボタンを押すことで、検索したいPDFとかフォルダを指示するようにしました。

 

検索ワードはテキストファイルに列挙しておきます。検索したい言葉って、大体決まってるんですよね。そういうのをまとめておきました。例えば、私がライザップの記事を書いてたときは、こんな感じの正規表現を用意して検索してました。

 

COMMIT *2020
上半?期.*?広告宣伝費
下半?期.*?抑制
(?:ボディメイク|ライザップ|RIZAP).*?(?:好調|大幅)
自己資本比率.*?目指す
{0,5}(?:他|ほか).{0,10}市場.{0,10}上場

 

このテキストファイルへのハイパーリンクを、適当なシートに書いておきます。あとは、選択セルと検索ワードをパイソンに渡して、検索結果を受け取るだけです。これはもちろん、エクセル・ブイ・ビー・エー(Excel VBA)で作りました。

 

セルの内容をパイソンに渡す方法ですが、CSVにしました。選択したセルの内容をVBAでCSVに保存します。パイソンには「そのファイルパス」に加えて、「検索ワードのファイルパス」と「検索結果のCSVのファイルパス」の3つを渡しました。

 

パイソンは指示された場所に検索結果のCSVを保存します。これをVBAで適当なシートに読み込む感じです。行きも帰りもファイルパスだけです。やってみたら、デバッグが簡単で助かりました。これで、エクセルから検索対象と検索語句をまとめて指示して、検索結果を受け取るシステムができました。素晴らしく作業効率が上がりました。作って凄く良かったです。

 

動作の要約です。

  1. エクセルからPDFリストと検索ワードリストと検索結果CSVのパスを渡す
  2. 指示されたPDFをテキスト変換できるようにして保存
  3. それらのPDFをテキストにして保存
  4. テキストを正規表現で検索
  5. ヒットしたワードとPDFへのハイパーリンクをCSVに保存
  6. VBAでCSVをシートに読み込む

ソフト間の連携はファイルパスで行うのが簡単でした。

 

スポンサーリンク
開発経験談
シェアする(押すとSNS投稿用の『編集ページ』に移動します)
フォローする(RSSフィードに移動します)
スポンサーリンク
シラベルノート
タイトルとURLをコピーしました