Extrair texto de PDF: camadas de texto e OCR
Alguns PDFs entregam o texto em um segundo; outros contêm só imagens das páginas e precisam de OCR. Este guia explica como o texto é guardado em um PDF, por que o texto extraído pode sair ilegível ou fora de ordem, como o OCR lê páginas digitalizadas e o que afeta a precisão dele, e o que conferir antes de confiar no resultado.
Dois tipos de página de PDF
Uma página de PDF pode conter texto de duas formas. A maioria dos PDFs exportados de um processador de texto, de um navegador ou de um programa de design tem uma camada de texto: cada caractere é guardado como um código de uma fonte e posicionado em um ponto da página. Uma página digitalizada ou fotografada é diferente. Ela é uma única imagem da página, e para o software as letras nela são apenas pixels.
| Tipo de página | Como foi criada | O que a extração retorna |
|---|---|---|
| PDF de texto | Exportado ou impresso em PDF a partir de um aplicativo | Os caracteres guardados, em geral exatamente |
| PDF digitalizado | Scanner, câmera do celular ou fax | Nada, até o OCR ler a imagem |
| Digitalização pesquisável | Uma digitalização com uma camada de texto de OCR adicionada depois | Aquele resultado de OCR, com os erros dele |
| Texto convertido em contornos | Texto transformado em formas em um programa de design | Nenhum caractere; só o OCR consegue ler |
Um leitor de PDF costuma mostrar de que tipo é a página. Se você consegue selecionar uma única palavra ou encontrá-la pela busca, a página tem camada de texto. Se, ao arrastar, a página inteira é selecionada como um bloco, ou a busca não encontra nada, a página é uma imagem. Um mesmo arquivo pode misturar os dois, como um relatório digitado com anexos digitalizados.
Como funciona a extração da camada de texto
Um PDF não guarda parágrafos. Ele guarda trechos de caracteres, cada um com uma fonte e uma posição, muitas vezes uma palavra ou algumas letras por vez, na ordem escolhida pelo programa que criou o arquivo. Um extrator lê esses trechos e reconstrói as linhas a partir das posições.
A ferramenta PDF para texto do LeedyBox lê os trechos com o PDF.js, o mecanismo de PDF do Firefox. Ela começa uma nova linha quando a posição vertical muda mais de 5 pontos (cerca de 1,8 mm) e, caso contrário, junta os trechos com um espaço; cada página do resultado começa com uma marca como --- Página 1 ---. A maioria dos documentos de uma coluna sai legível, com alguns efeitos colaterais:
- Uma palavra guardada em vários trechos, por exemplo por causa do espaçamento entre letras, pode sair com espaços no meio.
- Colunas, quadros laterais e legendas aparecem na ordem em que estão guardados, que pode ser diferente da ordem de leitura.
- Sobrescritos, chamadas de nota e outros textos acima ou abaixo da linha podem virar uma linha própria.
- Cabeçalhos, rodapés e números de página fazem parte do texto de cada página.
Por que o texto extraído pode sair ilegível
Dentro de um PDF, o texto é guardado como códigos de glifos de uma fonte, e não como caracteres Unicode. Para transformar os códigos de volta em letras, o arquivo precisa de uma tabela de correspondência. PDFs bem feitos incluem uma tabela ToUnicode para cada fonte, e fontes com codificação padrão podem ser decodificadas sem ela. O problema surge quando uma fonte é incorporada como subconjunto, com numeração própria e sem tabela: os códigos não significam nada fora do arquivo, e a extração produz letras erradas, símbolos ou quadradinhos vazios, mesmo que a página pareça normal.
Fontes chinesas, japonesas e coreanas costumam usar mapas de caracteres predefinidos (CMaps), como Adobe-Japan1 ou Adobe-Korea1, em vez de tabelas próprias. A ferramenta do LeedyBox carrega esses CMaps junto com o PDF.js, o que resolve muitos documentos do Leste Asiático que extratores mais simples leem errado. Outras causas comuns são ligaduras, como fi guardado em um único glifo, fontes Type 3, cujas letras são desenhadas como formas e muitas vezes não têm tabela, e PDFs com a codificação embaralhada de propósito para dificultar a cópia.
Quando a página tem camada de texto, a ferramenta usa essa camada, mesmo que o texto esteja ilegível, e não executa o OCR naquela página. Para ler uma página assim com OCR, converta-a em imagem com PDF para JPG e leia a imagem com Imagem para texto (OCR).
Quando a ferramenta do LeedyBox usa OCR
A ferramenta decide página por página. Se a camada de texto de uma página tiver menos de 15 caracteres, a página é desenhada como imagem no dobro do tamanho normal, cerca de 144 pixels por polegada, e lida pelo Tesseract.js no idioma escolhido em "Idioma do OCR" junto com o inglês. Assim, em um documento com páginas digitadas e páginas digitalizadas, as digitadas são lidas exatamente e só as digitalizações passam pelo OCR.
Uma página digitalizada com poucos caracteres de um carimbo ou de um número de página continua sendo considerada vazia e passa pelo OCR. Uma digitalização que já tem uma camada de texto com 15 caracteres ou mais não passa, então uma camada de OCR ruim adicionada pelo scanner sai do jeito que está. O mecanismo de OCR e os dados de idioma são baixados de leedybox.com na primeira vez que o OCR roda, por isso a primeira página digitalizada demora mais. O seu PDF é lido no navegador e não é enviado a nenhum servidor.
Como o OCR transforma pixels em texto
O OCR trabalha em etapas. O mecanismo primeiro converte a imagem em preto e branco e encontra blocos de texto, linhas e palavras, uma etapa chamada segmentação da página. Depois, uma rede neural treinada para um idioma ou sistema de escrita lê cada linha e escolhe a sequência de caracteres mais provável, com a ajuda das listas de palavras do idioma. O resultado é uma estimativa, não uma cópia: formas parecidas como 0 e O, 1, l e I, ou rn e m podem ser confundidas, e palavras que não estão nos dados do idioma são lidas errado com mais frequência.
A escolha do idioma importa mais do que qualquer outra opção. Um modelo treinado com letras latinas não consegue ler tailandês nem japonês, e um texto em um idioma não selecionado costuma sair com caracteres errados. Todas as opções da ferramenta do LeedyBox, exceto "Somente inglês", combinam o idioma escolhido com o inglês, o que ajuda em documentos mistos, como um contrato em português com nomes de produtos em inglês.
O que afeta a precisão do OCR
| Fator | Efeito | O que ajuda |
|---|---|---|
| Resolução | Letras pequenas perdem os detalhes que diferenciam uma da outra | Digitalizar a 300 DPI ou mais; mais ainda para letras pequenas |
| Inclinação e curvatura | Linhas tortas e páginas curvas de livros atrapalham a detecção das linhas | Digitalizar plano e reto; fotografar bem de cima |
| Contraste e ruído | Fundos cinza, manchas, verso aparecendo e artefatos de JPEG parecem traços | Digitalizações limpas, com texto escuro sobre fundo branco |
| Fontes | Fontes decorativas, muito finas ou muito grossas são lidas errado com mais frequência | Conferir o resultado com cuidado |
| Letra de mão | O Tesseract é treinado com texto impresso | Esperar resultados ruins; melhor digitar |
| Texto vertical | Japonês ou chinês na vertical costuma ser lido errado | Conferir com cuidado ou redigitar |
Como a ferramenta desenha as páginas a cerca de 144 pixels por polegada, letras pequenas, como notas de rodapé ou as letras miúdas de um contrato, podem ser difíceis de ler mesmo em uma boa digitalização. Para essas páginas, o PDF para JPG gera imagens em resolução maior, e o Imagem para texto (OCR) pode ler textos pequenos de novo com o dobro do tamanho e aumentar o contraste antes do reconhecimento.
Tabelas, colunas e layout
O resultado é texto simples. Tabelas perdem a grade, páginas com várias colunas podem sair coluna por coluna ou linha por linha atravessando as colunas, e caixas de texto e legendas ficam onde o arquivo ou o mecanismo de OCR as colocou na ordem de leitura. Reconhecer palavras e reconstruir um layout são problemas diferentes, e a ferramenta resolve só o primeiro. Em tabelas de números, confira cada valor com o original ou redigite a tabela em uma planilha; em documentos longos, reconstrua títulos e parágrafos no seu editor depois de extrair o texto.
Conferir e limpar o resultado
- Compare alguns números, nomes e datas com o original; erros de OCR em números passam despercebidos com facilidade.
- Procure as confusões típicas: 0 e O, 1, l e I, 5 e S, rn e m, além de acentos e cedilhas que faltem.
- Junte de novo as palavras separadas por hífen no fim da linha e as linhas quebradas dentro dos parágrafos.
- Remova as marcas de página, os cabeçalhos e os números de página se precisar de um texto contínuo.
- Guarde o resultado com "Copiar texto" ou "Salvar como .TXT"; o arquivo salvo é texto simples em UTF-8.
Perguntas frequentes
Por que uma página sai vazia?
A página não tinha camada de texto e o OCR não encontrou nada que conseguisse ler: a digitalização pode estar em branco, muito clara ou pequena demais, ou o texto pode ser manuscrito. Tente uma digitalização mais nítida, ou converta a página com PDF para JPG e use Imagem para texto com as opções de contraste e ampliação.
A ferramenta lê PDFs protegidos por senha?
Não lê um PDF que pede senha para abrir; nesse caso, mostra um erro. Se você tiver autorização, abra o arquivo com a senha em um leitor de PDF e salve antes uma cópia sem proteção.
A ferramenta cria um PDF pesquisável?
Não. O resultado é texto simples que você pode copiar ou salvar como arquivo .txt, e o PDF em si não é alterado. Programas que criam PDFs pesquisáveis adicionam uma camada de texto de OCR invisível sobre cada página digitalizada.
Por que o OCR é lento em documentos longos?
Cada página digitalizada é desenhada como imagem e reconhecida no seu navegador, uma depois da outra, depois que o mecanismo de OCR e os dados de idioma são baixados. Uma página pode levar alguns segundos ou mais em um aparelho mais lento. Páginas com camada de texto são bem mais rápidas porque não precisam de reconhecimento.