読者です 読者をやめる 読者になる 読者になる

pypoppler を使用して PDF からテキストを抽出する

python

最近の 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
------------------------------
                  プロジェクトのドキュメント
     10
    第
                  作成
 ドキュメント作成は、開発者、ときにはマネージャもさぼってしまいがちな作業です。
開発サイクルの終了に向かうにつれて時間がなくなったり、自分は文章を書くのが苦手
だと考えている人がいたりするのが、さぼってしまう原因です。確かに文章を書くのが
苦手な人もいますが、大多数の開発者とマネージャは、すばらしいドキュメントを
書くことができます。
... (snip)
広告を非表示にする