Pular para o conteúdo principal
Esta seção apresenta alguns exemplos de regras de extração criadas no editor de código, que oferece mais flexibilidade do que a interface gráfica (consulte a seção Sintaxe para uma descrição detalhada da sintaxe usada).

Encontrando a última ocorrência de uma entidade nomeada

Neste exemplo, uma regra de extração é usada para localizar o nome da organização do locatário em um contrato de locação. Esse nome aparece após os nomes de todas as outras organizações e não pode ser extraído usando as configurações da interface (GUI), na qual você só pode selecionar Instances > First. No entanto, é possível usar uma regra de extração para buscar o nome da organização que aparece imediatamente antes da palavra “Tenant” entre colchetes. Primeiro, identificamos a palavra-chave “Tenant” como um elemento de busca auxiliar. Em seguida, buscamos o nome da organização que ocorre antes dessa palavra-chave. Neste exemplo, há dois tokens intermediários — um colchete de abertura e uma aspa —, portanto, limitamos a distância a três tokens, garantindo uma margem de segurança. Se seus documentos tiverem mais tokens intermediários separando a palavra-chave do nome da organização, aumente esse número conforme necessário.

Regra para extrair a última ocorrência de organização

// Estamos procurando apenas uma instância
~TenantName
// Localizar o nome da organização que aparece antes da palavra-chave "Tenant"
// e que esteja separado dela por no máximo três tokens
// Os tokens intermediários não devem conter o nome de outra organização
[ t: @NEROrganization ]+ [ ~@NEROrganization ~@kw_Tenant ]{0,3} [ @kw_Tenant ]
=>
TenantName( t );

Exemplo

Exemplo mostrando a extração do nome do locatário

Extraindo um montante de dinheiro declarado tanto por extenso quanto em algarismos

Neste exemplo, uma regra de extração com expressões regulares é utilizada para localizar um montante de dinheiro escrito primeiro por extenso e depois em dígitos entre parênteses, por exemplo: Two Thousand One Hundred Forty-Seven Dollars and Sixty Cents ($2,147.60) Two Thousand One Hundred Forty-Seven Dollars and Sixty Cents (in numbers: $2,147.60)

Regra para extrair um montante em dinheiro

// A variável a recebe a entidade nomeada Money que não está em números
// e ainda não foi atribuída a nenhuma outra instância do elemento de pesquisa Money
[ a: @NERMoney( same ) ~@Money ~/\d+/ ]+
[ br: '(' ]
// O ponto de interrogação significa que as palavras "in numbers" são opcionais
// Os símbolos ^ e $ significam que toda a string deve corresponder à expressão regular
// A opção i significa que a correspondência não diferencia maiúsculas de minúsculas
( [ e1: /^in$/i ] [ e2: /^numbers$/i ] [ e3: ':' ]? )?
// A variável b recebe a entidade nomeada Money que está posicionada dentro de colchetes
[ b: @NERMoney( same ) ~@Money ]+
=>
Money( a + br + e1 + e2 + e3 + b );

Exemplo

Exemplo de extração de valores monetários

Encontrando segmentos por meio de palavras-chave

Neste exemplo, regras de extração são usadas para localizar segmentos que não podem ser detectados de forma confiável pela atividade de Segmentação. As regras procuram palavras-chave que iniciam ou encerram um segmento e extraem o texto entre elas. Pressupomos que nossos documentos tenham títulos de segundo nível numerados, escritos em letras maiúsculas, por exemplo: 1.1 PREMISES, 2.3 LIABILITY AND INDEMNITY, e assim por diante. Também pressupomos que já extraímos os títulos de primeiro nível em um elemento de pesquisa chamado “kw_Heading1” (a respectiva regra de extração foi omitida por brevidade). Primeiro, buscamos palavras-chave que iniciem cada parágrafo do documento e as extraímos em um elemento de pesquisa chamado “kw_Heading2.” Em seguida, colocamos o texto entre duas palavras-chave consecutivas em um elemento de pesquisa chamado “Segment.” Na versão atual do Advanced Designer, o editor de código está disponível apenas para elementos de pesquisa usados para encontrar entidades nomeadas. Como solução alternativa, para extrair texto como títulos ou segmentos por meio de código, basta criar um elemento de pesquisa para qualquer uma das entidades nomeadas compatíveis (por exemplo, Organization) e inserir o código da regra no editor de código desse elemento.

Regra para extrair títulos de segundo nível no elemento de pesquisa kw_Heading2

// Procura um cabeçalho de segundo nível numerado com até cinco palavras em letras maiúsculas
// O número do cabeçalho pode ser encontrado como um único token: 1.1
[ t1: /\d{1,2}\.\d{1,2}/ ] [ t2: <all_letters_capitalized> ]{1,5}
=>
kw_Heading2( t1 + t2 );
// O número do cabeçalho pode ser encontrado como três tokens separados: 1, ponto, 1
[ t1: /\d{1,2}/ ] [ t2: '.' ] [ t3: /\d{1,2}/ ] [ t4: <all_letters_capitalized> ]{1,5}
=>
kw_Heading2( t1 + t2 + t3 + t4 );

Regra para extrair o segmento no elemento de pesquisa de Segmento

// Encontra o segmento de texto entre dois títulos de seção consecutivos
// Exclui também quaisquer títulos de primeiro nível
[ @kw_Heading2 ] [ interval: ~@kw_Heading2 ~@kw_Heading1 ]+
=>
Root.Segment( interval );

Exemplo

Exemplo de extração de segmentos Neste exemplo, as entradas “3.1 FIRSTLY” e “3.2 SECONDLY” são extraídas para o elemento de pesquisa kw_Heading2 e, em seguida, o texto entre quaisquer duas ocorrências consecutivas do elemento de pesquisa kw_Heading2 é extraído para uma instância do elemento de pesquisa Segment.

Agrupando informações sobre cada entidade

Neste exemplo, as regras de extração são usadas para garantir que os detalhes de cada parte de um acordo sejam agrupados corretamente (ou seja, o nome e o endereço de cada parte pertencem a uma mesma instância de grupo e não são divididos em várias instâncias nem misturados com os detalhes da outra parte). A ideia é encontrar alguma informação de identificação sobre uma parte que sempre apareça primeiro. Há várias maneiras de fazer isso, dependendo de como os acordos são redigidos. Neste exemplo, assumimos que o nome de cada organização sempre vem primeiro, seguido por seu endereço e função no acordo. Portanto, iremos:
  1. Procurar nomes de organizações, criar uma nova instância do elemento de busca de grupo Party_Group para cada nome encontrado e preencher seu elemento de busca filho chamado “Organization_Name”.
  2. Procurar o endereço e a função que estejam a não mais do que, digamos, 20 tokens de cada instância do nome da organização, acessar a instância de Party_Group que é o pai do nome da organização e preencher os elementos de busca filhos chamados “Address” e “Role” nessa instância.
Os dados serão pesquisados apenas dentro do segmento encontrado pela atividade Segmentation e passado para a atividade Extraction Rules como um campo de entrada chamado “Parties_Segment”.

Regra para extrair o elemento de pesquisa Organization_Name

// Localizar o nome da organização e criar uma nova instância de grupo para cada
[ org: @NEROrganization( same ) ~@Party_Group.Organization_Name @Parties_Segment ]+
=>
// Criar uma nova instância de Party_Group e preencher Organization_Name
Party_Group.Organization_Name( org );

Regra para extrair o elemento de busca Address

// Agora procure o endereço que está separado por no máximo 20 tokens
// do nome da organização
// e que ainda não foi atribuído a nenhuma das organizações em Party_Group
[ org: @Party_Group.Organization_Name( same ) ]+
[ ~@NERAddress ]{0,20}
[ t: @NERAddress( same ) ~@Party_Group.Address @Parties_Segment ]+
=>
// Acesse a instância de Party_Group que é o pai do nome da organização
// e preencha seu elemento filho Address
parent( obj( org )).Address( t );

Regra para extrair o elemento de pesquisa de função

// Repita o mesmo para a função
// Para encontrar a função, use palavras-chave
[ org: @Party_Group.Organization_Name( same ) ]+
[ ~("Tenant" | "Landlord" | "Broker") ]{0,20}
[ t: "Tenant" | "Landlord" | "Broker" ~@Party_Group.Role @Parties_Segment ]+
=>
parent( obj( org )).Role( t );

Exemplo

Os elementos de busca serão extraídos da seguinte forma: Example showing grouped data extraction No formulário de dados, você também pode ver que o nome, o endereço e o papel de cada empresa estão agrupados em uma instância de grupo separada: Example showing grouped data fields Os detalhes de cada organização são agrupados, conforme mostrado pelos números da instância entre colchetes.

Encontrando a data e a hora juntas

Neste exemplo, uma regra de extração é usada para localizar uma combinação de hora e data. Primeiro, usamos um elemento de pesquisa chamado “Time” do tipo Valor de expressão regular (a expressão regular usada é [1]?\d:\d{2}\s+(([ap]\.m\.)|([AP]M))?). Em seguida, procuramos uma entidade nomeada Date localizada próxima a ele. Por fim, concatenamos as sequências de tokens encontradas e atribuimos o resultado a um elemento de pesquisa chamado “TimeAndDate”.

Regra para extrair data e hora combinadas

// Use um Valor do elemento de busca por Expressão Regular para encontrar o horário
// Use @NERDate para encontrar uma entidade nomeada de Data próxima ao horário
[ time: @Time ~@TimeAndDate ]+ [ t: ~@NERDate ]{0,3} [ date: @NERDate( same ) ]+
=>
// Combine os valores para escrevê-los em um campo
// Apenas sequências de tokens consecutivas podem ser combinadas, então o token auxiliar também é adicionado
TimeAndDate( time + t + date );

Exemplo

Exemplo de extração de hora e data