2009-02-24 6 views
3

Je dois convertir un PDF en texte normal (c'est le «relevé des votes» de notre registraire de comté). Les fichiers sont gros (2000 pages) et contiennent principalement des tableaux. Une fois que je l'ai dans le texte, je vais utiliser un programme que j'écris pour l'analyser et mettre les données dans une base de données. J'ai essayé la fonction 'Enregistrer en tant que texte' dans Adobe Reader, mais elle n'est pas aussi précise que je le souhaite, en particulier pour délimiter les données de la table en format CSV. Donc, des recommandations pour des outils ou des bibliothèques Java qui feraient l'affaire?PDF à l'outil texte ou à la bibliothèque Java?

+2

Je sens les données de la table pourraient vous causer des maux de tête ... – Knobloch

+0

Oui. Aussi les en-têtes de table et les en-têtes de page. Bien qu'ils soient uniformes tout au long d'un document, ils ne sont pas cohérents entre différents documents. Un document par élection, et il semble qu'ils continuent à changer le format de chaque élection. –

Répondre

6

Eh bien, il y a iText. Je n'ai qu'une expérience limitée avec elle, mais it seems il peut faire ce que vous voulez.

Apache PDFBox sûrement peut le faire. Son site mentionne "PDF to text extraction" comme sa caractéristique principale. Il y a un ExtractText command line tool spécifiquement pour cela (source code), basé sur son PDFTextStripper class. Et il y a aussi un PDFBox Text Extraction Guide!

+0

iText peut faire quelques lectures, je pense, mais il peut y avoir de meilleurs outils (PDFBox comme vous l'avez mentionné, peut-être) pour y parvenir ... – Knobloch

+0

OK, juste essayé cela. Cela fonctionnait assez bien sur les données de la table, cependant, les en-têtes de colonne étaient foirés, probablement parce qu'ils sont alignés verticalement. –

+0

Merci, @Arjan. Certaines de mes premières réponses me font grincer des dents quand je les vois trois ou quatre ans plus tard. –

0

Utilisez une imprimante de texte (ligne) pour imprimer dans un fichier.

2

J'ai toujours trouvé les outils xpdf très utiles.

Nous utilisons avec succès la conversion de pdf en texte pour la conversion de documents commerciaux PDF pour une utilisation dans EDI. L'option de conservation de la mise en page fonctionne bien pour garder les choses bien positionnées pour l'analyse d'un programme.

+1

Cela a bien fonctionné pour moi. L'indicateur -layout a permis de conserver les tables dans un format utilisable dans le fichier texte. –

0

J'utilise iText et je "ai été très heureux avec elle. Je l'ai utilisé xmlpdf avant et iText est de loin supérieur à mon avis.

0

Sans connaître la mise en page des pages de votre PDF, il est difficile dire

Je suggère de télécharger et d'essayer les deux iText et PDBox vous trouverez des exemples d'extraits de texte pour les deux sur leurs sites Web -.. vous devriez avoir un extracter en cours d'exécution dans < 30min en supposant que vous connaissez votre chemin

Java .

Commencez par PDFBox car les capacités d'extraction de texte sont meilleures que chez iText.

Quelqu'un d'autre a mentionné xpdf et cela pourrait vous être utile. C'est une bibliothèque C avec quelques outils de ligne de commande construits autour de lui. Il a un certain nombre d'éléments de texte et vous pourrez peut-être formater la sortie assez facilement. Encore une fois, cela dépend vraiment de votre mise en page.

1

PDFTextStream est notre bibliothèque Java + .NET pour l'extraction de contenu à partir de documents PDF; vous pourriez essayer. De plus, il fournit quelques table data extraction utilities rudimentaires, qui s'ajoutent aux capacités de détection de table de PDFTextStream. Ce n'est en aucun cas une solution générale (bien que nous travaillions sur l'un d'entre eux aussi!), Mais si les données tabulaires sont clairement définies (par exemple des lignes et des colonnes délimitées par des lignes, etc.), vous trouverez peut-être un bonne solution.

5

Étant donné le titre de la question: Apache Tika travaillé très bien pour moi d'extraire du texte en PDF. Je ne l'ai pas utilisé pour obtenir du texte à partir de tables.

Pour PDF, il utilise actuellement PDFBox. Mais en plus de PDF, il en fait de même pour d'autres formats comme Microsoft Word (doc et docx), Excel et PowerPoint, OpenOffice.org/LibreOffice ODT, HTML, XML, et many more. Son AutoDetectParser facilite l'extraction de texte à partir de n'importe quelle entrée.

Et si l'on a besoin de traiter le texte résultant (comme en passant à Mahout pour la classification), on peut utiliser ParsingReader pour obtenir le résultat dans un lecteur tout un processus d'arrière-plan, il extrait. Enfin, tout en extrating le contenu, il remplit également les méta-données qu'il trouve:

public Reader getPlainTextReader(final InputStream is) { 
    try { 
     Detector detector = new DefaultDetector(); 
     Parser parser = new AutoDetectParser(detector); 
     ParseContext context = new ParseContext(); 
     context.set(Parser.class, parser); 
     Metadata metadata = new Metadata(); 

     Reader reader = new ParsingReader(parser, is, metadata, context); 

     for (String name : metadata.names()) { 
      for (String value : metadata.getValues(name)) { 
       logger.debug("Document {}: {}", name, value); 
      } 
     } 

     return reader; 

    } catch (IOException e) { 
     ... 
    } 
} 
Questions connexes