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

标签 python amazon-web-services amazon-s3 boto3 pdfminer

我有一个 PDF 存储在 S3 存储桶中。我想使用 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 时,我看到它以字节为单位返回数据。

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

最佳答案

而不是

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

你可以:

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

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

关于python - 如何使用pdfminer从存储在S3存储桶中的PDF文件中提取文本而不需要下载到本地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65844539/

相关文章:

python - 使用 NumPy 从特征值创建 Jordan 矩阵

python - Python 的 MRO、C3 线性化是否深度优先?根据经验,它没有

java - Java 中的 AWS DynamoDbMapper FilterExpression 分页

javascript - 通过 makeUnauthenticatedRequest : "Network Failure"? 访问 JS AWS S3 公共(public)存储桶

amazon-s3 - DynamoDb + S3 + CloudSearch + Redis

javascript - 试图从亚马逊 s3 调用外部样式表

hadoop - 估算并行计算的计算成本

Python 2.7 UnicodeEncode 错误

python - 为字符串解析 ~4k 文件(复杂的条件)

amazon-web-services - 基于速率的 WAF 规则的云形成支持