大量のPDFファイルから文字列の出現場所を高速検索する

■キーワード:PDF、文字列、高速、検索

【目的】
大量のPDFファイルの中で、特定の単語がどのように使われているかを知りたい。
しかも、単語を入れると同時に高速に結果が表示されて欲しい。
単語の場所ではなく、「使われ方」を知りたいので、その前後も含めて表示されて欲しい。

上記のような目的を実現する方法を検討してみた。

【方法1】
Adobe AcrobatAdobe Readerでは、複数のPDFファイルから文字列検索が行える。しかし、結果が表示されるのに時間がかかる。

■ 参考:http://kb2.adobe.com/jp/cps/332/3320.html


【方法2】
PDFファイルからテキストだけを抽出して、テキストファイルに特化した高速な検索ツールを使用する。
(前提)OSはWindows。バッチファイルの作成と実行ができる知識があること。

次の手順で行った。

(1) あるフォルダの中に含まれるPDFファイルをすべて一括してテキストファイルに変換する
・PDFファイルをテキストファイルに変換するツールを入手する
次のサイトから、pdftotext.exe(XPdf 1.01) を入手。
http://www.geocities.co.jp/SiliconValley-Bay/1992/tips/pdf2text.html#pdf2html
(オリジナルのサイトはこちら http://www.foolabs.com/xpdf/download.html

・一括処理するためのバッチファイルを作成。例えば、次の文字列を convert.bat ファイルに保存

FOR /R %%A IN (*.pdf) DO pdftotext.exe -raw %%A txt\%%~nA.txt

(簡単に説明すると、フォルダ内に含まれる拡張子がpdfの全てのファイルに対して、「pdftotext.exe - raw ファイル名 」というコマンドを実行するということ。最後の「%%~nA.txt」は、ファイル名の拡張子を.txtに置き換えることを意味する)

・対象とするフォルダに、上記のバッチファイルと、pdftotext.exe をコピー。また、変換後のファイルが置かれる txt という名前のフォルダを対象フォルダの中に作成。

コマンドプロンプトで、対象とするフォルダに移動して、上記のバッチファイルを実行する。

・実行した結果、(元のPDFのファイル名.txt)というファイル群が、txt フォルダの中に生成される。

(2) 複数テキストファイルからの一括検索を行う。
・butterfly search(バタフライ サーチ)というフリーソフトを使う。
ダウンロードはこちら http://www.vector.co.jp/soft/dl/winnt/util/se437071.html
使い方の説明はこちら http://kfall.blog17.fc2.com/blog-entry-14.html

・ここで、テキストファイルが存在する上記のフォルダを検索対象に指定する。
butterfly search固有の機能で、キーワードの高速検索が可能となり、また検索結果として使用されている前後も一緒に表示される。


Pocket詳解Windowsコマンド辞典Windows7対応Windows DOS/コマンドプロンプト辞典情報検索アルゴリズム言語処理のための機械学習入門 (自然言語処理シリーズ)入門 自然言語処理