Procure um arquivo PDF ou arraste-o aqui

Os dados do arquivo são usados localmente e nunca saem do seu navegador

Resultados da Análise do Currículo

Perfil
Nome
Email
Telefone
Localização
Link
Resumo
Educação
Instituição
Grau
Média
Data
Descrições
Experiência Profissional
Empresa
Cargo
Data
Descrições
Habilidades
Descrições

Mergulho Profundo no Algoritmo do Analisador

Para os curiosos técnicos, esta seção mergulha no algoritmo do analisador CVAts e percorre os 4 passos de como ele funciona. (Note que o algoritmo foi projetado para analisar currículos de coluna única em português e inglês)

Passo 1. Ler os itens de texto de um arquivo PDF

Um arquivo PDF é um formato de arquivo padronizado definido pela especificação ISO 32000. Quando você abre um arquivo PDF usando um editor de texto, notará que o conteúdo bruto parece codificado e é difícil de ler. Para exibi-lo em um formato legível, você precisaria de um leitor de PDF para decodificar e visualizar o arquivo. Da mesma forma, o analisador de currículos primeiro precisa decodificar o arquivo PDF para extrair seu conteúdo de texto.

Embora seja possível escrever uma função personalizada de leitura de PDF seguindo a especificação ISO 32000, é muito mais simples aproveitar uma biblioteca existente. Neste caso, o analisador de currículos usa a biblioteca de código aberto pdf.js da Mozilla para primeiro extrair todos os itens de texto no arquivo.

A tabela abaixo lista 0 itens de texto que são extraídos do PDF do currículo adicionado. Um item de texto contém o conteúdo de texto e também alguns metadados sobre o conteúdo, por exemplo, suas posições x, y no documento, se a fonte está em negrito ou se inicia uma nova linha. (Note que a posição x,y é relativa ao canto inferior esquerdo da página, que é a origem 0,0)

#Conteúdo de TextoMetadados

Passo 2. Agrupar itens de texto em linhas

Os itens de texto extraídos ainda não estão prontos para usar e têm 2 problemas principais:

Problema 1: Eles têm alguns ruídos indesejados.Alguns itens de texto únicos podem ser quebrados em múltiplos, como você pode observar na tabela acima, por exemplo, um número de telefone "(11) 98765-4321" pode ser quebrado em 3 itens de texto "(11) 98765", "-" e "4321".

Solução: Para resolver este problema, o analisador de currículos conecta itens de texto adjacentes em um único item de texto se a distância entre eles for menor que a largura média típica de caractere, onde Distance = RightTextItemX₁ - LeftTextItemX₂ A largura média típica de caractere é calculada dividindo a soma das larguras de todos os itens de texto pelo número total de caracteres dos itens de texto (Textos em negrito e elementos de nova linha são excluídos para não distorcer os resultados).

Problema 2: Eles carecem de contextos e associações.Quando lemos um currículo, escaneamos linha por linha. Nossos cérebros podem processar cada seção por meio de pistas visuais como negrito e proximidade dos textos, onde podemos rapidamente associar textos mais próximos como um grupo relacionado. No entanto, os itens de texto extraídos atualmente não têm esses contextos/associações e são apenas elementos desconexos.

Solução: Para resolver este problema, o analisador de currículos reconstrói esses contextos e associações de forma similar a como nosso cérebro leria e processaria o currículo. Primeiro agrupa os itens de texto em linhas, já que lemos texto linha por linha. Em seguida, agrupa linhas em seções, o que será discutido no próximo passo.

No final do passo 2, o analisador de currículos extrai 0 linhas do PDF do currículo adicionado, conforme mostrado na tabela abaixo. O resultado é muito mais legível quando exibido em linhas. (Algumas linhas podem ter múltiplos itens de texto, que são separados por um divisor vertical azul  | )

LinhasConteúdo da Linha

Passo 3. Agrupar linhas em seções

No passo 2, o analisador de currículos começa a construir contextos e associações aos itens de texto agrupando-os primeiro em linhas. O Passo 3 continua o processo para construir associações adicionais agrupando linhas em seções.

Note que cada seção (exceto a seção de perfil) começa com um título de seção que ocupa toda a linha. Este é um padrão comum não apenas em currículos, mas também em livros e blogs. O analisador de currículos usa este padrão para agrupar linhas no título de seção mais próximo acima dessas linhas.

O analisador de currículos aplica algumas heurísticas para detectar um título de seção. A principal heurística para determinar um título de seção é verificar se ele preenche todas as 3 seguintes condições:
1. É o único item de texto na linha
2. Está em negrito
3. Suas letras estão todas em MAIÚSCULAS

Em palavras simples, se um item de texto é duplamente enfatizado para estar em negrito e maiúsculas, é muito provável que seja um título de seção em um currículo. Isso geralmente é verdade para um currículo bem formatado. Pode haver exceções, mas provavelmente não é um bom uso de negrito e maiúsculas nesses casos.

O analisador de currículos também tem uma heurística de fallback se a heurística principal não se aplicar. A heurística de fallback principalmente realiza uma correspondência de palavras-chave contra uma lista de palavras-chave comuns de títulos de seção de currículo.

No final do passo 3, o analisador de currículos identifica as seções do currículo e agrupa essas linhas com o título de seção associado, conforme mostrado na tabela abaixo. Note que os títulos de seção estão em negrito e as linhas associadas à seção são destacadas com as mesmas cores.

LinhasConteúdo da Linha

Passo 4. Extrair currículo das seções

O Passo 4 é o último passo do processo de análise de currículo e também é o núcleo do analisador de currículos, onde ele extrai informações do currículo das seções.

Sistema de Pontuação de Recursos

A essência do motor de extração é um sistema de pontuação de recursos. Cada atributo de currículo a ser extraído tem um conjunto de recursos personalizados, onde cada conjunto de recursos consiste em uma função de correspondência de recursos e uma pontuação de correspondência de recursos se corresponder (a pontuação de correspondência de recursos pode ser um número positivo ou negativo). Para calcular a pontuação final de recursos de um item de texto para um atributo de currículo específico, ele executaria o item de texto através de todos os seus conjuntos de recursos e somaria as pontuações de recursos correspondentes. Este processo é realizado para todos os itens de texto dentro da seção, e o item de texto com a maior pontuação de recursos calculada é identificado como o atributo de currículo extraído.

Como demonstração, a tabela abaixo mostra 3 atributos de currículo na seção de perfil do PDF do currículo adicionado.

Atributo de CurrículoTexto (Maior Pontuação de Recurso)Pontuações de Recursos de Outros Textos
Nome
Email
Telefone

Conjuntos de Recursos

Tendo explicado o sistema de pontuação de recursos, podemos mergulhar mais em como os conjuntos de recursos são construídos para um atributo de currículo. Ele segue 2 princípios:
1. Os conjuntos de recursos de um atributo de currículo são projetados em relação a todos os outros atributos de currículo dentro da mesma seção.
2. Os conjuntos de recursos de um atributo de currículo são criados manualmente com base em suas características e probabilidade de cada característica.

A tabela abaixo lista alguns dos conjuntos de recursos para o atributo de currículo nome. Ela contém função de recurso que corresponde ao atributo nome com pontuação de recurso positiva e também função de recurso que corresponde apenas a outros atributos de currículo na seção com pontuação de recurso negativa.

Conjuntos de Recursos de Nome
Função de RecursoPontuação de Correspondência
Contém apenas letras, espaços ou pontos+3
Está em negrito+2
Contém todas as letras maiúsculas+2
Contém @-4 (corresponde email)
Contém número-4 (corresponde telefone)
Contém ,-4 (corresponde endereço)
Contém /-4 (corresponde url)

Função de Recurso Principal

Cada atributo de currículo tem múltiplos conjuntos de recursos. Eles podem ser encontrados no código-fonte na pasta extract-resume-from-sections e não vamos listá-los todos aqui. Cada atributo de currículo geralmente tem uma função de recurso principal que os identifica amplamente, então vamos listar a função de recurso principal abaixo.

Atributo de CurrículoFunção de Recurso PrincipalRegex
NomeContém apenas letras, espaços ou pontos/^[a-zA-Z\s\.]+$/
EmailCorresponde formato de email xxx@xxx.xxx
xxx pode ser qualquer coisa que não seja espaço
/\S+@\S+\.\S+/
TelefoneCorresponde formato de telefone (xxx)-xxx-xxxx
() e - são opcionais
/\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}/
LocalizaçãoCorresponde formato cidade e estado Cidade, UF/[A-Z][a-zA-Z\s]+, [A-Z]{2}/
UrlCorresponde formato de url xxx.xxx/xxx/\S+\.[a-z]+\/\S+/
InstituiçãoContém palavra-chave de escola, ex: Faculdade, Universidade, Escola
GrauContém palavra-chave de grau, ex: Técnico, Graduação, Mestrado
MédiaCorresponde formato de média x.xx/[0-4]\.\d{1,2}/
DataContém palavra-chave de data relacionada a ano, mês, estações ou a palavra PresenteAno: /(?:19|20)\d{2}/
CargoContém palavra-chave de cargo, ex: Analista, Engenheiro, Estagiário
EmpresaEstá em negrito ou não corresponde cargo e data
ProjetoEstá em negrito ou não corresponde data

Caso Especial: Subseções

A última coisa que vale a pena mencionar são as subseções. Para a seção de perfil, podemos passar diretamente todos os itens de texto para os sistemas de pontuação de recursos. Mas para outras seções, como educação e experiência profissional, temos que primeiro dividir a seção em subseções, já que pode haver múltiplas escolas ou experiências de trabalho na seção. O sistema de pontuação de recursos então processa cada subseção para recuperar os atributos de currículo de cada uma e anexar os resultados.

O analisador de currículos aplica algumas heurísticas para detectar uma subseção. A principal heurística para determinar uma subseção é verificar se o espaço vertical entre 2 linhas é maior que o espaço de linha típico * 1.4, já que um currículo bem formatado geralmente cria uma nova quebra de linha vazia antes de adicionar a próxima subseção. Também há uma heurística de fallback se a heurística principal não se aplicar para verificar se o item de texto está em negrito.

E isso é tudo sobre o algoritmo do analisador CVAts :)