As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Enriquecendo seus documentos durante a absorção
Você pode alterar os campos ou atributos de metadados do conteúdo e do documento durante o processo de absorção de documentos. Com o atributo do Amazon Kendra de Enriquecimento personalizado de documentos, você pode criar, modificar ou excluir atributos e conteúdo do documento ao absorver os documentos. Amazon Kendra Isso significa que você pode manipular e absorver os dados conforme necessário.
Esse atributo oferece controle sobre como os documentos são tratados e absorvidos. Amazon Kendra Por exemplo, você pode limpar as informações de identificação pessoal nos metadados do documento ao absorver os documentos. Amazon Kendra
Outra forma de usar esse atributo é invocar uma função do Lambda no AWS Lambda para executar o reconhecimento óptico de caracteres (OCR) em imagens, tradução em texto e outras tarefas para preparar os dados para pesquisa ou análise. Por exemplo, você pode invocar uma função para executar o OCR em imagens. A função pode interpretar texto de imagens e tratar cada imagem como um documento textual. Uma empresa que recebe pesquisas de clientes enviadas por e-mail e as armazena como imagens pode gerar essas imagens como documentos de texto no Amazon Kendra. A empresa pode então pesquisar informações valiosas sobre pesquisas com clientes no Amazon Kendra.
Você pode usar operações básicas para aplicar como a primeira análise dos dados e, em seguida, usar uma função do Lambda para aplicar operações mais complexas nos dados. Por exemplo, use uma operação básica para simplesmente remover todos os valores no campo de metadados do documento 'Customer_ID' e depois aplicar uma função do Lambda para extrair texto das imagens do texto nos documentos.
Como funciona o enriquecimento personalizado de documentos
O processo geral de enriquecimento personalizado de documentos é o seguinte:
-
Configure o enriquecimento personalizado de documentos ao criar ou atualizar a fonte de dados ou ao indexar os documentos diretamente no Amazon Kendra.
-
O Amazon Kendra aplica configurações em linha ou lógica básica para alterar os dados. Para obter mais informações, consulte Operações básicas para alterar metadados.
-
Se optar por configurar a manipulação avançada de dados, Amazon Kendra poderá aplicá-la nos documentos originais brutos ou nos documentos estruturados e analisados. Para obter mais informações, consulte Funções do Lambda: extrair e alterar metadados ou conteúdo.
-
Os documentos alterados são inseridos em Amazon Kendra
Em qualquer momento desse processo, se a configuração não for válida, Amazon Kendra gerará um erro.
Ao escolher as APIs CreateDataSource, UpdateDataSource ou BatchputDocument, você fornece a configuração personalizada de enriquecimento de documentos. Se escolher BatchPutDocument
, deverá configurar o enriquecimento personalizado de documentos com cada solicitação. Se você usa o console, seleciona o índice e, em seguida, selecione Enriquecimentos de documentos para configurar o enriquecimento personalizado de documentos.
Se você usar o enriquecimentos de documentos no console, poderá optar por configurar somente as operações básicas, somente as funções do Lambda ou as duas, como ao usar a API. Selecione Avançar nas etapas do console para optar por não configurar operações básicas e somente as funções do Lambda, incluindo se deseja aplicar aos dados originais (pré-extração) ou estruturados (pós-extração). Você só pode salvar as configurações ao concluir todas as etapas no console. As configurações do documento não serão salvas se você não concluir todas as etapas.
Operações básicas para alterar metadados
Você pode manipular os campos e o conteúdo do documento usando a lógica básica. Isso inclui remover valores em um campo, modificar valores em um campo usando uma condição ou criar um campo. Para manipulações avançadas que vão além do que você pode manipular usando a lógica básica, invoque uma função do Lambda. Para obter mais informações, consulte Funções do Lambda: extrair e alterar metadados ou conteúdo.
Para aplicar a lógica básica, especifique o campo de destino que deseja manipular usando o objeto DocumentAttributeTarget. Forneça a chave de atributo. Por exemplo, a chave “Departamento” é um campo ou atributo que contém todos os nomes de departamentos associados aos documentos. Você também pode especificar um valor a ser usado no campo de destino se uma determinada condição for atendida. Defina a condição usando o objeto DocumentAttributeCondition. por exemplo, se o campo “Source_URI” contiver “financeiro” como valor de URI, o campo de destino “Departmento” será preenchido previamente com o valor de destino “Financeiro” para o documento. Você também pode excluir os valores do atributo do documento de destino.
Para aplicar a lógica básica usando o console, selecione o índice e, em seguida, selecione Enriquecimentos de documentos no menu de navegação. Acesse Configurar operações básicas para aplicar manipulações básicas aos campos e ao conteúdo do documento.
O exemplo a seguir é do uso da lógica básica para remover todos os números de identificação do cliente no campo “Customer_ID”.
Exemplo 1: remoção dos números de identificação do cliente associados aos documentos
Dados antes da aplicação da manipulação básica.
Document_ID | Body_Text | Customer_ID |
---|---|---|
1 | Lorem Ipsum. | CID1234 |
2 | Lorem Ipsum. | CID1235 |
3 | Lorem Ipsum. | CID1236 |
Dados antes da aplicação da manipulação básica.
Document_ID | Body_Text | Customer_ID |
---|---|---|
1 | Lorem Ipsum. | |
2 | Lorem Ipsum. | |
3 | Lorem Ipsum. |
Veja a seguir um exemplo do uso da lógica básica para criar um campo chamado “Departamento” e preencher previamente esse campo com os nomes dos departamentos com base nas informações do campo do “Source_URI”. Isso define a condição estabelecendo que, se o campo “Source_URI” contiver “financial” (financeiro) como valor de URI, o campo de destino “Department” (Departamento) será preenchido previamente com o valor de destino “Financeiro” para o documento.
Exemplo 2: criar o campo “Departamento” e preenchê-lo previamente com os nomes dos departamentos associados aos documentos usando uma condição.
Dados antes da aplicação da manipulação básica.
Document_ID | Body_Text | Source_URI |
---|---|---|
1 | Lorem Ipsum. | financeiro/1 |
2 | Lorem Ipsum. | financeiro/2 |
3 | Lorem Ipsum. | financeiro/3 |
Dados antes da aplicação da manipulação básica.
Document_ID | Body_Text | Source_URI | Departamento |
---|---|---|---|
1 | Lorem Ipsum. | financeiro/1 | Financeiro |
2 | Lorem Ipsum. | financeiro/2 | Financeiro |
3 | Lorem Ipsum. | financeiro/3 | Financeiro |
nota
O Amazon Kendra não poderá criar um campo de documento de destino se ele ainda não tiver sido criado como um campo de índice. Depois de criar o campo de índice, você poderá criar um campo de documento usandoDocumentAttributeTarget
. Em seguida, o Amazon Kendra mapeia o campo de metadados do documento recém-criado para o campo de índice.
O código a seguir é um exemplo de como configurar a manipulação básica de dados para remover os números de identificação do cliente associados aos documentos.
Funções do Lambda: extrair e alterar metadados ou conteúdo
Você pode manipular os campos e o conteúdo do documento usando as funções do Lambda. Isso é útil se você quiser ir além da lógica básica e aplicar manipulações avançadas de dados. Por exemplo, ao usar o reconhecimento óptico de caracteres (OCR), que interpreta texto de imagens e trata cada imagem como um documento de texto. Ou recuperando a data e hora atual em um determinado fuso horário e inserindo a data e hora em que há um valor vazio para um campo de data.
Você pode aplicar a lógica básica primeiro e depois usar uma função do Lambda para manipular ainda mais os dados, ou vice-versa. Você também pode optar por aplicar somente uma função do Lambda.
O Amazon Kendra pode invocar uma função do Lambda para aplicar manipulações avançadas de dados durante o processo de absorção como parte do CustomDocumentEnrichmentConfiguration. Você pode especificar uma função que inclui permissão para executar a função do Lambda e acessar o bucket do Amazon S3 para armazenar a saída de suas manipulações de dados: consulte funções de acesso do IAM.
O Amazon Kendra pode aplicar uma função do Lambda em seus documentos originais ou brutos ou nos documentos estruturados e analisados. Você pode configurar uma função do Lambda que pegue os dados originais ou brutos e aplique as manipulações de dados usando o PreExtractionHookConfiguration. Você também pode configurar uma função do Lambda que usa os documentos estruturados e aplica suas manipulações de dados usando o PostExtractionHookConfiguration. O Amazon Kendra extrai os metadados e o texto do documento para estruturar os documentos. As funções do Lambda devem seguir as estruturas obrigatórias de solicitação e resposta. Para obter mais informações, consulte Contratos de dados para funções do Lambda.
Para aplicar a função do Lambda usando o console, selecione o índice e, em seguida, selecione Enriquecimentos de documentos no menu de navegação. Acesse Configurar funções do Lambda para configurar uma função do Lambda.
Você pode configurar somente uma função do Lambda para PreExtractionHookConfiguration
e somente mais uma função do Lambda para PostExtractionHookConfiguration
. No entanto, essa função do Lambda pode invocar outras funções necessárias. Você pode configurar PreExtractionHookConfiguration
e PostExtractionHookConfiguration
e/ou um só deles. A função do Lambda para PreExtractionHookConfiguration
não deve exceder um tempo de execução de 5 minutos e a função do Lambda para PostExtractionHookConfiguration
não deve exceder o tempo de execução de 1 minuto. A configuração do enriquecimento personalizado de documentos naturalmente leva mais tempo para absorver os documentos no Amazon Kendra do que se a opção não estiver configurada.
Você pode configurar o Amazon Kendra para invocar uma função do Lambda somente se uma condição for atendida. Por exemplo, você pode especificar uma condição determinando que, se houver valores de data e hora vazios, o Amazon Kendra deverá invocar uma função para inserir a data e hora atuais.
Veja a seguir um exemplo do uso de uma função do Lambda para executar o OCR para interpretar texto de imagens e armazenar esse texto em um campo chamado “Document_Image_Text”.
Exemplo 1: extraindo texto de imagens para criar documentos textuais
Dados antes da aplicação da manipulação avançada.
Document_ID | Document_Image |
---|---|
1 | image_1.png |
2 | image_2.png |
3 | image_3.png |
Dados depois da aplicação da manipulação avançada.
Document_ID | Document_Image | Document_Image_Text |
---|---|---|
1 | image_1.png | Resposta de pesquisa enviada por e-mail |
2 | image_2.png | Resposta de pesquisa enviada por e-mail |
3 | image_3.png | Resposta de pesquisa enviada por e-mail |
Veja a seguir um exemplo do uso de uma função do Lambda para inserir a data e hora atual para valores de data vazios. Isso usa a condição de que, se o valor do campo de data for “nulo”, ele deve ser substituído pela data e hora atual.
Exemplo 2: substituindo valores vazios no campo Last_Updated pela data e hora atual.
Dados antes da aplicação da manipulação avançada.
Document_ID | Body_Text | Last_Updated |
---|---|---|
1 | Lorem Ipsum. | 1º de janeiro de 2020 |
2 | Lorem Ipsum. | |
3 | Lorem Ipsum. | 1.º de julho de 2020 |
Dados depois da aplicação da manipulação avançada.
Document_ID | Body_Text | Last_Updated |
---|---|---|
1 | Lorem Ipsum. | 1º de janeiro de 2020 |
2 | Lorem Ipsum. | 1.º de dezembro de 2021 |
3 | Lorem Ipsum. | 1.º de julho de 2020 |
O código a seguir é um exemplo de configuração de uma função do Lambda para manipulação avançada de dados nos dados originais brutos.
Contratos de dados para funções do Lambda
As funções do Lambda para manipulação avançada de dados interagem com os contratos de dados do Amazon Kendra. Os contratos são as estruturas obrigatórias de solicitação e resposta das funções do Lambda. Se as funções do Lambda não seguirem essas estruturas, o Amazon Kendra gerará um erro.
A função do Lambda para PreExtractionHookConfiguration
deve esperar a seguinte estrutura de solicitação:
{ "version": <str>, "dataBlobStringEncodedInBase64": <str>, //In the case of a data blob "s3Bucket": <str>, //In the case of an S3 bucket "s3ObjectKey": <str>, //In the case of an S3 bucket "metadata": <Metadata> }
A estrutura metadata
, que inclui a estrutura CustomDocumentAttribute
, é a seguinte:
{ "attributes": [<CustomDocumentAttribute<] } CustomDocumentAttribute { "name": <str>, "value": <CustomDocumentAttributeValue> } CustomDocumentAttributeValue { "stringValue": <str>, "integerValue": <int>, "longValue": <long>, "stringListValue": list<str>, "dateValue": <str> }
A função do Lambda para PreExtractionHookConfiguration
deve seguir a seguinte estrutura de resposta:
{ "version": <str>, "dataBlobStringEncodedInBase64": <str>, //In the case of a data blob "s3ObjectKey": <str>, //In the case of an S3 bucket "metadataUpdates": [<CustomDocumentAttribute>] }
A função do Lambda para PostExtractionHookConfiguration
deve esperar a seguinte estrutura de solicitação:
{ "version": <str>, "s3Bucket": <str>, "s3ObjectKey": <str>, "metadata": <Metadata> }
A função do Lambda para PostExtractionHookConfiguration
deve seguir a seguinte estrutura de resposta:
PostExtractionHookConfiguration Lambda Response { "version": <str>, "s3ObjectKey": <str>, "metadataUpdates": [<CustomDocumentAttribute>] }
O documento alterado é enviado para o bucket do Amazon S3. O documento alterado deve seguir o formato mostrado em Formato de documento estruturado.
Formato de documento estruturado
O Amazon Kendra carrega o documento estruturado em um determinado bucket do Amazon S3. O documento estruturado segue esse formato:
Kendra document { "textContent": <TextContent> } TextContent { "documentBodyText": <str> }
Exemplo de uma função do Lambda que adere aos contratos de dados
O código Python a seguir é um exemplo de uma função do Lambda que aplica manipulação avançada dos campos de metadados _authors
, _document_title
e do conteúdo do corpo nos documentos brutos ou originais.
No caso do conteúdo corporal estiver em um bucket do Amazon S3
import json import boto3 s3 = boto3.client("s3") # Lambda function for advanced data manipulation def lambda_handler(event, context): # Get the value of "S3Bucket" key name or item from the given event input s3_bucket = event.get("s3Bucket") # Get the value of "S3ObjectKey" key name or item from the given event input s3_object_key = event.get("s3ObjectKey") content_object_before_CDE = s3.get_object(Bucket = s3_bucket, Key = s3_object_key) content_before_CDE = content_object_before_CDE["Body"].read().decode("utf-8"); content_after_CDE = "CDEInvolved " + content_before_CDE # Get the value of "metadata" key name or item from the given event input metadata = event.get("metadata") # Get the document "attributes" from the metadata document_attributes = metadata.get("attributes") s3.put_object(Bucket = s3_bucket, Key = "dummy_updated_kendra_document", Body=json.dumps(content_after_CDE)) return { "version": "v0", "s3ObjectKey": "dummy_updated_kendra_document", "metadataUpdates": [ {"name":"_document_title", "value":{"stringValue":"title_from_pre_extraction_lambda"}}, {"name":"_authors", "value":{"stringListValue":["author1", "author2"]}} ] }
No caso do conteúdo corporal estiver em um bucket do blob de dados
import json import boto3 import base64 # Lambda function for advanced data manipulation def lambda_handler(event, context): # Get the value of "dataBlobStringEncodedInBase64" key name or item from the given event input data_blob_string_encoded_in_base64 = event.get("dataBlobStringEncodedInBase64") # Decode the data blob string in UTF-8 data_blob_string = base64.b64decode(data_blob_string_encoded_in_base64).decode("utf-8") # Get the value of "metadata" key name or item from the given event input metadata = event.get("metadata") # Get the document "attributes" from the metadata document_attributes = metadata.get("attributes") new_data_blob = "This should be the modified data in the document by pre processing lambda ".encode("utf-8") return { "version": "v0", "dataBlobStringEncodedInBase64": base64.b64encode(new_data_blob).decode("utf-8"), "metadataUpdates": [ {"name":"_document_title", "value":{"stringValue":"title_from_pre_extraction_lambda"}}, {"name":"_authors", "value":{"stringListValue":["author1", "author2"]}} ] }
O código Python a seguir é um exemplo de uma função do Lambda que aplica manipulação avançada dos campos de metadados _authors
, _document_title
e do conteúdo do corpo nos documentos estruturados ou analisados.
import json import boto3 import time s3 = boto3.client("s3") # Lambda function for advanced data manipulation def lambda_handler(event, context): # Get the value of "S3Bucket" key name or item from the given event input s3_bucket = event.get("s3Bucket") # Get the value of "S3ObjectKey" key name or item from the given event input s3_key = event.get("s3ObjectKey") # Get the value of "metadata" key name or item from the given event input metadata = event.get("metadata") # Get the document "attributes" from the metadata document_attributes = metadata.get("attributes") kendra_document_object = s3.get_object(Bucket = s3_bucket, Key = s3_key) kendra_document_string = kendra_document_object['Body'].read().decode('utf-8') kendra_document = json.loads(kendra_document_string) kendra_document["textContent"]["documentBodyText"] = "Changing document body to a short sentence." s3.put_object(Bucket = s3_bucket, Key = "dummy_updated_kendra_document", Body=json.dumps(kendra_document)) return { "version" : "v0", "s3ObjectKey": "dummy_updated_kendra_document", "metadataUpdates": [ {"name": "_document_title", "value":{"stringValue": "title_from_post_extraction_lambda"}}, {"name": "_authors", "value":{"stringListValue":["author1", "author2"]}} ] }