web-dev-qa-db-fra.com

Comment extraire du texte de documents Pdf, Word et Excel?

J'aurais besoin d'une bibliothèque .NET pour pouvoir utiliser des données texte à partir de fichiers PDF, Excel et Word.

Idéalement, un outil gratuit!

En recommanderiez-vous?

merci beaucoup,

13
The Light

En tant que personne qui a passé plusieurs jours à chercher des solutions gratuites pour (presque) ce problème, je peux vous dire très honnêtement que vous ne trouverez pas de bibliothèque gratuite capable d'extraire du texte de tous de ceux-ci. Formats bien. La seule bibliothèque dont je suis conscient qui fait de l'excellent travail avec tous ces formats (et plus encore) est une bibliothèque commerciale, et elle n'est pas réellement native de .NET, c'est une bibliothèque C++/COM, avec une interface C++/CLI. Enveloppe nette.

Quelles sont les options?

  • iTextSharp - Celui-ci est absolument fantastique pour extraire du texte à partir de PDF. Bien que les versions ultérieures de cette bibliothèque aient été commercialement conviviales (LGPL), les auteurs ont décidé de facturer le logiciel. Ils l'ont donc publié sous la licence AGPL. Par conséquent, à moins que vous ne souhaitiez publier tout votre code source, vous ne voulez probablement pas utiliser l'une de ces versions. Cependant, la dernière version (4.1.6) sous licence LGPL peut être trouvée partout sur Internet. This SO question a un lien vers une version qui est sous la LGPL.

  • PdfBox - Another PDF bibliothèque. Celui-ci, IMO, est préférable car il est sous licence Apache 2.0. Il présente quelques problèmes, car il {parfois} (peut-être rarement) ne fera pas un aussi bon travail que iTextSharp. J'attribue cela plus au fait que c'est une bibliothèque plus récente qu'autre chose. Cependant, mon expérience avec cette bibliothèque date de mois il y a. Ce projet est activement développé et, au cours du dernier mois, 52 problèmes ont été résolus. Je garderais un oeil sur celui-ci. Veuillez noter qu'il s'agit d'une bibliothèque Java. (Continuez à lire ci-dessous pour plus d'informations sur les raisons pour lesquelles j'ai inclus cela.)

  • POI ou NPOI - Il s'agit de bibliothèques spécialement conçues pour les documents Microsoft Office, en particulier les formats antérieurs à 2007, OLE formats de fichiers binaires. Il prend en charge les nouveaux formats OpenXML, bien que je ne sois pas sûr de la maturité de cette partie de la bibliothèque. Le POI est la version Java (Continuez à lire ci-dessous pour plus d'informations sur les raisons pour lesquelles j'ai inclus cela.), Où NPOI est une version native .NET. Cependant, NPOI ne prend en charge que les documents Excel, dans lesquels les POI peuvent extraire du texte sur de nombreux autres types .

  • Open XML SDK 2.0 - Une bibliothèque de lecture/modification de documents Office 2007+ (OpenXML non crypté) a créé mon Microsoft eux-mêmes! C'est une bibliothèque extraordinaire pour travailler avec ce type de documents. Cependant, il s’agit d’une bibliothèque de niveau inférieur et n’a donc pas (pour autant que je sache) une classe d’extraction de texte il fait tout. Il existe un assez bon exemple (je ne suis pas sûr que cela couvre certains cas, comme le texte dans des tableaux, etc.) d'extraction de texte à partir d'un document Word at this SO answer

  • Tika - Encore une fois, une autre bibliothèque Java (je ne vous parle pas de bibliothèques Java sans raison. Continuez à lire! :)), et ce sera aussi proche de "une bibliothèque" pour l'extraction de texte que Tu peux recevoir. Tika peut extraire les métadonnées et contenu textuel structuré de nombreux types de fichiers, en utilisant les bibliothèques d'analyse syntaxiques existantes. Il utilise effectivement POI et PdfBox sous le capot pour le bureau et PDF documents.

Non commercial

  • dtSearch - C'est une bibliothèque avec laquelle je suis très familier. Il fait un travail fantastique et peut analyser une quantité ridicule de formats de fichiers. Cependant, cela coûte de l'argent et c'est probablement trop cher pour ce dont vous avez besoin. C’est en fait exactement ce dont nous avons besoin, mais nous essayons de nous en débarrasser nous-mêmes, car nous ne l’utilisons que pour l’analyse (il s’agit en fait d’un moteur de recherche de texte intégral), et il existe de nombreuses bibliothèques d’analyses Là, nous pouvons l’utiliser ou le modifier pour répondre à nos besoins, mais cela jette honnêtement toutes ces autres bibliothèques hors de l’eau. Comme je l'ai déjà mentionné, ce n'est pas non plus du code natif .NET. Un wrapper C++/CLI est utilisé pour intertop entre le DLL et le runtime .NET.

les iFilters peuvent être utilisés et sont mentionnés dans plusieurs autres réponses SO sur des questions différentes, mais le texte que vous allez récupérer n'est pas structuré. Parfois, c'est simplement mauvais ... illisible pour les humains, au moins. Je pense que les filtres iFilters sont également obsolètes et que, en fonction des problèmes de licence, vous ne pourrez peut-être pas les redistribuer.


Pourquoi ai-je mentionné toutes ces bibliothèques Java? Eh bien, pour deux raisons. Premièrement, il n'y a pas d'équivalent gratuit .NET qui soit proche de la qualité de ces bibliothèques Java. Deuxièmement, vous pouvez utiliser ces bibliothèques dans .NET (je l'ai personnellement fait moi-même, donc je peux au moins en témoigner) à l'aide de IKVM . C'est une implémentation de Java à l'intérieur de .NET. Voici un bon exemple sur l'utilisation d'IKVM pour convertir Tika en un assemblage .NET pouvant être utilisé dans votre projet. La chose la plus effrayante à propos d’IKVM, c’est que (ça marche!} _

EDIT: J'ai oublié que l'auteur de ce blog avait posté le code et converti des bibliothèques sur un projet github . Donc, si vous voulez vérifier rapidement, vous pouvez le faire là-bas. Cependant, c'est une version beaucoup plus ancienne de Tika et de plus d'un an. Si les résultats ne correspondent pas à vos attentes, je vous conseillerais de les essayer vous-même avec la dernière version.

29

Vous pouvez jeter un oeil à toxy.codeplex.com . Toxy est un framework d’extraction de texte .NET pur.

C'est très simple d'utiliser Toxy. Par exemple, pour extraire une feuille de calcul Excel appelée test.xlsx.

ParserContext context = new ParserContext("test.xlsx");
ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context);
ToxySpreadsheet ss = parser.Parse();
//then you can start handle the result - a ToxySpreadsheet object
7
Tony Qu

Voici un lien pour extraire un document Word:

Comment extraire du texte à partir de documents MS Office en C #

et pour le pdf, j'utiliserais PDFsharp, il est open source et contient de bons exemples, notamment sur leur site Web:

http://pdfsharp.com/PDFsharp/

2
NKamrath

Je recommanderais Aspose Total pour cela. Il y a quelques années, j'ai réalisé un projet qui consistait à faire exactement ce que vous demandiez et à comparer à l'utilisation des éléments Office Interop entre différentes versions d'Office (avant la modification en XML) Aspose était la bibliothèque la plus robuste. Vous devrez probablement faire de la ROC en fonction de ce dont vous parlez aussi. Ce n'est pas bon marché mais j'ai trouvé leur API assez solide et elle fonctionne avec la plupart des versions des types de fichiers que vous demandez. Vous devriez pouvoir utiliser l'essai gratuit pour voir s'il conviendra à votre projet. Je n'ai aucune affiliation avec Aspose si ce n'est que j'ai utilisé leurs outils dans un environnement de production.

Aspose Total

1
ElvisLives

Pour extraire du texte à partir de pdf itextsharp , c'est génial. c'est gratuit et open source.

lire du texte à partir de pdf est très facile avec cette bibliothèque.

1

Si vous avez juste besoin de texte, vous pouvez utiliser iFilter. Ce n'est pas un produit unique mais c'est gratuit. iFilter est utilisé pour extraire le texte afin de prendre en charge Microsoft Index Service. Recherchez sur iFilter .NET C # pour des exemples d'utilisation. Si vous avez besoin d'un texte formaté, alors pas le bon outil. Il extrait le texte brut uniquement avec beaucoup de sauts de ligne.

0
paparazzo