如何使用 pdfminer 从存储在 S3 存储桶中的 PDF 文件中提取文本而不在本地下载?

How to use pdfminer to extract text from PDF files stored in S3 bucket without downloading it locally?

我在 S3 存储桶中存储了一个 PDF。我想使用 pdfminer 从该 PDF 文件中提取文本。

当文件存储在本地时,我可以使用以下代码提取:

from pdfminer3.layout import LAParams, LTTextBox
from pdfminer3.pdfpage import PDFPage
from pdfminer3.pdfinterp import PDFResourceManager
from pdfminer3.pdfinterp import PDFPageInterpreter
from pdfminer3.converter import PDFPageAggregator
from pdfminer3.converter import TextConverter
from pdfminer.high_level import extract_pages
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
import io
from urllib.parse import urlparse

resource_manager = PDFResourceManager()
file_handle = io.StringIO()
converter = TextConverter(resource_manager, file_handle, laparams=LAParams())

page_interpreter = PDFPageInterpreter(resource_manager, converter)

pdf_file = 'file.pdf'

with open(pdf_file, 'rb') as fh:


    for page in PDFPage.get_pages(fh,
                              caching=True,
                              check_extractable=True):
        page_interpreter.process_page(page)

        text = file_handle.getvalue()

# close open handles
converter.close()
file_handle.close()
total_no_pages = len(list(extract_pages(pdf_file)))
print(total_no_pages)
print(text)

我可以干净利落地提取文本。

但是,我想对存储在 S3 中的 PDF 执行相同的操作。

我已经连接到 S3 存储桶并像这样获取数据:

import boto3, os

s3 = boto3.resource(
   service_name='s3',
   region_name=<region-name>,
   aws_access_key_id=<access-key>,
   aws_secret_access_key=<secret-key>
)

    
bucket_name = <bucket_name>
item_name = <folederName/file.pdf>

obj = s3.Object(bucket_name, item_name)
fs = obj.get()['Body'].read()

当我打印 fs 时,我看到它 returns 字节数据。

请建议一种使用 pdfminer 存储在 S3 中的文本的方法。

而不是

get_pages(fh,caching=True, check_extractable=True):

你可以:

get_pages(io.BytesIO(fs), caching=True, check_extractable=True):

顺便说一句,您仍在从 S3 下载对象,但并未将它们物理保存在本地硬盘上。