Existe algum módulo python para converter arquivos PDF em texto? Eu tentei um pedaço de código encontrado no Activestate que usa pypdf, mas o texto gerado não tinha espaço entre e era inútil.
385
Existe algum módulo python para converter arquivos PDF em texto? Eu tentei um pedaço de código encontrado no Activestate que usa pypdf, mas o texto gerado não tinha espaço entre e era inútil.
Respostas:
Experimente o PDFMiner . Ele pode extrair texto de arquivos PDF no formato HTML, SGML ou "PDF marcado".
O formato PDF marcado parece ser o mais limpo, e remover as tags XML deixa apenas o texto simples.
Uma versão do Python 3 está disponível em:
fonte
O pacote PDFMiner mudou desde a publicação do código .
EDIT (novamente):
O PDFMiner foi atualizado novamente na versão
20100213
Você pode verificar a versão que instalou com o seguinte:
Aqui está a versão atualizada (com comentários sobre o que eu alterei / adicionei):
Editar (mais uma vez):
Aqui está uma atualização para a versão mais recente em pypi ,
20100619p1
. Em suma, eu substituídoLTTextItem
comLTChar
e passou uma instância de LAParams para o construtor CsvConverter.EDIT (mais uma vez):
Atualizado para a versão
20110515
(graças ao Oeufcoque Penteano!):fonte
LTTextItem
paraLTChar
. unixuser.org/~euske/python/pdfminer/index.html#changes20110515
por seu comentário.Como nenhuma dessas soluções suporta a versão mais recente do PDFMiner, escrevi uma solução simples que retornará o texto de um pdf usando o PDFMiner. Isso funcionará para aqueles que estão recebendo erros de importação com
process_pdf
Veja abaixo o código que funciona para Python 3:
fonte
python3
, além dos parênteses óbvias após oprint
comando, é preciso substituir ofile
comando comopen
e importaçãoStringIO
do pacoteio
Pdftotext Um programa de código aberto (parte do Xpdf) que você pode chamar do python (não o que você pediu, mas pode ser útil). Eu usei sem problemas. Eu acho que o Google usá-lo no Google Desktop.
fonte
-layout
opção de manter o texto na mesma posição do PDF. Agora, se eu pudesse descobrir como canalizar o conteúdo de um PDF para ele.pdftotext
parece funcionar muito bem, mas precisa de um segundo argumento que seja um hífen, se você quiser ver os resultados no stdout.find . -iname "*.pdf" -exec pdftotext -enc UTF-8 -eol unix -raw {} \;
Por padrão, os arquivos gerados recebem o nome original com a.txt
extensão.O pyPDF funciona bem (supondo que você esteja trabalhando com PDFs bem formados). Se tudo o que você deseja é o texto (com espaços), basta fazer:
Você também pode obter facilmente acesso aos metadados, dados de imagem e assim por diante.
Um comentário no código extractText observa:
Se isso é ou não um problema, depende do que você está fazendo com o texto (por exemplo, se o pedido não importa, tudo bem, ou se o gerador adiciona texto ao fluxo na ordem em que será exibido, tudo bem) . Eu tenho código de extração pyPdf em uso diário, sem problemas.
fonte
Você também pode facilmente usar o pdfminer como uma biblioteca. Você tem acesso ao modelo de conteúdo do pdf e pode criar sua própria extração de texto. Fiz isso para converter o conteúdo em pdf em texto separado por ponto e vírgula, usando o código abaixo.
A função simplesmente classifica os objetos de conteúdo TextItem de acordo com suas coordenadas yex, e gera itens com a mesma coordenada y de uma linha de texto, separando os objetos na mesma linha com ';' personagens.
Usando essa abordagem, consegui extrair texto de um pdf do qual nenhuma outra ferramenta conseguiu extrair conteúdo adequado para análise adicional. Outras ferramentas que experimentei incluem pdftotext, ps2ascii e a ferramenta online pdftextonline.com.
O pdfminer é uma ferramenta inestimável para a raspagem de pdf.
ATUALIZAÇÃO :
O código acima está escrito em uma versão antiga da API, veja meu comentário abaixo.
fonte
pdfminer
, nãopdflib
). Eu sugiro que você dê uma olhada na fonte dopdf2txt.py
PDFminer, o código acima foi inspirado na versão antiga desse arquivo.slate
é um projeto que facilita o uso do PDFMiner de uma biblioteca:fonte
Eu precisava converter um PDF específico em texto sem formatação dentro de um módulo python. Usei o PDFMiner 20110515, depois de ler a ferramenta pdf2txt.py , escrevi este trecho simples:
fonte
C:\Python27\Scripts\pdfminer\tools\pdf2txt.py
Reutilizando o código pdf2txt.py que acompanha o pdfminer; você pode criar uma função que seguirá o caminho para o pdf; opcionalmente, um tipo de saída (txt | html | xml | tag) e opta como a linha de comando pdf2txt {'-o': '/path/to/outfile.txt' ...}. Por padrão, você pode chamar:
Um arquivo de texto será criado, um irmão no sistema de arquivos para o pdf original.
fonte
O PDFminer me deu talvez uma linha [página 1 de 7 ...] em todas as páginas de um arquivo pdf que tentei com ele.
A melhor resposta que tenho até agora é pdftoipe, ou o código c ++ é baseado em Xpdf.
veja minha pergunta sobre como é a saída do pdftoipe.
fonte
Além disso, há o PDFTextStream, que é uma biblioteca Java comercial que também pode ser usada no Python.
fonte
Eu usei
pdftohtml
com o-xml
argumento, li o resultado comsubprocess.Popen()
, que fornecerá x coord, y coord, largura, altura e fonte, de cada trecho de texto no pdf. Eu acho que é isso que 'evince' provavelmente também usa porque as mesmas mensagens de erro são exibidas.Se você precisar processar dados colunares, isso ficará um pouco mais complicado, pois você precisará inventar um algoritmo adequado ao seu arquivo pdf. O problema é que os programas que produzem arquivos PDF não apresentam necessariamente o texto em nenhum formato lógico. Você pode tentar algoritmos simples de classificação e, às vezes, funciona, mas pode haver pequenos 'stragglers' e 'strays', pedaços de texto que não são colocados na ordem que você imaginava. Então você tem que ser criativo.
Demorei cerca de 5 horas para descobrir um dos pdf em que eu estava trabalhando. Mas funciona muito bem agora. Boa sorte.
fonte
Encontrei essa solução hoje. Funciona muito bem para mim. Até renderizando páginas PDF em imagens PNG. http://www.swftools.org/gfx_tutorial.html
fonte