reconhecer programaticamente texto de scans em um arquivo PDF [fechado]

StackOverflow https://stackoverflow.com/questions/158479

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um arquivo PDF, que contém os dados que precisamos para importação para um banco de dados. Os arquivos parecem ser scans pdf de texto alfanumérico impresso. Se parece com 10 pt. Times New Roman.

Existem quaisquer ferramentas ou componentes que podem me permita reconhecer e analisar este texto?

Foi útil?

Solução

Eu usei pdftohtml para retirar com sucesso mesas fora do PDF em CSV. É baseado em Xpdf , que é uma ferramenta de uso mais geral, que inclui pdftotext . Eu apenas envolvê-la como uma chamada Process.Start de C #.

Se você está procurando algo um pouco mais DIY, há a iTextSharp biblioteca - uma porta de Java de iText - e PDFBox (sim, ele diz Java - mas eles têm uma versão .NET por meio de IKVM.NET ). Eis alguns artigos CodeProject sobre o uso iTextSharp e PDFBox de C #.

E, se você estiver realmente um masoquista, você poderia pôr em Adobe PDF IFilter com interoperabilidade. A IFilter especificações é bastante simples, mas eu acho que a sobrecarga de interoperabilidade seria significativo.

Edit: Depois de re-ler a pergunta e subsequentes respostas, tornou-se claro que o OP está lidando com images em seu PDF. Nesse caso, você vai precisar para extrair as imagens (as bibliotecas PDF acima são capazes de fazer isso com bastante facilidade) e executá-lo através de um motor de OCR.

Eu usei MODI interativamente antes, com resultados decentes. É do COM, então chamá-lo de C # através de interoperabilidade é também factível e bonita simples :

' lifted from http://en.wikipedia.org/wiki/Microsoft_Office_Document_Imaging
Dim inputFile As String = "C:\test\multipage.tif"
Dim strRecText As String = ""
Dim Doc1 As MODI.Document

Doc1 = New MODI.Document
Doc1.Create(inputFile)
Doc1.OCR()  ' this will ocr all pages of a multi-page tiff file
Doc1.Save() ' this will save the deskewed reoriented images, and the OCR text, back to the inputFile

For imageCounter As Integer = 0 To (Doc1.Images.Count - 1) ' work your way through each page of results
   strRecText &= Doc1.Images(imageCounter).Layout.Text    ' this puts the ocr results into a string
Next

File.AppendAllText("C:\test\testmodi.txt", strRecText)     ' write the OCR file out to disk

Doc1.Close() ' clean up
Doc1 = Nothing

Outros, como Tesseract , mas tenho experiência direta com ele. Eu já ouvi coisas boas e coisas ruins sobre ele, então eu imagino que depende muito de sua qualidade fonte.

Outras dicas

Não é possível extrair texto digitalizado a partir de um PDF. Você precisa de um software OCR. A boa notícia é que existem alguns aplicativos de código aberto, você pode tentar a rota OCR provavelmente será mais fácil do que usar uma biblioteca PDF de texto extrato. Confira Tesseract e GOCR.

Tenho postado sobre análise do pdf em um dos meus blogs. Hit este link:

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox -outro-sample-para-grade-1-pupils.aspx

Edit: link não longa funciona. Abaixo citou http://web.archive.org/web/20130507084207/http://devpinoy.org /blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.aspx

Bem, o seguinte é baseado em exemplos populares disponíveis na Web. O que isto faz é "ler" o arquivo pdf e sua saída será como um texto no controle de caixa de rich text no formulário. O PDFBox para a biblioteca .NET pode ser descarregado a partir do SourceForge.

Você precisa adicionar referência a IKVM.GNU.Classpath & PDFBox-0.7.3. E Também, FontBox-0.1.0-dev.dll e necessidade PDFBox-0.7.3.dll a ser adicionado no a pasta bin da sua aplicação. Por alguma razão eu não posso recordar (Talvez seja de um dos tutoriais), eu também acrescentou ao bin IKVM.GNU.Classpath.dll.

Na nota lateral, só tenho a minha cópia de "Head First C #" (no Keith sugestão) da Amazon. O livro é legal! É realmente escrito para iniciantes. Esta edição abrange VS2008 eo quadro 3.5.

Aqui você vai ...

/* Marlon Ribunal
 * Convert PDF To Text
 * *******************/

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.IO;
using System.Text;
using System.ComponentModel.Design;
using System.ComponentModel;
using org.pdfbox.pdmodel;
using org.pdfbox.util;

namespace MarlonRibunal.iPdfToText
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent(); 
        }

        void Button1Click(object sender, EventArgs e)    
        {    
            PDDocument doc = PDDocument.load("C:\\pdftoText\\myPdfTest.pdf");
            PDFTextStripper stripper = new PDFTextStripper();
            richTextBox1.Text=(stripper.getText(doc));
        }

     }
}

Em uma empresa que eu usei para se trabalhar, usamos activePDF kit de ferramentas com algum sucesso:

http://www.activepdf.com/products/serverproducts/toolkit /index.cfm

Eu acho que você precisa, pelo menos, a versão Standard ou Pro, mas eles têm os ensaios para que você possa ver se ele vai fazer o que você quer que ele.

Uma rápida no Google mostra busca deste resultado promissor. http://www.pdftron.com/net/index.html

Você pode usar um módulo como de perl PDF ao extrato o texto. E usar outra ferramenta para importar as informações pertinentes no banco de dados.

Estou certo de que há componentes PDF para .NET, mas eu não tentei nenhum, então eu não sei o que é bom.

Se o PDF é um scans de texto impresso, que vai ser difícil (envolve processamento de imagem, caráter reconhecendo etc.) para fazê-lo sozinho. PDF geralmente armazenar os documentos digitalizados como JPEGs internamente. Você é melhor de usar uma ferramenta de terceiros (ferramenta OCR) que faz isso.

Eu encontrei recentemente ReportLab para Python.

Se eu entendi direito, sheebz está perguntando como extrair campos PDF e carregar os dados em um banco de dados. Você já olhou para iTextSharp? - http://sourceforge.net/projects/itextsharp/

Com base na resposta de Mark Brackett, eu criei um Nuget pacote para embrulhar pdftotext .

É open source , visando .net padrão 1.6 e .NET framework 4.5 .

Uso:

using XpdfNet;

var pdfHelper = new XpdfHelper();

string content = pdfHelper.ToText("./pathToFile.pdf");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top