如何将Amazon Textract与PDF文件一起使用

时间:2019-11-25 18:46:21

标签: amazon-web-services ocr text-extraction amazon-textract

我已经可以将textract与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)

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

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

我该怎么做?

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

3 个答案:

答案 0 :(得分:3)

如@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))

response = client.get_document_text_detection(JobId=jobid)

可能需要5到50秒,直到对get_document_text_detection(...)的调用返回结果。以前,它会说它仍在处理。

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

编辑: 我忘了提一下,如果文档很大,那就太复杂了,在这种情况下,结果可能需要从多个“页面”中缝合在一起。您将需要添加的代码种类是


...
pages = [response]
while nextToken := response.get('NextToken'):
    response = client.get_document_text_detection(JobId=jobid, NextToken=nextToken)
    pages.append(response)
    

答案 1 :(得分:0)

答案 2 :(得分:0)

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

从AWS Textract文档中获取:

  
    

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