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
nota
O suporte a recursos varia de acordo com o tipo de índice e a pesquisa API usada. Para ver se esse recurso é compatível com o tipo de índice e a pesquisa API que você está usando, consulte Tipos de índice.
Você pode alterar os campos ou atributos de metadados do conteúdo e do documento durante o processo de absorção de documentos. Com Amazon Kendra o recurso de enriquecimento personalizado de documentos, você pode criar, modificar ou excluir atributos e conteúdo do documento ao ingerir seus 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 informações de identificação pessoal nos metadados do documento enquanto ingere seus documentos. Amazon Kendra
Outra forma de usar esse recurso é invocar uma função AWS Lambda 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 ser executada 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:
-
Você configura o Enriquecimento Personalizado de Documentos ao criar ou atualizar sua fonte de dados ou ao indexar seus documentos diretamente no Amazon Kendra.
-
Amazon Kendra aplica configurações em linha ou lógica básica para alterar seus dados. Para obter mais informações, consulte Operações básicas para alterar metadados.
-
Se você optar por configurar a manipulação avançada de dados, Amazon Kendra poderá aplicá-la em seus 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.
-
Seus 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.
Quando você liga CreateDataSource, UpdateDataSourceBatchPutDocumentAPIs, ou fornece sua configuração de enriquecimento personalizado 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 enriquecimentos de documentos no console, poderá optar por configurar somente as operações básicas ou somente as funções do Lambda ou ambas, como você pode usar o. 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, você especifica o campo de destino que deseja manipular usando o DocumentAttributeTargetobjeto. 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. Você define a condição usando o DocumentAttributeConditionobjeto. Por exemplo, se o campo “Fonte_URI” contiver “financeiro” em seu URI valor, preencha previamente o campo de destino “Departamento” com o valor alvo “Finanças” do 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 'Fonte_ 'URI. Isso usa a condição de que, se o campo 'Origem_URI' contiver 'financeiro' em seu URI valor, preencha previamente o campo de destino 'Departamento' com o valor alvo 'Finanças' do 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 | Fonte_ 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 | Fonte_ URI | Departamento |
---|---|---|---|
1 | Lorem Ipsum. | financeiro/1 | Financeiro |
2 | Lorem Ipsum. | financeiro/2 | Financeiro |
3 | Lorem Ipsum. | financeiro/3 | Financeiro |
nota
Amazon Kendra não é possível criar um campo do documento de destino se ele ainda não tiver sido criado como um campo de índice. Depois de criar seu campo de índice, você pode criar um campo de documento usando DocumentAttributeTarget
o. Amazon Kendra em seguida, 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, usando o Reconhecimento Óptico de Caracteres (OCR), que interpreta texto de imagens e trata cada imagem como um documento textual. 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.
Amazon Kendra pode invocar uma função Lambda para aplicar manipulações avançadas de dados durante o processo de ingestão como parte do seu. CustomDocumentEnrichmentConfiguration Você especifica uma função que inclui permissão para executar a função Lambda e acessar seu Amazon S3 bucket para armazenar a saída de suas manipulações IAM de dados — consulte funções de acesso.
Amazon Kendra pode aplicar uma função Lambda em seus documentos originais brutos ou nos documentos estruturados e analisados. Você pode configurar uma função Lambda que pega seus dados originais ou brutos e aplica suas manipulações de dados usando. PreExtractionHookConfiguration Você também pode configurar uma função Lambda que pega seus documentos estruturados e aplica suas manipulações de dados usando. PostExtractionHookConfiguration Amazon Kendra extrai os metadados e o texto do documento para estruturar seus 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 ingerir seus documentos Amazon Kendra do que se você não configurasse isso.
Você pode configurar Amazon Kendra para invocar uma função Lambda somente se uma condição for atendida. Por exemplo, você pode especificar uma condição de que, se houver valores de data e hora vazios, invoque uma função que insira a data e hora atual. Amazon Kendra
Veja a seguir um exemplo do uso de uma função Lambda para interpretar texto de imagens e armazenar esse texto em um campo chamado 'Document_Image_Text'. OCR
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 suas funções do Lambda não seguirem essas estruturas, 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>] }
Seu documento alterado é enviado para o seu Amazon S3 bucket. O documento alterado deve seguir o formato mostrado em Formato de documento estruturado.
Formato de documento estruturado
Amazon Kendra carrega seu documento estruturado em um determinado Amazon S3 bucket. 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 residir em um balde 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"]}} ] }