Como extrair texto de um PDF? [fechado]
alguém pode recomendar uma biblioteca / API para extrair o texto e as imagens de um PDF? Precisamos ser capazes de obter o texto que está contido em regiões pré-conhecidas do documento, de modo que a API terá que nos dar informações posicionais de cada elemento na página.
gostaríamos que esses dados fossem dados no formato xml
ou json
. Estamos atualmente olhando para PdfTextStream que parece muito bom, mas gostaria de ouvir experiências de outras pessoas e sugestao.
Existem alternativas (comerciais ou gratuitas) para extrair texto de um pdf programaticamente?
15 answers
Deram - me um ficheiro pdf de 400 páginas com uma tabela de dados que tive de importar-felizmente nenhuma imagem. Ghostscript trabalhou para mim:
gswin64c -sDEVICE=txtwrite -o output.txt input.pdf
O ficheiro de saída foi dividido em páginas com cabeçalhos, etc., mas foi então fácil escrever um aplicativo para remover linhas em branco, etc, e sugar em todos os 30.000 registros. -dSIMPLE
e -dCOMPLEX
não fizeram diferença neste caso.
Desde hoje que sei: a melhor coisa para a extracção de texto a partir de PDFs é TET, a caixa de ferramentas de extracção de texto. O TET faz parte da PDFlib.com família de produtos.
PDFlib.com é a empresa do Thomas Merz. No caso de você não reconhecer seu nome: Thomas Merz é o autor da "Bíblia PostScript e PDF".
A primeira encarnação de TET é uma biblioteca. Que se pode provavelmente fazer tudo o que Budda006 queria, incluindo posicional informações sobre cada elemento da página. E também pode extrair imagens. Recombina imagens que são fragmentadas em pedaços.Pdflib.com também oferece outra encarnação desta tecnologia, o TET plugin do Acrobat. E a terceira encarnação é a PDFlib TET iFilter. Esta é uma ferramenta autônoma para os desktops do Usuário. Ambos são gratuitos (como na cerveja) para uso privado, não-comercial.
E é muito poderoso. Forma melhor do que a extracção de texto do Adobe. Ele extraía texto para mim, onde Outras ferramentas (incluindo a do Adobe) só cuspiam lixo.Acabei de testar a ferramenta 'desktop standalone', e o que dizem na sua página web é verdade. Tem uma linha de comando muito boa. Alguns dos meus "problemáticos" arquivos de teste PDF a ferramenta manuseada para minha satisfação total.
A partir de agora, esta coisa será a minha recomendação para todos os requisitos sofisticados e desafiadores de extração de texto PDF.TET is simplesmente incrível. Detecta mesas. Dentro das tabelas, identifica células que abrangem várias colunas. Identifica as linhas da tabela e o conteúdo de cada célula da tabela separadamente. Lida muito bem com hífenações: remove hífens e restaura palavras completas. Ele suporta línguas não-ASCII (incluindo CJK, árabe e hebraico). Ao encontrar ligaduras, restaura os personagens originais...
Experimenta.Uma ferramenta eficiente de linha de comandos, open source, livre de qualquer taxa, Disponível em ambos linux & windows : simplesmente chamado pdftotext. Esta ferramenta faz parte da biblioteca xpdf.
Para python, existe PDFMiner e pyPDF2. Para mais informações sobre estes, veja o Módulo Python para converter PDF para text .
Https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/v2/reference/files/get
Porque é uma API de descanso, é compatível com toda a programação idioma. Os links que eu postei aboove têm exemplos de trabalho para muitas linguagens, incluindo: Java,. net, Python, PHP, Ruby, e outros.
Espero que ajude.PdfTextStream (que você disse que estava olhando) é agora livre para aplicações de simples threaded. Na minha opinião, a sua qualidade é muito melhor do que as outras bibliotecas (esp. para coisas como fontes embutidas funky, etc).
Em alternativa, deve dar uma vista de olhos a Apache PDFBox, open source.
Docótico.Pdf library may be used to extract text from PDF files as plain text or as a collection of text chunks with coordinates for each chunk.
Docótico.Pdf can be used to extract images from PDFs , too. Disclaimer: eu trabalho para Bit Miracle.gs \
-q \
-dNODISPLAY \
-dSAFER \
-dDELAYBIND \
-dWRITESYSTEMDICT \
-dSIMPLE \
-f ps2ascii.ps \
"${input}" \
-dQUIET \
-c quit
Usei dSIMPLE
em vez de dCOMPLEX
porque este último produz 1 carácter por linha.
Declaração de exoneração de Responsabilidade: trabalho para a ByteScout
Como a questão é especificamente sobre alternativas de ferramentas para obter dados a partir de PDF como XML, então você pode estar interessado em dar uma olhada na ferramenta comercial "ByteScout PDF Extrator SDK" que é capaz de fazer exatamente isto: extrair texto de PDF como XML, juntamente com os dados de posicionamento (x,y) e a fonte de informação:
Texto na fonte PDF:
Products | Units | Price
Saída XML:
<row>
<column>
<text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text>
</column>
<column>
<text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text>
</column>
<column>
<text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text>
</column>
</row>
P. S.: além disso, ele também quebra o texto em uma estrutura baseada em tabela.
Para a extracção de imagens, o pdfimages é uma ferramenta de linha de comandos Livre Para Linux ou Windows (win32):
Pdfimages: extrair e gravar imagens de um ficheiro Portable Document Format ( PDF )
O Apache pdfbox tem esta funcionalidade - a parte do texto está descrita em:
Http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/PDFTextStripper.html
Por exemplo, implementação, ver https://github.com/WolfgangFahl/pdfindexer
O testcase TestPdfIndexer.testExtracting mostra como funciona
A melhor coisa que consigo pensar de momento (dentro da lista de ferramentas "simples") é Ghostscript (a versão actual é v. 8.71) e o programa utilitário PostScript ps2ascii.ps
. O Ghostscript envia - o na sua sub-pasta lib
. Tente isto (no Windows):
gswin32c.exe ^
-q ^
-sFONTPATH=c:/windows/fonts ^
-dNODISPLAY ^
-dSAFER ^
-dDELAYBIND ^
-dWRITESYSTEMDICT ^
-dCOMPLEX ^
-f ps2ascii.ps ^
-dFirstPage=3 ^
-dLastPage=7 ^
input.pdf ^
-dQUIET ^
-c quit
Este comando processa páginas 3-7 de input.pdf
. Leia os comentários no Arquivo ps2ascii.ps
para ver o que significam os números "estranhos" e informações adicionais (Eles indicam strings, posições, larguras, cores, imagens, retângulos, fontes e quebras de página...). Para obter uma saída de texto" simples", substitua a parte -dCOMPLEX
por -dSIMPLE
.
Http://www.quickpdflibrary.com eles têm um julgamento de 30 dias.