web-dev-qa-db-ja.com

プログラムでPDFファイル内のスキャンからのテキストを認識します

データベースにインポートする必要があるデータを含むPDFファイルがあります。ファイルは、印刷された英数字テキストのPDFスキャンのようです。10ptのように見えます。TimesNew Roman。

このテキストを認識して解析できるツールやコンポーネントはありますか?

26
Rob

私は pdftohtml を使用して、PDFからCSVにテーブルを正常に削除しました。これは、より汎用的なツールである Xpdf に基づいています。 pdftotext が含まれています。C#からのProcess.Start呼び出しとしてラップします。

もう少しDIYを探している場合は、 iTextSharp ライブラリ-Javaのポート iText -および PDFBox (そうです、それです) Java-ですが、それらは IKVM.NET の方法で.NETバージョンを持っています) iTextSharp と-の使用に関するいくつかのCodeProject記事があります PDFBox C#から。

そして、もしあなたがマゾヒストである本当になら、COM相互運用機能でAdobeの PDF IFilter を呼び出すことができます。 IFilter specs は非常に単純ですが、相互運用のオーバーヘッドが大きくなると思います。

編集:質問とその後の回答をもう一度読んだ後、OPがPDFでimagesを処理していることが明らかになりました。その場合、画像を抽出し(PDF上記のライブラリはそれを簡単に行うことができます)、OCRエンジンで実行する必要があります。

私は以前にインタラクティブに [〜#〜] modi [〜#〜] を使用して、まともな結果を得ました。これはCOMなので、相互運用機能を介してC#から呼び出すことも doable で、かなり simple です。

' 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

Tesseract のようなものもありますが、私はそれを直接経験しています。私はそれについて良い点と悪い点の両方を聞いたので、それはソースの品質に大きく依存すると思います。

22
Mark Brackett

PDFからスキャンしたテキストを抽出することはできません。 OCRソフトウェアが必要です。良いニュースは、試すことができるいくつかのオープンソースアプリケーションがあり、OCRルートはPDFライブラリを使用してテキストを抽出するよりも簡単です。TesseractとGOCRを確認してください。

6
jm4

自分のブログの1つでPDFの解析について投稿しました。このリンクをクリックしてください:

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-生徒.aspx

編集:リンクが機能しなくなりました。以下から引用 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

さて、以下はウェブで利用可能な人気のある例に基づいています。これは、PDFファイルを「読み取り」、フォームのリッチテキストボックスコントロールにテキストとして出力することです。 PDFBox for .NETライブラリは、sourceforgeからダウンロードできます。

IKVM.GNU.ClasspathとPDFBox-0.7.3への参照を追加する必要があります。また、FontBox-0.1.0-dev.dllとPDFBox-0.7.3.dllをアプリケーションのbinフォルダーに追加する必要があります。何らかの理由で思い出せない(たぶん、チュートリアルの1つからのものかもしれません)、ビンIKVM.GNU.Classpath.dllにも追加しました。

余談ですが、Amazonから "Head First C#"(キースの提案による)のコピーを入手しました。本はかっこいい!それは本当に初心者のために書かれています。この版では、VS2008とフレームワーク3.5について説明します。

どうぞ...

/* 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));
        }

     }
}
5
MarlonRibunal

私が働いていた会社では、ActivePDFツールキットを使用して成功しました。

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

少なくともStandardまたはProバージョンが必要だと思いますが、それらには試用版があり、期待どおりに動作するかどうかを確認できます。

2
Dana

簡単なグーグル検索は、この有望な結果を示しています。 http://www.pdftron.com/net/index.html

1
Sijin

Perlの [〜#〜] pdf [〜#〜] のようなモジュールを使用して、テキストを抽出できます。そして、別のツールを使用して、関連情報をデータベースにインポートします。

PDF .NET用のコンポーネントがあると確信していますが、まだ試したことがないため、何が良いのかわかりません。

1
J.J.

PDFが印刷されたテキストのスキャンである場合、それを自分で行うのは困難です(画像処理、文字認識など)。PDFスキャンしたドキュメントをJPEGとして内部に保存します。これを行うサードパーティツール(OCRツール)を使用することをお勧めします。

1
Vivek

うまくいけば、sheebzはPDFフィールドを抽出してデータベースにデータをロードする方法を尋ねています。iTextSharpを見たことはありますか?- http://sourceforge.net/ projects/itextsharp /

0
MarlonRibunal

最近、Pythonの ReportLab を見つけました。

0
Walter

Mark Brackettの答えに基づいて、 Nugetパッケージ を作成して pdftotext をラップしました。

オープンソース 、ターゲティング。net標準1.6および。netフレームワーク4.5

使用法:

using XpdfNet;

var pdfHelper = new XpdfHelper();

string content = pdfHelper.ToText("./pathToFile.pdf");
0
user1917528