以表格方式搜尋 - Amazon Kendra

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

以表格方式搜尋

Amazon Kendra的表格搜索功能可以從嵌入在 HTML 文檔中的表中搜索和提取答案。當您搜尋索引時,如果表格摘錄與查詢相關並提供有用的資訊,請 Amazon Kendra 包含表格摘錄。

Amazon Kendra 查看文件內文中的所有資訊,包括表格中的有用資訊。例如,索引包含商業報告,其中包含營運成本、收入和其他財務資訊的表格。對於查詢,「從 2020-2022 年度起的年度運營成本是多少?」 , Amazon Kendra 可以傳回包含相關表格欄「營運 (百萬美元)」和「財政年度」的表格摘錄,以及包含 2020 年、2021 年和 2022 年收入值的表格列。結果中會包含表格摘錄,以及文件標題、完整文件的連結,以及您選擇包含的任何其他文件欄位。

無論是在表格的一個儲存格或多個儲存格中找到資訊,都可以在搜尋結果中顯示表格摘錄。例如, Amazon Kendra 可以顯示針對以下每種查詢量身打造的表格摘錄:

  • 「2020 年最高利率信用卡」

  • 「2020 至 22 年度最高利率信用卡」

  • 「2020 至 22 年度前三大最高利率信用卡」

  • 「利率低於 10% 的信用卡」

  • 「所有可用的低息信用卡」

Amazon Kendra 反白與查詢最相關的表格儲存格。最相關的單元格及其對應的行,列和列名稱顯示在搜索結果中。根據查詢相關的表格儲存格數目,以及原始表格中可用的欄數目,表格摘錄最多會顯示五欄和三列。最重要的儲存格會顯示在表格摘錄中,以及下一個最相關的儲存格。

回應包含信賴值區 (MEDIUMHIGHVERY_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"); } } }