web-dev-qa-db-ja.com

PDF in Python 3.4

Python 3.4を使用しており、PDFからすべてのテキストを抽出して、テキスト処理に使用する必要があります。

私が見たすべての答えは、Python 2.7。

Python 3.4。

ボンソン

37
Bonson

Python 3.4。PyPDF2は画像、チャート、または他のメディアを抽出できませんが、テキストを抽出してPython string。インストールするには、pip install PyPDF2コマンドラインから。このモジュール名では大文字と小文字が区別されるため、小文字で「y」を入力し、他のすべての文字を大文字で入力してください。

>>> import PyPDF2
>>> pdfFileObj = open('my_file.pdf','rb')     #'rb' for read binary mode
>>> pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
>>> pdfReader.numPages
56
>>> pageObj = pdfReader.getPage(9)          #'9' is the page number
>>> pageObj.extractText()

最後のステートメントは、「my_file.pdf」ドキュメントの9ページで利用可能なすべてのテキストを返します。

45
riteshshrv

pdfminer.six( https://github.com/pdfminer/pdfminer.six )も他の場所で推奨されており、Python 3. I can 'ただし、MacOSのインストール中に失敗したため、個人的に保証します(これには未解決の問題があり、最近の問題のようですので、すぐに修正される可能性があります)。

6
Sarah Messer

補完@ Sarahの答え。 PDFMinerはかなり良い選択です。私はかなり前からそれを使用してきましたが、今までは、PDFからテキストコンテンツを抽出するのにかなりうまく機能しています。 pdfminerのCLIクライアント を使用する関数を作成し、出力を変数に保存しました(後で他の場所で使用できます)。 Python私が使用しているバージョンは3.6、および関数は非常にうまく機能し、必要な仕事をするので、これはあなたのために働くかもしれません:

def pdf_to_text(filepath):
    print('Getting text content for {}...'.format(filepath))
    process = subprocess.Popen(['pdf2txt.py', filepath], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = process.communicate()

    if process.returncode != 0 or stderr:
        raise OSError('Executing the command for {} caused an error:\nCode: {}\nOutput: {}\nError: {}'.format(filepath, process.returncode, stdout, stderr))

    return stdout.decode('utf-8')

もちろん、サブプロセスモジュールをインポートする必要があります。 import subprocess