AWS Cloud Quest机器学习实验:Lambda函数无法识别表格求助
解决AWS Cloud Quest机器学习实验中Lambda表格检测错误问题
你遇到的错误核心在于代码中保留了不必要的表单字段处理逻辑,尽管已经将FeatureTypes改为TABLES,但冗余的表单处理代码会干扰实验的验证逻辑,导致测试无法通过。
问题具体分析
- 代码中包含
page.form.fields的遍历和打印逻辑,这部分属于表单(FIELDS)处理范畴,与当前实验要求的表格(TABLES)检测无关,验证脚本会因这部分多余逻辑判断函数未正确聚焦表格检测任务。 - 虽然指定了
FeatureTypes=['TABLES'],但未清理原有的表单处理代码,函数执行时仍会尝试处理表单数据,不符合实验的预期行为。
修改后的代码
import json import logging import boto3 from trp import Document from urllib.parse import unquote_plus logger = logging.getLogger() logger.setLevel(logging.INFO) s3 = boto3.client('s3') output_key = "output/textract_response.json" def lambda_handler(event, context): logger.info(event) for record in event['Records']: bucket = record['s3']['bucket']['name'] key = unquote_plus(record['s3']['object']['key']) textract = boto3.client('textract') try: response = textract.analyze_document( Document={ 'S3Object': { 'Bucket': bucket, 'Name': key } }, FeatureTypes=['TABLES'] ) doc = Document(response) # 仅保留表格处理逻辑 for page in doc.pages: print("\nTable details:") for table in page.tables: for r, row in enumerate(table.rows): for c, cell in enumerate(row.cells): print("Table[{}][{}] = {}".format(r, c, cell.text)) return_result = {"Status": "Success"} # 将Textract响应写入S3指定路径 s3.put_object( Bucket=bucket, Key=output_key, Body=json.dumps(response, indent=4) ) return return_result except Exception as error: return {"Status": "Failed", "Reason": json.dumps(error, default=str)}
关键修改点
- 完全移除所有与表单字段(
page.form)相关的遍历、打印代码,确保函数仅专注于表格检测与处理。 - 简化
FeatureTypes的写法,去掉冗余注释和逗号(不影响功能,但代码更整洁)。 - 保留核心的表格遍历打印逻辑,以及将Textract响应写入S3的步骤,这是实验要求的关键输出。
内容的提问来源于stack exchange,提问作者Artur Uvarov
相关产品推荐
相关产品推荐

