Pythonを使用してpdfからテキストを抽出しようとしています。このために、次のようにpdf2txt.py コマンドラインツールを使用して、かなり良い仕事をするpdfminerを見つけました。
kramer65 $ pdf2txt.py myfile.pdf
all the text contents
of the pdf
are printed out here..
この機能をプログラムで使用したいので、これをコマンド ライン ツールではなくモジュールとして使用したいと考えています。そのため、pdf2txt.py ファイルを次のように調整することができました。
#!/usr/bin/env python
import sys
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import TextConverter
from pdfminer.cmapdb import CMapDB
from pdfminer.layout import LAParams
def main(fp):
debug = 0
pagenos = set()
maxpages = 0
imagewriter = None
codec = 'utf-8'
caching = True
laparams = LAParams()
PDFDocument.debug = debug
PDFParser.debug = debug
CMapDB.debug = debug
PDFPageInterpreter.debug = debug
resourceManager = PDFResourceManager(caching=caching)
outfp = sys.stdout
device = TextConverter(resourceManager, outfp, codec=codec, laparams=laparams, imagewriter=imagewriter)
interpreter = PDFPageInterpreter(resourceManager, device)
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, caching=caching, check_extractable=True):
interpreter.process_page(page)
fp.close()
device.close()
outfp.close()
return # Here I want to return the extracted text string
次のようにモジュールとして呼び出すことができます。
>>> from my_pdf2txt import main
>>> main(open('myfile.pdf', 'rb'))
all the text contents
of the pdf
are printed out here..
現在、 を使用して結果の文字列を出力していますsys.stdout.write()
が、実際にreturn
は、コードの最後の行にあるステートメントを使用してそれらの文字列を返したいと思っています。しかし、その sys.stdout.write の使用はconverter.pyの 165 ~ 167 行目の奥深くに隠されているため、標準出力に書き込む代わりに、このメソッドがこれらの文字列を返すようにする方法がよくわかりません。
見つかった文字列を stdout に書き込む代わりに、このメソッドを取得して返す方法を知っている人はいますか? すべてのヒントは大歓迎です!