OCR + Expressão regular
Ao extrair o texto de imagens com OCR e fazer uso de expressão regular, podemos realizar o autopreenchimento de alguns campos durante a inserção do arquivo no Zeev docs.
O que é OCR
OCR significa Optical Character Recognition, ou seja, Reconhecimento Óptico de Caracteres. Na prática, o OCR faz a leitura de um arquivo e reconhece o texto contido nele. Uma forma de uso poderia ser: você faz uma foto da carteira de identidade e automaticamente o seu nome é preenchido em algum formulário eletrônico.
Benefício do OCR + Expressão regular + Autopreenchimento
Ao extrair o texto de imagens com OCR e fazer uso de expressão regular, podemos realizar o autopreenchimento de alguns campos durante a inserção do arquivo no Zeev docs.
Essa funcionalidade torna mais prático a inserção de documentos dentro do sistema e diminui a chance da falha humana durante o preenchimento, pois o responsável em alguns casos poderá focar em apenas conferir todos os dados.
É possível utilizar um ou mais dos nossos exemplos para configurar o autopreenchimento, ou ainda criar novas expressões regulares para o preenchimento de outros tipos de dados e também para adequar o autopreenchimento da melhor maneira possível ao seu processo.
Nossos exemplos são focados em documentos pessoais, mas você pode utilizar a expressão regular com qualquer tipo de dados, basta refinar a sua expressão para se ajustar ao seu processo.
Exemplo: Autopreenchimento de CPF
Nesse exemplo, utilizando a funcionalidade de OCR + expressão regular, com uma imagem de CPF foi possível extrair o número do CPF, nome e data de nascimento do documento.
Aqui fizemos uso de 3 expressões regulares diferentes, um para cada campo: número do CPF, Nome e Data de nascimento.
Também foram utilizadas variações de chamada da funcionalidade para possibilitar um preenchimento mais assertivo dos dados.
No decorrer desse conteúdo será abordada a parte técnica com mais detalhes, a explicação abaixo mostra de modo simplificado como foram utilizadas as funções para chegar nessa solução com o CPF:
No campo CPF foi utilizado a função que pega exatamente o valor que se enquadra dentro da formatação da expressão regular, ou seja, ao utilizar essa função com uma expressão regular que identifica um número com a formatação do CPF, ele pega exatamente o primeiro valor que se enquadra na formatação.
No campo Nome foi utilizado a função que pega o valor que está logo depois da formatação da expressão regular, ou seja, foi utilizado uma expressão regular que identifica a palavra nome e a função pega o conteúdo que está posicionado logo depois ou abaixo da palavra especificada.
No campo Data de nascimento foi utilizado a função que pega o valor que está mais próximo da formatação da expressão regular, junto disso foi utilizado uma expressão regular que identifica a palavra nascimento e com isso pega o valor de data mais próximo.
Temos algumas expressões pré-prontas para outros tipos de dados de documentos, que podem servir também para auto preencher alguns campos com base em imagens de CNH, RG (para mais de um tipo), título de eleitor, carteira de identidade profissional.
Como configurar
Para fazer uso dessa funcionalidade, o OCR deve estar habilitado para o módulo Carregar documento, você também precisará acessar as configurações desse módulo para adicionar as chamadas de funções que serão executadas para auto preencher os campos. Essas chamadas devem ser adicionadas na aba "Scripts - Cliente".

A imagem acima representa algumas funções adicionadas para extração e autopreenchimento do documento. Cada uma irá identificar os valores necessários para preencher os campos informados nessas funções.
Para isso você precisa:
Possuir o nome real do campo no qual você quer preencher após a extração do texto.
Para conseguir esse nome você deve ir até a aba Campos e verificar na coluna Nome, exemplo na imagem abaixo.

Identificar qual a melhor chamada de função que irá atender a sua necessidade de negócio.
O valor que você quer identificar e auto preencher o campo é um formato exato?
Está próximo de outra palavra ou formato?
Está sempre dentro/entre conteúdos fixos ou está antes ou depois de algum ponto no texto? A maior parte das funções permite você configurar mais de uma expressão regular na mesma função, uma expressão para ter exatamente o formato do valor que que você precisa auto preencher no campo e outras para identificar se está próximo, entre ou antes e depois. Lista de funções para configuração:
AutocompleteController.setValueByRegExpOCR(fieldName, regularExpression, regFlags);
AutocompleteController.setValueNearRegExpOCR(fieldName, regularExpression, nearestOfWord, regFlags);
AutocompleteController.setValueBetweenRegExpOCR(fieldName, regularExpression, betweenPointA, betweenPointB, regFlags);
AutocompleteController.setValueBeforeRegExpOCR(fieldName, regularExpression, beforeWord, regFlags);
AutocompleteController.setValueAfterRegExpOCR(fieldName, regularExpression, afterWord, regFlags)
Criar ou utilizar umas das expressões regulares nessa documentação.
Existem alguns sites que permitem você adicionar um conteúdo em texto e testar a expressão regular durante o processo de criação ou aperfeiçoamento da mesma:
Também é possível achar algumas expressões prontas na internet.
Listamos aqui algumas chamadas de funções pré-preparadas para serem usadas e testadas, nesse caso basta configurar a chamada trocando {NOME_DO_CAMPO} pelo o nome do campo que desejar preencher com a chamada da função. Essas expressões podem e devem ser aprimoradas para que possa atender a demanda de cada respectivo processo:
Obter o número do CPF; AutocompleteController.setValueByRegExpOCR('{NOME_DO_CAMPO}', /[0-9]{3}\.[0-9]{3}\.[0-9]{3} ?\- ?[0-9]{2}/);
Obter valor de data (DD/MM/AAAA) mais próximo da palavra nascimento AutocompleteController.setValueNearRegExpOCR('{NOME_DO_CAMPO}', /([0-2][0-9](3)[0-1])(\/)(((0)[0-9])((1)[0-2]))(\/)\d{4}/, / ?Nasc ?/);
Obter valor do nome do CPF, CNH e também um tipo de RG AutocompleteController.setValueAfterRegExpOCR('{NOME_DO_CAMPO}', /.*$/, /\-? ?NO(NM)E ?\-?/);
Obter valor do nome do título de eleitor AutocompleteController.setValueAfterRegExpOCR('{NOME_DO_CAMPO}', /.*$/, /\-? ?NOME DO ELEITOR ?\-?/);
Obter valor do nome de um segundo tipo de RG AutocompleteController.setValueBetweenRegExpOCR('{NOME_DO_CAMPO}', /.*$/, /([0-2][0-9](3)[0-1])(\/)((\w{3}))(\/)\d{4}\nNOME/, /FILIAÇÃO/);
Obter valor do nome de um terceiro e novo tipo de RG AutocompleteController.setValueBetweenRegExpOCR('{NOME_DO_CAMPO}', /[]+/, / ?NO(NM)E ?\/ ?NA(NM)E ?/, / ?SEXO ?\/ ?SEX ?/);
Obter valor do nome do documento carteira de identidade profissional AutocompleteController.setValueBetweenRegExpOCR('{NOME_DO_CAMPO}', /[]+/, / ?NO(NM)E ?/, / ?CARGO ?/);
Detalhes técnicos da funcionalidade de expressão regular:
Essa parte do conteúdo irá detalhar tecnicamente as chamadas das funções disponíveis na versão atual do sistema, os parâmetros e também dar alguns exemplos de conteúdo.
As funções disponíveis para a execução da expressão regular:
AutocompleteController.setValueByRegExpOCR(fieldName, regularExpression, regFlags);
Comportamento: Essa função irá executar a expressão regular (regularExpression) em todo o texto extraído do documento. A aplicação mais simples dessa função seria, por exemplo, em meio de todo o texto extraído encontrar uma formatação do tipo CNPJ.
(Obrigatório) fieldName: Nome do campo que será preenchido com o valor, caso realizado o Match da expressão regular.
(Obrigatório) regularExpression: Expressão regular que será executada para a realização do match, ela deve ser passada entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Opcional) regFlags: Padrão gmi. Esse campo são as flags/modifiers que podem ser utilizadas junto da expressão regular, seu preenchimento não é obrigatório. Para saber mais sobre as flags/modifiers acesse o link aqui.
Exemplo de chamada (CPF): AutocompleteController.setValueByRegExpOCR('NrCPF', /(([0-9]{3}.[0-9]{3}.[0-9]{3}[ ]?-[ ]?[0-9]{2})([0-9]{11}))/);
AutocompleteController.setValueNearRegExpOCR(fieldName, regularExpression, nearestOfWord, regFlags);
Comportamento: Essa função irá executar a segunda expressão regular (nearestOfWord) dentro de todo o texto para sinalizar um ponto de referência, esse ponto de referência "âncora" será utilizado para comparar a proximidade com os outros resultados encontrados pela outra expressão (regularExpression). Apenas o resultado encontrado mais próximo dessa âncora será adicionado ao valor do campo. A aplicação mais simples dessa função seria, por exemplo, em meio de todo o texto do documento extraído encontrar uma formatação do tipo data, e que essa data seja a data de nascimento. Alguns documentos tal qual CNH possuem várias datas, data de nascimento, data de validade e data primeira habilitação.
(Obrigatório) fieldName: Nome do campo que será preenchido com o valor, caso realizado o Match da expressão regular.
(Obrigatório) regularExpression: Expressão regular que será executada para a realização do match, ela deve ser passada entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Obrigatório) nearestOfWord: Segunda expressão regular desse método, ela que servirá como âncora para o outro parâmetro de expressão regular. O resultado encontrado no match desse parâmetro é quem coloca uma âncora dentro do texto, para sabermos qual o resultado da outra expressão é mais próximo dessa âncora. Esse parâmetro também deve ser passado entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Opcional) regFlags: Padrão gmi. Esse campo são as flags/modifiers que podem ser utilizadas junto da expressão regular, seu preenchimento não é obrigatório. O valor desse parâmetro é aplicado em todas as expressões regulares utilizadas no método. Para saber mais sobre as flags/modifiers acesse o link aqui.
Exemplo de chamada (Data de nascimento): AutocompleteController.setValueNearRegExpOCR('Nascimento', /([0-2][0-9](3)[0-1])(\/)(((0)[0-9])((1)[0-2]))(\/)\d{4}/, / ?Nasc ?/);
AutocompleteController.setValueBetweenRegExpOCR(fieldName, regularExpression, betweenPointA, betweenPointB, regFlags);
Comportamento: Essa função irá executar a segunda expressão regular (betweenPointA) dentro de todo o texto para sinalizar o primeiro ponto de referência "A". Esse ponto de referência servirá como ponto de início, depois será executada a terceira expressão regular (betweenPointB) dentro de todo o texto para sinalizar o segundo ponto de referência "B" e esse será o ponto de término. Após executadas essas duas expressões regulares é separado o texto que se encontra entre o ponto A e B e apenas nessa parte do texto é executada a primeira expressão regular (regularExpression), o resultado de match dessa operação é adicionado como valor do campo indicado.
(Obrigatório) fieldName: Nome do campo que será preenchido com o valor, caso realizado o Match da expressão regular.
(Obrigatório) regularExpression: Expressão regular que será executada para a realização do match, ela deve ser passada entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Obrigatório) betweenPointA: Segunda expressão regular desse método, ela que servirá como ponto de início para que a primeira expressão regular seja aplicada entre dois pontos. Esse parâmetro também deve ser passado entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Obrigatório) betweenPointB: Terceira expressão regular desse método, ela que servirá como ponto de término para que a primeira expressão regular seja aplicada entre dois pontos. Esse parâmetro também deve ser passado entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Opcional) regFlags: Padrão gmi. Esse campo são as flags/modifiers que podem ser utilizadas junto da expressão regular, seu preenchimento não é obrigatório. O valor desse parâmetro é aplicado em todas as expressões regulares utilizadas no método. Para saber mais sobre as flags/modifiers acesse o link aqui.
Exemplo de chamada (Número de registro da CNH): AutocompleteController.setValueBetweenRegExpOCR('NrCNH', /[0-9]/, / ?REGISTRO ?/, / ?OBSERVAÇÕES ?/);
AutocompleteController.setValueBeforeRegExpOCR(fieldName, regularExpression, beforeWord, regFlags);
Comportamento: Essa função irá executar a segunda expressão regular (beforeWord) dentro de todo o texto para sinalizar o ponto de referência de antes e depois, assim será executada a primeira expressão regular (regularExpression) apenas na primeira parte do texto (tudo que vem antes do ponto de referência) e o resultado de match dessa operação é adicionado como valor do campo indicado.
(Obrigatório) fieldName: Nome do campo que será preenchido com o valor, caso realizado o Match da expressão regular.
(Obrigatório) regularExpression: Expressão regular que será executada para a realização do match, ela deve ser passada entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Obrigatório) beforeWord: Segunda expressão regular desse método, ela que servirá como âncora para separar o texto em dois. Esse parâmetro também deve ser passado entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Opcional) regFlags: Padrão gmi. Esse campo são as flags/modifiers que podem ser utilizadas junto da expressão regular, seu preenchimento não é obrigatório. O valor desse parâmetro é aplicado em todas as expressões regulares utilizadas no método. Para saber mais sobre as flags/modifiers acesse o link aqui.
Exemplo de chamada (Data no início do texto): AutocompleteController.setValueBeforeRegExpOCR('Data', /([0-2][0-9](3)[0-1])(\/)(((0)[0-9])((1)[0-2]))(\/)\d{4}/, / ? contrato ?/);
AutocompleteController.setValueAfterRegExpOCR(fieldName, regularExpression, afterWord, regFlags);
Comportamento: Essa função irá executar a segunda expressão regular (afterWord) dentro de todo o texto para sinalizar o ponto de referência de antes e depois, assim será executada a primeira expressão regular (regularExpression) apenas na segunda parte do texto (tudo que vem depois do ponto de referência) e o resultado de match dessa operação é adicionado como valor do campo indicado.
(Obrigatório) fieldName: Nome do campo que será preenchido com o valor, caso realizado o Match da expressão regular.
(Obrigatório) regularExpression: Expressão regular que será executada para a realização do match, ela deve ser passada entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Obrigatório) afterWord: Segunda expressão regular desse método, ela que servirá como âncora para separar o texto em dois. Esse parâmetro também deve ser passado entre duas barras /{aqui}/ sem aspas, pode conferir no exemplo mais abaixo.
(Opcional) regFlags: Padrão gmi. Esse campo são as flags/modifiers que podem ser utilizadas junto da expressão regular, seu preenchimento não é obrigatório. O valor desse parâmetro é aplicado em todas as expressões regulares utilizadas no método. Para saber mais sobre as flags/modifiers acesse o link aqui.
Exemplo de chamada (Nome no título de eleitor): AutocompleteController.setValueAfterRegExpOCR('Nome', /.*$/, /\-? ?NOME DO ELEITOR ?\-?/);