pypoppler を使用して PDF からテキストを抽出する
最近の Linux だと Poppler というライブラリを使用して PDF の処理を行っているようです *1 。Poppler をインストール(Fedora13 だと poppler-utils パッケージ)すると pdftotext というコマンドが付属していて、そのコマンドからテキスト抽出することもできます。たまたま poppler の Python バインディングも Poppler Python Bindings in Launchpad で開発中だと知ったのでインストールして使ってみました。
Fedora13 なら poppler/pypoppler 共に yum からインストールできます。
$ sudo yum -y install poppler poppler-utils poppler-data poppler-glib \ pypoppler $ rpm -q poppler pypoppler poppler-0.12.4-5.fc13.i686 pypoppler-0.12.1-1.fc13.i686
pypoppler のドキュメントがどこにあるのか分からなくて、取りあえずテキストが抽出できただけで、どんなことができるのかよく分かりません(> <)
ドキュメントや他にサンプルコードの在り処をご存知の方がいましたら教えてください。
#!/usr/bin/env python # -*- coding: utf-8 -*- import poppler import sys from os.path import abspath def get_page_rectangle(size): rect = poppler.Rectangle() rect.x1, rect.y1 = 0.0, 0.0 rect.x2, rect.y2 = size return rect def main(): uri = "file://" + abspath(sys.argv[1]) pdf = poppler.document_new_from_file(uri, None) total_pages = pdf.get_n_pages() print "Total num:", total_pages print "-" * 30 for page_num in range(total_pages): page = pdf.get_page(page_num) rect = get_page_rectangle(page.get_size()) print page.get_text(style=1, rect=rect) print "-" * 30 if __name__ == "__main__": main()
Sphinx-Users.jp のドキュメント資料集 からエキスパートPythonプログラミングの10章の PDF サンプルからテキスト抽出してみたところ、ちゃんとテキストが抽出できました。以下、実行結果になります。
$ python demo-poppler2.py expert_python_programming_sample.pdf Total num: 31 ------------------------------ プロジェクトのドキュメント 1 章 0 第 作成 ドキュメント作成は、開発者、ときにはマネージャもさぼってしまいがちな作業です。 開発サイクルの終了に向かうにつれて時間がなくなったり、自分は文章を書くのが苦手 だと考えている人がいたりするのが、さぼってしまう原因です。確かに文章を書くのが 苦手な人もいますが、大多数の開発者とマネージャは、すばらしいドキュメントを 書くことができます。 ... (snip)