web-dev-qa-db-ja.com

PDF、Word、Excelドキュメントからテキストを抽出する方法は?

PDF、Excel、Wordファイルからテキストデータを抽出できるように、.NETライブラリが必要です。

理想的には、無料のツールです!

何かお勧めしますか?

どうもありがとう、

14
The Light

この正確な問題の(ほぼ)無料の解決策を探して何日も費やしてきた人として、私はかなり正直に言うと、テキストを抽出できる無料のライブラリは見つかりませんallそれらのフォーマットはうまくいきます。私が知っている唯一のライブラリは、これらすべての形式(およびそれ以上)で優れた機能を果たします。これは商用ライブラリであり、実際には.NETにネイティブではなく、C++/CLIを備えたC++/COMライブラリです。 NETラッパー。

いくつかのオプションは何ですか?

  • iTextSharp -これはPDFからテキストを抽出するのに絶対に素晴らしいです。このライブラリの新しいバージョンは商用フレンドリー(LGPL)でしたが、作成者は代わりにソフトウェアの料金を請求することを決定したため、代わりにAGPLでリリースしました。したがって、すべてのソースコードをリリースする場合を除き、おそらく、これらのバージョンの1つを使用したくないでしょう。ただし、LGPLの下でライセンスされている最後のバージョン(4.1.6)は、インターネット全体で見つけることができます。 このSO質問 にはLGPLの下にあるバージョンへのリンクがあります。

  • PdfBox -別のPDFライブラリ。これは、Apache 2.0ライセンスの下にあるため、IMOの方が優れています。それにはいくつかの問題があります時々(おそらくめったにない)はiTextSharpほどうまく機能しません。これは、他の何よりも新しいライブラリであるという事実に起因します。 ただし、このライブラリでの私の経験は前のものです。このプロジェクトは活発に開発されており、先月、52の問題が解決されました。私はこれに目を離さないでしょう。これはJavaライブラリであることに注意してください。 (私がこれを含めた理由の詳細については、以下を読み続けてください。)

  • [〜#〜] poi [〜#〜] または [〜#〜] npoi [〜#〜] -これらは、特にMicrosoftOfficeドキュメント用に特別に作成されたライブラリです。 2007年以前の形式、OLEバイナリファイル形式。ライブラリのその部分がどれほど成熟しているかはわかりませんが、新しいOpenXML形式をサポートしています。 POIはJavaバージョンです(これを含めた理由の詳細については、以下をお読みください)。ここで、NPOIはネイティブの.NETバージョンです。ただし、NPOIはExcelドキュメントのみをサポートし、POIは さらに多くのタイプ でテキスト抽出を実行できます。

  • Open XML SDK 2. -Office 2007+(暗号化されていないOpenXML)ドキュメントを読み取り/変更するためのライブラリが自分のMicrosoftを作成しました!これは、これらの種類のドキュメントを操作するためのすばらしいライブラリです。ただし、これは低レベルのライブラリであるため、実際には(私が知る限り)、すべてを実行するテキスト抽出クラスはありません。 Word文書からのテキスト抽出のかなり良い例があります(表のテキストなどの特定のケースをカバーしているかどうかはわかりません) このSO回答で

  • Tika -もう一度、別のJavaライブラリ(理由もなくJavaライブラリについては説明していません。読み続けてください!:))、これは、テキスト抽出用の「1つのライブラリ」にできるだけ近くなります。 Tikaは、既存の解析ライブラリを使用して、さまざまな種類のファイルからメタデータと構造化テキストコンテンツを抽出できます。実際には、オフィスやPDFドキュメントの内部でPOIとPdfBoxを使用しています。

非営利

  • dtSearch -これは私がよく知っているライブラリです。それは素晴らしい仕事をし、とんでもない量のファイル形式を解析することができます。しかし、それはお金がかかり、おそらくあなたが必要とするものにはやり過ぎです。それは実際には正確に必要なものですが、解析にのみ使用し(実際には全文検索エンジンです)、解析ライブラリがたくさんあるため、自分たちでそれを取り除こうとしています。ニーズに合わせて使用​​または変更できるものがありますが、正直なところ、これらの他のすべてのライブラリは水から吹き飛ばされます。前に述べたように、これもネイティブの.NETコードではありません。 C++/CLIラッパーは、DLLと.NETランタイムの間のインタートップに使用されます。

iFiltersを使用でき、さまざまな質問に対する他のいくつかのSO回答で言及されていますが、返されるテキストは構造化されていません。時々それはただ悪いです...少なくとも人間には読めません。 iFilterも非推奨であり、ライセンスの問題によっては、再配布できない場合があると思います。


なぜ私はそれらのJavaライブラリのすべてに言及したのですか?まあ、2つの理由で。まず、これらのJavaライブラリの品質に近いfree。NETに相当するものはありません。次に、 [〜#〜] ikvm [〜#〜] を使用して、.NETでこれらのライブラリを使用できます(私はこれらのライブラリを使用して個人的にこれを行ったので、少なくともそれを保証できます)。 。これは、.NET内のJavaの実装です。 これが良い例です IKVMを使用してTikaをプロジェクトで使用できる.NETアセンブリに変換する方法について。おそらくIKVMで最も怖いのは、うまくいく!

編集:そのブログの作者が実際にコードを投稿し、ライブラリを変換したことを忘れました githubプロジェクト 。したがって、すぐにチェックアウトしたい場合は、そこで行うことができます。ただし、これはTikaのはるかに古いバージョンであり、1年以上前のものです。結果が期待どおりでない場合は、最新バージョンで自分で試してみることをお勧めします。

29

toxy.codeplex.com をご覧ください。 Toxyは、純粋な.NETテキスト抽出フレームワークです。

Toxyの使い方はとても簡単です。たとえば、test.xlsxというExcelスプレッドシートファイルを抽出します。

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

Word文書から抽出するためのリンクは次のとおりです。

C#でMS Officeドキュメントからテキストを抽出する方法

pDFについては、PDFsharpを使用します。これはオープンソースであり、Webサイトにいくつかの良い例などがあります。

http://pdfsharp.com/PDFsharp/

2
NKamrath

これにはAsposeTotalをお勧めします。数年前、私はあなたが求めていることをほぼ正確に実行するプロジェクトを行い、異なるバージョンのOffice間でOffice Interopのものを使用することと比較しました(XMLへの変更前)Asposeは最も堅牢なライブラリでした。あなたはおそらくあなたが話していることに基づいていくつかのOCRをしなければならないでしょう。 安くはありませんが、APIはかなりしっかりしていて、あなたが求めているファイルタイプのほとんどのバージョンで動作することがわかりました。無料トライアルを使用して、プロジェクトに適しているかどうかを確認できるはずです。 Asposeとは、実稼働環境でツールを使用したこと以外は関係ありません。

合計を仮定

1
ElvisLives

PDFから抽出するテキストの場合 itextsharp は素晴らしいです。それは無料でオープンソースです。

pDFからテキストを読むには、このライブラリを使用すると非常に簡単です。

テキストだけが必要な場合は、iFilterを使用できます。単一の製品ではありませんが、無料です。 iFilterは、Microsoft IndexServiceをサポートするためにテキストを抽出するために使用されます。使用方法の例については、iFilter .NET C#で検索してください。フォーマットされたテキストが必要な場合は、適切なツールではありません。改行が多い生のテキストのみを抽出します。

0
paparazzo