HTML 表格搜索 - Amazon Kendra

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

HTML 表格搜索

Amazon Kendra的表格搜索功能可以从 HTML 文档中嵌入的表格中搜索和提取答案。搜索索引时,如果表中的摘录与查询相关,则 Amazon Kendra 包括该摘录并提供有用的信息。

Amazon Kendra 查看文档正文中的所有信息,包括表格中的有用信息。例如,索引包含业务报告,其中包含运营成本、收入和其他财务信息的表格。对于查询,“从2020-2022年起,每年的运营成本是多少?” , Amazon Kendra 可以返回表格的摘录,该表包含相关的表格列 “运营(百万美元)” 和 “财政年度”,以及包含 2020 年、2021 年和 2022 年收入值的表格行。结果中包含表格摘录、文档标题、指向完整文档的链接以及您选择包含的任何其他文档字段。

无论信息是在表格的一个单元格中还是在多个单元格中找到,都可以在搜索结果中显示表格摘录。例如, Amazon Kendra 可以显示针对以下每种查询量身定制的表格摘录:

  • “2020 年利率最高的信用卡”

  • “2020-2022 年以来利率最高的信用卡”

  • “2020-2022 年利率排名前三的信用卡”

  • “利率低于 10% 的信用卡”

  • “所有可用的低息信用卡”

Amazon Kendra 突出显示与查询最相关的一个或多个表格单元格。搜索结果中会显示最相关的单元格及其对应的行、列和列名。表格摘录最多显示五列三行,具体取决于与查询相关的表格单元格数量以及原始表中有多少列可用。最相关的单元格与次要相关的单元格一起显示在表格摘录中。

响应包括置信度桶(MEDIUM,HIGH,VERY_HIGH),以显示表答案与查询的相关性。如果表格单元格的值是处于可信度的 VERY_HIGH,则该值将变为“最佳答案”并突出显示。对于置信度为 HIGH 的表格单元格值,则会突出显示这些值。对于可信的表格单元格值,则 MEDIUM 不会突出显示这些值。响应中会返回表答案的总体置信度。例如,如果表格主要包含有 HIGH 置信度的表格单元格,则表答案的响应中返回的总体置信度为 HIGH 置信度。

默认情况下,表格的重要性级别或权重不会高于文档的其他组成部分。在文档中,如果表与查询的相关性很小,但有一个高度相关的段落,则 Amazon Kendra 返回该段落的摘录。搜索结果显示同一文档或其他文档中提供最佳答案和最有用信息的内容。如果表格的置信度低于 MEDIUM 置信度,则响应中不会返回表格摘录。

要对现有索引使用表格搜索,必须将内容重新编入索引。

Amazon Kendra 表格搜索支持同义词(包括自定义同义词)。 Amazon Kendra 仅支持带有表格标签内的 HTML 表格的英语文档。

以下示例显示了查询结果中包含的表摘录。要查看包含查询响应(包括表格摘录)的 JSON 示例,请参阅查询响应和类型

Python
import boto3 import pprint kendra = boto3.client("kendra") # Provide the index ID index_id = <index-id> # Provide the query text query = "search string" response = kendra.query( QueryText = query, IndexId = index_id) print("\nSearch results for query: " + query + "\n") for query_result in response["ResultItems"]: print("-------------------") print("Type: " + str(query_result["Type"])) print("Type: " + str(query_result["Format"])) if query_result["Type"]=="ANSWER" and query_result["Format"]=="TABLE": answer_table = query_result["TableExcerpt"] print(answer_table) if query_result["Type"]=="ANSWER" and query_result["Format"]=="TEXT": answer_text = query_result["DocumentExcerpt"] print(answer_text) if query_result["Type"]=="QUESTION_ANSWER": question_answer_text = query_result["DocumentExcerpt"]["Text"] print(question_answer_text) if query_result["Type"]=="DOCUMENT": if "DocumentTitle" in query_result: document_title = query_result["DocumentTitle"]["Text"] print("Title: " + document_title) document_text = query_result["DocumentExcerpt"]["Text"] print(document_text) print("------------------\n\n")
Java
package com.amazonaws.kendra; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.QueryRequest; import software.amazon.awssdk.services.kendra.model.QueryResponse; import software.amazon.awssdk.services.kendra.model.QueryResultItem; public class SearchIndexExample { public static void main(String[] args) { KendraClient kendra = KendraClient.builder().build(); String query = "search string"; String indexId = "index-id"; QueryRequest queryRequest = QueryRequest .builder() .queryText(query) .indexId(indexId) .build(); QueryResponse queryResponse = kendra.query(queryRequest); System.out.println(String.format("\nSearch results for query: %s", query)); for(QueryResultItem item: queryResponse.resultItems()) { System.out.println("----------------------"); System.out.println(String.format("Type: %s", item.type())); System.out.println(String.format("Format: %s", item.format())); switch(item.format()) { case TABLE: String answerTable = item.TableExcerpt(); System.out.println(answerTable); break; } switch(item.format()) { case TEXT: String answerText = item.DocumentExcerpt(); System.out.println(answerText); break; } switch(item.type()) { case QUESTION_ANSWER: String questionAnswerText = item.documentExcerpt().text(); System.out.println(questionAnswerText); break; case DOCUMENT: String documentTitle = item.documentTitle().text(); System.out.println(String.format("Title: %s", documentTitle)); String documentExcerpt = item.documentExcerpt().text(); System.out.println(String.format("Excerpt: %s", documentExcerpt)); break; default: System.out.println(String.format("Unknown query result type: %s", item.type())); } System.out.println("-----------------------\n"); } } }