pd3f-core
Experimental, use com cuidado.
pd3f-core
é um pacote Python para reconstruir o texto contínuo original de PDFs com modelos de linguagem. pd3f-core
assume que seu PDF é baseado em texto ou já é OCRd. pd3f-core
está no centro do pd3f: um pipeline completo de extração de texto baseado em Docker (incluindo OCR).
pd3f-core
primeiro usa o Parsr para dividir PDFs em linhas e parágrafos. Em seguida, ele usa o pacote Python dehyphen para reconstruir os parágrafos da maneira mais provável. A probabilidade é derivada calculando a perplexidade com os modelos de linguagem baseados em caracteres de Flair. Hífens desnecessários são removidos, espaços ou novas linhas são mantidos ou eliminados dependendo das palavras ao redor.
Foi desenvolvido principalmente para alemão, mas também deve funcionar com outros idiomas. O projeto ainda está em fase inicial. Espere arestas e mudanças rápidas.
Documentação da API do pd3f-core: https://pd3f.github.io/pd3f-core/index.html
Documentação do pd3f (o): https://pd3f.com/docs/
Verifique se duas linhas podem ser unidas removendo os hífens ('-').
Decida entre adicionar um espaço simples (' ') ou uma nova linha ('n') ao unir linhas.
Verifique se o último parágrafo de uma página e o primeiro parágrafo da página seguinte podem ser unidos.
Para juntar parágrafos (e inverter quebras de página), detecte notas de rodapé e transforme-as em notas finais. Por enquanto, as notas de rodapé são colocadas no final de um arquivo.
Se o cabeçalho ou rodapé for igual para todas as páginas, exiba-os apenas uma vez. Os cabeçalhos são puxados para o início do documento e o rodapé para o final. Algumas heurísticas baseadas na semelhança dos rodapés são usadas. (Distância Jaccard para texto e compare formas sobrepostas)
pip install pd3f
ou
poetry add pd3f
Inicie uma instância local do Parsr:
docker-compose up
(Você também pode usar o encapsulamento de uma instância remota do Parsr (script) ou escolher um endereço remoto.)
from pd3f import extract
text , tables = extract ( file_path , tables = False , experimental = False , force_gpu = False , lang = "multi" , fast = False , parsr_location = "localhost:3001" )
Explicações dos parâmetros nos documentos: https://pd3f.github.io/pd3f-core/export.html#pd3f.export.extract
Usar CUDA acelera a avaliação com Flair. Mas você precisa de uma GPU (cara). Você precisa configurar sua GPU com CUDA. Aqui está um guia para Ubuntu 18.04
conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
(exemplo)pd3f-core
com poesia: poetry add pd3f
A poesia percebe que é executada em um ambiente virtual conda, portanto não cria um novo. Como configurar o CUDA é difícil, instale-o da maneira mais fácil (com conda).
No centro do pd3f-core
está a saída JSON do Parsr. Alguns comentários sobre como e por que certas coisas foram escolhidas. Documentação do Parsr sobre os diferentes módulos
Parsr possui vários módulos para classificar parágrafos em determinados tipos. Eles oferecem detecções de lista, bem como detecção de rumo. Na minha experiência, a precisão é muito baixa para ambos, por isso não a usamos no momento. Isso também significa que todo o texto extraído (saída) é simples (sem títulos, formatações diferentes, etc.).
Ativamos Desenho + Detecção de Imagem porque podemos precisar entender qual parágrafo segue qual outro. Isso pode ser útil na hora de decidir se deseja juntar parágrafos. Mas cai ao ativar a configuração fast
.
Na saída JSON há um campo pageNumber
. Isso vem do módulo de detecção de página. Portanto, pageNumber
é derivado do cabeçalho/rodapé de cada página. Portanto, pode ser diferente do índice na matriz de páginas. Não retransmita pageNumber
na saída JSON.
words-to-line-new
foi usado assim. Não há erro, mas a precisão diminui se for usada de outra forma.
" words-to-line-new " ,
[
" reading-order-detection " ,
Não faça OCR com Parsr porque os resultados são piores que o OCRmyPDF (porque este último usa pré-processamento de imagem).
Instale e use poesia.
Licença Pública Geral Affero 3.0