7

我已经可以使用文本,但使用 JPEG 文件。我想将它与 PDF 文件一起使用。

我有下面的代码:

import boto3

# Document
documentName = "Path to document in JPEG"

# Read document content
with open(documentName, 'rb') as document:
    imageBytes = bytearray(document.read())

# Amazon Textract client
textract = boto3.client('textract')
documentText = ""

# Call Amazon Textract
response = textract.detect_document_text(Document={'Bytes': imageBytes})

#print(response)

# Print detected text
for item in response["Blocks"]:
    if item["BlockType"] == "LINE":
        documentText = documentText + item["Text"]

        # print('\033[94m' +  item["Text"] + '\033[0m')
        # # print(item["Text"])

# removing the quotation marks from the string, otherwise would cause problems to A.I
documentText = documentText.replace(chr(34), '')
documentText = documentText.replace(chr(39), '')
print(documentText)

正如我所说,它工作正常。但我想使用它来传递 PDF 文件,就像在 Web 应用程序中一样进行测试。

我知道可以在 python 中将 PDF 转换为 JPEG,但是使用 PDF 会很好。我阅读了文档并没有找到答案。

我怎样才能做到这一点?

编辑 1:我忘了提到我不打算使用 de s3 存储桶。我想直接在脚本中传递 PDF,而不必将其上传到 s3 存储桶中。

4

4 回答 4

5

正如@syumaK 提到的,您需要先将 pdf 上传到 S3。但是,这样做可能比您想象的更便宜、更容易:

  • 在控制台中创建新的 S3 存储桶并记下存储桶名称,然后
import random
import boto3

bucket = 'YOUR_BUCKETNAME'
path = 'THE_PATH_FROM_WHERE_YOU_UPLOAD_INTO_S3'
filename = 'YOUR_FILENAME'

s3 = boto3.resource('s3')
print(f'uploading {filename} to s3')
s3.Bucket(bucket).upload_file(path+filename, filename)

client = boto3.client('textract')
response = client.start_document_text_detection(
                   DocumentLocation={'S3Object': {'Bucket': bucket, 'Name': filename} },
                   ClientRequestToken=random.randint(1,1e10))

jobid = response['JobId']
response = client.get_document_text_detection(JobId=jobid)

get_document_text_detection(...)调用返回结果可能需要 5-50 秒。之前,它会说它仍在处理中。

据我了解,对于每个令牌,将执行一次付费 API 调用 - 如果令牌在过去出现,则将检索过去的 API 调用。

编辑: 我忘了提到,如果文档很大,就会有一个错综复杂的情况,在这种情况下,结果可能需要从多个“页面”拼接在一起。您需要添加的代码类型是


...
pages = [response]
while nextToken := response.get('NextToken'):
    response = client.get_document_text_detection(JobId=jobid, NextToken=nextToken)
    pages.append(response)
    
于 2020-08-07T08:56:57.007 回答
1

由于您要处理 PDF 文件,这意味着您将使用 Amazon Textract 异步 API(StartDocumentAnalysisStartDocumentTextDetection),因此目前无法直接解析 PDF 文件。这是因为 Amazon Textract 异步 API 仅支持将文档位置作为 S3 对象。

来自 AWS Textract 文档:

Amazon Textract 目前支持 PNG、JPEG 和 PDF 格式。对于同步 API,您可以将图像作为 S3 对象或字节数组提交。对于异步 API,您可以提交 S3 对象。

于 2019-11-28T18:58:14.160 回答
0

将 pdf 上传到 S3 存储桶。之后,您可以轻松使用可用的函数 startDocumentAnalysis 直接从 s3 获取 pdf 并进行文本提取。

于 2021-10-17T17:17:54.057 回答