A maioria dos extratores de PDF usa a API errada

A maioria das ferramentas de PDF usa a fonte de dados errada.

Quando os desenvolvedores falam sobre extração de PDF, eles geralmente se referem ao getTextContent(). Este método fornece itens de texto e suas posições. É o padrão para quase todas as ferramentas baseadas em navegador.

Mas o getTextContent() é uma visualização processada. É uma versão simplificada do que está realmente disponível.

Existem três níveis de dados no PDF.js:

• getStructTree(): Isso informa o que o documento significa. Contém tabelas, cabeçalhos e fórmulas. • getOperatorList(): Isso informa o que o documento desenha. Inclui linhas, caminhos e formas. • getTextContent(): Esta é uma visualização filtrada do que o documento desenha.

A maioria das ferramentas usa a terceira opção. Isso funciona para 80% dos documentos, como relatórios simples. No entanto, falha em artigos acadêmicos e publicações complexas.

Usar apenas o getTextContent() cria quatro problemas principais:

  • Você perde as estruturas das tabelas. Você tem que adivinhar onde as células estão com base nas posições do texto.
  • Você quebra equações matemáticas. Equações LaTeX frequentemente aparecem como blocos de texto únicos e gigantes.
  • Você perde as linhas das colunas. Muitos layouts usam linhas reais para separar colunas. Essas linhas não existem no conteúdo de texto.
  • Você obtém a ordem de leitura errada. O texto frequentemente aparece na ordem em que foi desenhado, não como um humano o lê.

A maneira correta de construir um processador de PDF é um sistema de três camadas:

  1. Verifique o getStructTree() primeiro. Se o documento tiver uma estrutura lógica, use-o para encontrar tabelas e cabeçalhos imediatamente.
  2. Verifique o getOperatorList() em seguida. Use linhas e caminhos explícitos para encontrar os limites das colunas.
  3. Use o getTextContent() como fallback. Use matemática geométrica apenas quando as duas primeiras camadas não fornecerem dados.

Essa abordagem não significa mais trabalho. As camadas 1 e 2 funcionam como saídas rápidas. Se o documento estiver bem estruturado, você pula a matemática complexa. Você só usa inferência complexa quando o documento não possui tags.

Esta arquitetura lida tanto com arquivos corporativos simples quanto com artigos científicos complexos.

Fonte: https://dev.to/bonzai2carn/most-pdf-extractors-use-the-wrong-api-heres-what-we-built-instead-5dgh