2010-01-22 23 views
20

In parole povere, ho bisogno di estrarre il testo da più PDF (molto spesso) per analizzare i contenuti prima di incollarli in un database SQL.Estrazione di testo da PDF in C#

Ho trovato alcune librerie C# abbastanza carine che funzionano (la migliore utilizza iTextSharp), ma ci sono mille errori di formattazione e alcuni caratteri sono criptati e un sacco di volte ci sono spazi ('') OVUNQUE - All'interno di parole, tra ogni lettera, enormi blocchi di essi che occupano più righe, tutto sembra un po 'casuale.

C'è un modo semplice per farlo che sto trascurando completamente (molto probabilmente!) O è un compito un po 'arduo che comporta la conversione dei valori del byte estratto in lettere in modo affidabile?

Cheers,

Duncan

+0

Vedi anche http://stackoverflow.com/q/10982156/292060 – goodeye

risposta

9

Si può dare un'occhiata a this article. Si basa sull'eccellente libreria iTextSharp.

+0

Sì questo è il uno che stavo usando, era abbastanza buono anche se non incredibilmente affidabile. Tuttavia, guardando la risposta di Tarydon sotto spiega perché, e in realtà è probabilmente il migliore che troverò! Cheers –

+1

Mentre la libreria iTextSharp è una grande libreria, non è gratuita per scopi commerciali. Non dimenticare di leggere la stampa fine https://sourceforge.net/p/itextsharp/itextsharp/ci/ed0d02ecca2a17b028b1f40b885efac41886b7ed/tree/src/notice.txt –

17

Ci possono essere alcune difficoltà nel farlo in modo affidabile. Il problema è che PDF è un formato di presentazione che attribuisce importanza alla buona tipografia. Si supponga di voler solo emettere una singola parola: Toccare.

Una rappresentazione PDF potenza del motore potrebbe questo come 2 chiamate separati, come mostrato in questo pseudo-codice:

moveto (x1, y); output ("T") 
moveto (x2, y); output ("ap") 

Ciò avverrebbe perché il difetto crenatura (spaziatura tra lettere) tra le lettere T e a potrebbero non essere accettabili per il motore di rendering, oppure potrebbe aggiungere o rimuovere dello spazio micro tra i caratteri per ottenere una linea pienamente giustificata. Ciò che risulta in definitiva è che i frammenti di testo effettivamente trovati in PDF spesso non sono parole complete, ma parti di essi.

+1

Ottima descrizione delle potenziali difficoltà nell'estrazione di testo da PDF. – Lunatik

1

Si può provare Docotic.Pdf library (disclaimer: lavoro per Bit Miracle) per estrarre il testo da file PDF. La libreria utilizza alcune euristiche per estrarre un testo piacevole senza spazi indesiderati tra le lettere in parole.

Si prega di dare un'occhiata a un campione che mostra how to extract text from PDF.

2

Puoi provare Toxy, un framework di estrazione testo/dati in .NET. In Toxy 1.0, il PDF sarà supportato. Per i dettagli, visita il http://toxy.codeplex.com

+0

-1 Questo non ha nulla a che fare con i PDF (ancora). Potresti anche dirci di visitare http://www.websitethatplansonhavingcodetoextracttextfrompdfsoneday.com –

+1

Ho detto che lo farà. Ad ogni modo, lo vedrai presto. Lo renderò disponibile prima di giugno. –

+1

Toxy 1.0 è qui. Supporta PDF ora –

0

Se stai cercando un'alternativa "gratuita", controlla PDF Clown. Personalmente ho utilizzato l'approccio basato su iFilter e sembra funzionare bene nel caso in cui sia necessario supportare facilmente altri tipi di file. Codice di esempio here.

9

Date un'occhiata a Tika sul DotNet, disponibile attraverso Nuget: https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/

Questo è un wrapper per l'estremamente buono libreria Java Tika, utilizzando IKVM. Molto facile da usare e gestisce un'ampia varietà di tipi di file diversi dal PDF, inclusi vecchi e nuovi formati di ufficio.Si auto-selezionare il parser in base all'estensione del file, quindi è facile come:

var text = new TextExtractor().Extract(file.FullName).Text; 
0

Nel caso in cui si elaborano i file PDF con l'importazione di dati in un database allora vi consiglio di prendere in considerazione ByteScout PDF Extractor SDK. Alcune funzioni utili incluse sono

  • rilevamento tabella;
  • estrazione del testo come CSV, XML o testo formattato (con il ripristino del layout opzionale);
  • ricerca di testo con supporto per le espressioni regolari;
  • basso livello API per accedere oggetti di testo

DISCLAIMER: sono affiliati a ByteScout