PDFファイルからテキストを抽出する方法は?


190

この PDFファイルに含まれているテキストをを使用して抽出しようとしていますPython

私はPyPDF2モジュールを使用しており、次のスクリプトがあります。

import PyPDF2
pdf_file = open('sample.pdf')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(0)
page_content = page.extractText()
print page_content

コードを実行すると、PDFドキュメントに含まれているものとは異なる次の出力が表示されます。

!"#$%#$%&%$&'()*%+,-%./01'*23%4
5'%1$#26%3/%7/))/8%&)/26%8#3"%3"*%313/9#&)
%

PDFドキュメントのテキストをそのまま抽出するにはどうすればよいですか?


9
私はそのモジュールを使用したことがありませんが、バイナリモードでファイルを開くと、違いはありますpdf_file = open('sample.pdf', 'rb')か?
PM 2Ring 2016年

2
お返事をありがとうございます。私はバイナリモードでそれを試しましたが、何も変更されませんでした
シンプルさ

3
適切なPDFビューア(可能であれば、Adobeの正規のAcrobat Reader)を使用してテキストをコピーします。同じ結果が得られますか?違いはテキストが異なるということではありませんが、フォントは異なります -文字コードは他の値にマップされます。すべてのPDFにこれを復元するための正しいデータが含まれているわけではありません。
usr2564301

2
そのPDFは、キャラクターのCMapテーブルが含まれているので、制限と回避策は、このスレッドで議論されている関連している- stackoverflow.com/questions/4203414/...
2016年

2
実際、PDFには正しいCMAPが含まれているため、アドホック文字マッピングをプレーンテキストに変換するのは簡単です。ただし、正しい順序のテキストを取得するには、追加の処理が必要です。Mac OS XのQuartz PDFレンダラーは厄介な作業です。元のレンダリング順序では、「m T'h iuss iisn ga tosam fopllloew DalFo dnogc wumithe ntht eI tutorial」が表示されます... x座標でソートした後にのみ、はるかに適切な結果が得られます。「これはサンプルPDFドキュメントです。チュートリアルに沿って使用しています。」
usr2564301

回答:


199

私はpython 3.xとWindowsで使用する簡単なソリューションを探していました。そこからサポートしていないようですtextractは、Windows / pythonの3精算のための簡単な解決策を探しているなら残念です、が、ティカの本当にまっすぐPDFを読み込むため、パッケージ。

Tika-Pythonは、Apache Tika™RESTサービスへのPythonバインディングであり、PythonコミュニティでTikaをネイティブに呼び出すことができます。

from tika import parser # pip install tika

raw = parser.from_file('sample.pdf')
print(raw['content'])

TikaはJavaで書かれているため、Javaランタイムをインストールする必要があることに注意してください。


17
私はpypdf2、tikaをテストし、textractとpdftotextをインストールしようとしましたが失敗しました。Pypdf2は99ワードを返し、tikaはテスト請求書から858ワードすべてを返しました。だから私はティカと行きました。
Stian

8
愛してる男 StackOverflowにそのような良い答えが隠されている理由はわかりません。PyPDF2またはpdfminerを使用する必要があることは誰もが言及し続けますが、悪臭を放ちます。私は今ティカに恋をしています
jxpython '28

15
「RuntimeError:Unable to start Tika server」エラーが発生し続けます。
Navの

3
答え私はずっと私の人生を探してきましたが、なぜ他の誰もティカを推薦しないのですか?ありがとう!
Jacob-Jan Mosselman、2018

4
これをディレクトリ内のすべてのPDFファイルで(再帰的に)実行する必要がある場合は、次のスクリプトを使用してください
Hope

58

textractを使用します。

PDFを含む多くのタイプのファイルをサポートします

import textract
text = textract.process("path/to/file.extension")

24
Textwrapは優れたラッパーのようですが、特定のシステムでは簡単に利用できない可能性がある多数の非Pythonユーティリティに依存しています。
デビッドブラウン

1
PDF、epubsなどで機能-PDFMinerでも失敗するPDFを処理します。
Ulad Kasach 2017

aws lambdaでの使用方法、これを試しましたが、textractからインポートエラーが発生しました
Arun Kumar

5
textractPoppler:pdftotext(特に)のラッパーです。
onewhaleid

1
@ArunKumar:組み込みではないAWS Lambdaで何かを使用するには、バンドルとそれにすべての追加の依存関係を含める必要があります。
ジェフリアマン2018

51

このコードを見てください:

import PyPDF2
pdf_file = open('sample.pdf', 'rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(0)
page_content = page.extractText()
print page_content.encode('utf-8')

出力は次のとおりです。

!"#$%#$%&%$&'()*%+,-%./01'*23%4
5'%1$#26%3/%7/))/8%&)/26%8#3"%3"*%313/9#&)
%

同じコードを使用して201308FCR.pdfからPDFを読み取り ます。出力は正常です。

そのドキュメントはその理由を説明しています:

def extractText(self):
    """
    Locate all text drawing commands, in the order they are provided in the
    content stream, and extract the text.  This works well for some PDF
    files, but poorly for others, depending on the generator used.  This will
    be refined in the future.  Do not rely on the order of text coming out of
    this function, as it will change if this function is made more
    sophisticated.
    :return: a unicode string object.
    """

@VineeshTP:page_contentについて何か得ていますか?「はい」の場合、(utf-8)以外の異なるエンコーディングを使用することで問題が解決するかどうかを確認してください
Quinn

Pythonを使用してPDFを読むために見つけた最高のライブラリは「
tika

201308FCR.pdfが見つかりません。
Chaitanya Bapat

30

textract(依存関係が多すぎるように思われる)とpypdf2(テストしたPDFからテキストを抽出できなかった)とtika(遅すぎる)を試した後、(pdftotext別の回答ですでに提案されているように)xpdf を使用してしまいました。pythonから直接バイナリを呼び出しただけです(pdftotextへのパスを調整する必要がある場合があります):

import os, subprocess
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
args = ["/usr/local/bin/pdftotext",
        '-enc',
        'UTF-8',
        "{}/my-pdf.pdf".format(SCRIPT_DIR),
        '-']
res = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = res.stdout.decode('utf-8')

基本的に同じことを行うpdftotextがありますが、これは/ usr / local / binにあるpdftotextを想定していますが、これをAWSラムダで使用していて、現在のディレクトリから使用したいと考えています。

ところで:これをラムダで使用するには、バイナリと依存関係をlibstdc++.soラムダ関数に入れる必要があります。私は個人的にxpdfをコンパイルする必要がありました。これに関する指示がこの答えを吹き飛ばすので、私はそれらを私の個人ブログに載せまし


4
ああ、それはうまくいく!最後に、正しい順序でテキストを抽出するソリューション!この答えを抱きしめたい!(または、抱擁が好きではない場合、ここに仮想のコーヒー/ビール/ ...があります)
DonQuiKong

4
それが助けてくれてうれしい!賛成投票は抱擁と同じ感覚を与えるので、私は元気です!
hansaplast

シンプル...箱から出して考えるgr8!
shantanu pathak

10

pyPDF2にはまだテキストの抽出に関するさまざまな問題があるように思われるので、代わりに時間を証明されたxPDFと派生ツールを使用してテキストを抽出することをお勧めします。

長い答えは、PDF内でテキストがエンコードされる方法には多くのバリエーションがあり、PDF文字列自体をデコードする必要があり、CMAPでマップする必要があり、単語と文字間の距離を分析する必要があるなどです。

PDFが破損していて(つまり、正しいテキストが表示されているがコピーするとゴミが出る)、本当にテキストを抽出する必要がある場合は、PDFを画像に変換し(ImageMagikを使用)、Tesseractを使用して画像からテキストを取得することを検討してください。OCRを使用します。


-1は、OPがPythonでPDFの読み取りを要求しているためであり、Python用のXPDFラッパーはありますが、メンテナンスが不十分です。
cduguet

9

私は多くのPython PDFコンバーターを試しましたが、このレビューを更新したいと思います。 ティカは最高の一人です。しかし、PyMuPDFは@ehsanehaユーザーからの朗報です。

:私はそれらを比較するためのコードをしたhttps://github.com/erfelipe/PDFtextExtraction私はあなたを助けるために願っています。

Tika-Pythonは、Apache Tika™RESTサービスへのPythonバインディングであり、PythonコミュニティでTikaをネイティブに呼び出すことができます。

from tika import parser

raw = parser.from_file("///Users/Documents/Textos/Texto1.pdf")
raw = str(raw)

safe_text = raw.encode('utf-8', errors='ignore')

safe_text = str(safe_text).replace("\n", "").replace("\\", "")
print('--- safe text ---' )
print( safe_text )

3
特別な感謝.encode('utf-8', errors='ignore')
Evgeny

AttributeError:モジュール 'os'に属性 'setsid'がない
keramat

7

以下のコードは、Python 3の質問に対する解決策です。コードを実行する前PyPDF2に、環境にライブラリがインストールされていることを確認してください。インストールされていない場合は、コマンドプロンプトを開き、次のコマンドを実行します。

pip3 install PyPDF2

ソリューションコード:

import PyPDF2
pdfFileObject = open('sample.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObject)
count = pdfReader.numPages
for i in range(count):
    page = pdfReader.getPage(i)
    print(page.extractText())

2
すべてのコンテンツを1つのテキストファイルに保存し、それをさらに分析するために使用する方法
Rahul Agarwal

7
これは実際の質問で言及された問題を解決しません。
Soumik Rakshit 2018

7

PyPDF2は、場合によっては空白を無視して結果のテキストを混乱させることがありますが、PyMuPDFを使用しており、このリンクを使用して詳細を確認できることに本当に満足しています


pymupdfは私が観察した最良のソリューションであり、pdftotextのような追加のC ++ライブラリやtikaのようなjavaを必要としません
Kay

pymypdfは実際には最良のソリューションであり、追加のサーバーやライブラリはありません。PyPDF2PypDF3 PyPDF4が空のテキスト文字列を取得するファイルで動作します。どうもありがとう!
Andrea Bisello

pymupdfをインストールするには、を実行しpip install pymupdf==1.16.16ます。今日、最新バージョン(17)が機能していないため、この特定のバージョンを使用します。改行文字でテキストの折り返しフィールドを抽出するため、私はpymupdfを選択しました\n。だから私はpdfからpymupdfで文字列にテキストを抽出してからmy_extracted_text.splitlines()、テキストを行に分割してリストに入れています。
erickfis

PyMuPDFは本当に驚きました。ありがとう。
erfelipe

6

pdftotextは最高で最も簡単なものです!pdftotextも構造を予約しています。

PyPDF2、PDFMiner、その他いくつかを試しましたが、どれも満足のいく結果にはなりませんでした。


pdf2textをインストールするときに次のようなメッセージが表示されるCollecting PDFMiner (from pdf2text)ため、この回答を理解できません。
zhy

pdf2textとpdftotextは異なります。回答からリンクを利用できます。
Dharam

OK。これは少し混乱します。
zhy


5

複数ページのpdfは、以下のコードを使用して引数として個々のページ番号を指定する代わりに、単一ストレッチでテキストとして抽出できます

import PyPDF2
import collections
pdf_file = open('samples.pdf', 'rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
c = collections.Counter(range(number_of_pages))
for i in c:
   page = read_pdf.getPage(i)
   page_content = page.extractText()
   print page_content.encode('utf-8')

ここでの唯一の問題は、新しいページのコンテンツが最後のページを上書きすることです
Rahul Agarwal

3

これはテキストを抽出するための最も簡単なコードです

コード:

# importing required modules
import PyPDF2

# creating a pdf file object
pdfFileObj = open('filename.pdf', 'rb')

# creating a pdf reader object
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)

# printing number of pages in pdf file
print(pdfReader.numPages)

# creating a page object
pageObj = pdfReader.getPage(5)

# extracting text from page
print(pageObj.extractText())

# closing the pdf file object
pdfFileObj.close()

'
tika

2

ここで解決策を見つけましたPDFLayoutTextStripper

元のPDFのレイアウトを維持できるので良いです。

Javaで書かれていますが、Pythonをサポートするゲートウェイを追加しました。

サンプルコード:

from py4j.java_gateway import JavaGateway

gw = JavaGateway()
result = gw.entry_point.strip('samples/bus.pdf')

# result is a dict of {
#   'success': 'true' or 'false',
#   'payload': pdf file content if 'success' is 'true'
#   'error': error message if 'success' is 'false'
# }

print result['payload']

PDFLayoutTextStripperからの出力例: ここに画像の説明を入力してください

詳細はこちらストリッパーとPython


2

OCRよりも優れた回避策があり、PDFからテキストを抽出しながらページの配置を維持します。助けになるはずです:

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO

def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = open(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos=set()


    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
        interpreter.process_page(page)


    text = retstr.getvalue()

    fp.close()
    device.close()
    retstr.close()
    return text

text= convert_pdf_to_txt('test.pdf')
print(text)

Nb。最新バージョンcodecargを使用しなくなりました。私は、すなわち、それを削除することによって、これを固定device = TextConverter(rsrcmgr, retstr, laparams=laparams)
atomh33ls

1

PDFからテキストを抽出するには、以下のコードを使用します

import PyPDF2
pdfFileObj = open('mypdf.pdf', 'rb')

pdfReader = PyPDF2.PdfFileReader(pdfFileObj)

print(pdfReader.numPages)

pageObj = pdfReader.getPage(0)

a = pageObj.extractText()

print(a)

0

私はこれを達成するためにコードを追加しています:それは私にとってはうまくいきます:

# This works in python 3
# required python packages
# tabula-py==1.0.0
# PyPDF2==1.26.0
# Pillow==4.0.0
# pdfminer.six==20170720

import os
import shutil
import warnings
from io import StringIO

import requests
import tabula
from PIL import Image
from PyPDF2 import PdfFileWriter, PdfFileReader
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage

warnings.filterwarnings("ignore")


def download_file(url):
    local_filename = url.split('/')[-1]
    local_filename = local_filename.replace("%20", "_")
    r = requests.get(url, stream=True)
    print(r)
    with open(local_filename, 'wb') as f:
        shutil.copyfileobj(r.raw, f)

    return local_filename


class PDFExtractor():
    def __init__(self, url):
        self.url = url

    # Downloading File in local
    def break_pdf(self, filename, start_page=-1, end_page=-1):
        pdf_reader = PdfFileReader(open(filename, "rb"))
        # Reading each pdf one by one
        total_pages = pdf_reader.numPages
        if start_page == -1:
            start_page = 0
        elif start_page < 1 or start_page > total_pages:
            return "Start Page Selection Is Wrong"
        else:
            start_page = start_page - 1

        if end_page == -1:
            end_page = total_pages
        elif end_page < 1 or end_page > total_pages - 1:
            return "End Page Selection Is Wrong"
        else:
            end_page = end_page

        for i in range(start_page, end_page):
            output = PdfFileWriter()
            output.addPage(pdf_reader.getPage(i))
            with open(str(i + 1) + "_" + filename, "wb") as outputStream:
                output.write(outputStream)

    def extract_text_algo_1(self, file):
        pdf_reader = PdfFileReader(open(file, 'rb'))
        # creating a page object
        pageObj = pdf_reader.getPage(0)

        # extracting extract_text from page
        text = pageObj.extractText()
        text = text.replace("\n", "").replace("\t", "")
        return text

    def extract_text_algo_2(self, file):
        pdfResourceManager = PDFResourceManager()
        retstr = StringIO()
        la_params = LAParams()
        device = TextConverter(pdfResourceManager, retstr, codec='utf-8', laparams=la_params)
        fp = open(file, 'rb')
        interpreter = PDFPageInterpreter(pdfResourceManager, device)
        password = ""
        max_pages = 0
        caching = True
        page_num = set()

        for page in PDFPage.get_pages(fp, page_num, maxpages=max_pages, password=password, caching=caching,
                                      check_extractable=True):
            interpreter.process_page(page)

        text = retstr.getvalue()
        text = text.replace("\t", "").replace("\n", "")

        fp.close()
        device.close()
        retstr.close()
        return text

    def extract_text(self, file):
        text1 = self.extract_text_algo_1(file)
        text2 = self.extract_text_algo_2(file)

        if len(text2) > len(str(text1)):
            return text2
        else:
            return text1

    def extarct_table(self, file):

        # Read pdf into DataFrame
        try:
            df = tabula.read_pdf(file, output_format="csv")
        except:
            print("Error Reading Table")
            return

        print("\nPrinting Table Content: \n", df)
        print("\nDone Printing Table Content\n")

    def tiff_header_for_CCITT(self, width, height, img_size, CCITT_group=4):
        tiff_header_struct = '<' + '2s' + 'h' + 'l' + 'h' + 'hhll' * 8 + 'h'
        return struct.pack(tiff_header_struct,
                           b'II',  # Byte order indication: Little indian
                           42,  # Version number (always 42)
                           8,  # Offset to first IFD
                           8,  # Number of tags in IFD
                           256, 4, 1, width,  # ImageWidth, LONG, 1, width
                           257, 4, 1, height,  # ImageLength, LONG, 1, lenght
                           258, 3, 1, 1,  # BitsPerSample, SHORT, 1, 1
                           259, 3, 1, CCITT_group,  # Compression, SHORT, 1, 4 = CCITT Group 4 fax encoding
                           262, 3, 1, 0,  # Threshholding, SHORT, 1, 0 = WhiteIsZero
                           273, 4, 1, struct.calcsize(tiff_header_struct),  # StripOffsets, LONG, 1, len of header
                           278, 4, 1, height,  # RowsPerStrip, LONG, 1, lenght
                           279, 4, 1, img_size,  # StripByteCounts, LONG, 1, size of extract_image
                           0  # last IFD
                           )

    def extract_image(self, filename):
        number = 1
        pdf_reader = PdfFileReader(open(filename, 'rb'))

        for i in range(0, pdf_reader.numPages):

            page = pdf_reader.getPage(i)

            try:
                xObject = page['/Resources']['/XObject'].getObject()
            except:
                print("No XObject Found")
                return

            for obj in xObject:

                try:

                    if xObject[obj]['/Subtype'] == '/Image':
                        size = (xObject[obj]['/Width'], xObject[obj]['/Height'])
                        data = xObject[obj]._data
                        if xObject[obj]['/ColorSpace'] == '/DeviceRGB':
                            mode = "RGB"
                        else:
                            mode = "P"

                        image_name = filename.split(".")[0] + str(number)

                        print(xObject[obj]['/Filter'])

                        if xObject[obj]['/Filter'] == '/FlateDecode':
                            data = xObject[obj].getData()
                            img = Image.frombytes(mode, size, data)
                            img.save(image_name + "_Flate.png")
                            # save_to_s3(imagename + "_Flate.png")
                            print("Image_Saved")

                            number += 1
                        elif xObject[obj]['/Filter'] == '/DCTDecode':
                            img = open(image_name + "_DCT.jpg", "wb")
                            img.write(data)
                            # save_to_s3(imagename + "_DCT.jpg")
                            img.close()
                            number += 1
                        elif xObject[obj]['/Filter'] == '/JPXDecode':
                            img = open(image_name + "_JPX.jp2", "wb")
                            img.write(data)
                            # save_to_s3(imagename + "_JPX.jp2")
                            img.close()
                            number += 1
                        elif xObject[obj]['/Filter'] == '/CCITTFaxDecode':
                            if xObject[obj]['/DecodeParms']['/K'] == -1:
                                CCITT_group = 4
                            else:
                                CCITT_group = 3
                            width = xObject[obj]['/Width']
                            height = xObject[obj]['/Height']
                            data = xObject[obj]._data  # sorry, getData() does not work for CCITTFaxDecode
                            img_size = len(data)
                            tiff_header = self.tiff_header_for_CCITT(width, height, img_size, CCITT_group)
                            img_name = image_name + '_CCITT.tiff'
                            with open(img_name, 'wb') as img_file:
                                img_file.write(tiff_header + data)

                            # save_to_s3(img_name)
                            number += 1
                except:
                    continue

        return number

    def read_pages(self, start_page=-1, end_page=-1):

        # Downloading file locally
        downloaded_file = download_file(self.url)
        print(downloaded_file)

        # breaking PDF into number of pages in diff pdf files
        self.break_pdf(downloaded_file, start_page, end_page)

        # creating a pdf reader object
        pdf_reader = PdfFileReader(open(downloaded_file, 'rb'))

        # Reading each pdf one by one
        total_pages = pdf_reader.numPages

        if start_page == -1:
            start_page = 0
        elif start_page < 1 or start_page > total_pages:
            return "Start Page Selection Is Wrong"
        else:
            start_page = start_page - 1

        if end_page == -1:
            end_page = total_pages
        elif end_page < 1 or end_page > total_pages - 1:
            return "End Page Selection Is Wrong"
        else:
            end_page = end_page

        for i in range(start_page, end_page):
            # creating a page based filename
            file = str(i + 1) + "_" + downloaded_file

            print("\nStarting to Read Page: ", i + 1, "\n -----------===-------------")

            file_text = self.extract_text(file)
            print(file_text)
            self.extract_image(file)

            self.extarct_table(file)
            os.remove(file)
            print("Stopped Reading Page: ", i + 1, "\n -----------===-------------")

        os.remove(downloaded_file)


# I have tested on these 3 pdf files
# url = "http://s3.amazonaws.com/NLP_Project/Original_Documents/Healthcare-January-2017.pdf"
url = "http://s3.amazonaws.com/NLP_Project/Original_Documents/Sample_Test.pdf"
# url = "http://s3.amazonaws.com/NLP_Project/Original_Documents/Sazerac_FS_2017_06_30%20Annual.pdf"
# creating the instance of class
pdf_extractor = PDFExtractor(url)

# Getting desired data out
pdf_extractor.read_pages(15, 23)

0

ここからtika-app-xxx.jar(latest)をダウンロードできます。

次に、この.jarファイルをPythonスクリプトファイルと同じフォルダーに配置します。

次に、スクリプトに次のコードを挿入します。

import os
import os.path

tika_dir=os.path.join(os.path.dirname(__file__),'<tika-app-xxx>.jar')

def extract_pdf(source_pdf:str,target_txt:str):
    os.system('java -jar '+tika_dir+' -t {} > {}'.format(source_pdf,target_txt))

この方法の利点:

依存性が少ない。単一の.jarファイルは、Pythonパッケージよりも管理が容易です。

マルチフォーマットのサポート。位置source_pdfは、あらゆる種類のドキュメントのディレクトリにすることができます。(.doc、.html、.odtなど)

最新の。tika-app.jarは常に、関連するバージョンのtika pythonパッケージよりも前にリリースされます。

安定した。これは、PyPDFよりもはるかに安定しており、適切に維持されています(Powered by Apache)。

不利益:

jreヘッドレスが必要です。


完全にpythonicソリューションではありません。これを推奨する場合は、Pythonパッケージをビルドして、人々にインポートしてもらう必要があります。PythonでJavaコードのコマンドライン実行を使用することはお勧めしません。
Michael Tamillow 2018

@ MichaelTamillow、pypiにアップロードされるコードを書く場合、それは良い考えではないことを認めます。しかし、それが一時的な使用のためのシバンを備えた単なるPythonスクリプトであれば、それは悪くありませんね?
pah8J

さて、質問には「python」というタイトルは付けられていません。「Javaでこれを行う方法はここにある」と言った方がこれよりも受け入れやすいと思います。技術的には、Pythonでやりたいことは何でもできます。それが素晴らしいとひどいの両方である理由です。一時的な使用は悪い習慣です。
マイケルタミロー

0

WindowsのAnacondaで試してみると、PyPDF2は非標準の構造またはUnicode文字のPDFの一部を処理しない場合があります。多くのpdfファイルを開いて読み取る必要がある場合は、次のコードを使用することをお勧めします。相対パス.//pdfs//を持つフォルダー内のすべてのpdfファイルのテキストがリストに保存されますpdf_text_list

from tika import parser
import glob

def read_pdf(filename):
    text = parser.from_file(filename)
    return(text)


all_files = glob.glob(".\\pdfs\\*.pdf")
pdf_text_list=[]
for i,file in enumerate(all_files):
    text=read_pdf(file)
    pdf_text_list.append(text['content'])

print(pdf_text_list)

-1

PyPDF2は機能しますが、結果は異なる場合があります。結果の抽出から、かなり一貫性のない結果が出ています。

reader=PyPDF2.pdf.PdfFileReader(self._path)
eachPageText=[]
for i in range(0,reader.getNumPages()):
    pageText=reader.getPage(i).extractText()
    print(pageText)
    eachPageText.append(pageText)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.