Подтвердить что ты не робот

Программно распознавать текст из сканирования в файле PDF

У меня есть файл PDF, который содержит данные, которые нам нужно импортировать в базу данных. Файлы выглядят как PDF-сканирование печатного алфавитно-цифрового текста. Похож на 10 пт. Times New Roman.

Существуют ли какие-либо инструменты или компоненты, которые могут позволить мне распознавать и анализировать этот текст?

4b9b3361

Ответ 1

Я использовал pdftohtml, чтобы успешно вырезать таблицы из PDF в CSV. Он основан на Xpdf, который является более универсальным инструментом, который включает pdftotext. Я просто переношу его как вызов Process.Start из С#.

Если вы ищете что-то немного более DIY, там iTextSharp библиотека - порт Java iText - и PDFBox (да, это говорит Java - но у них есть .NET с помощью IKVM.NET). Здесь некоторые статьи CodeProject об использовании iTextSharp и PDFBox из С#.

И если вы действительно мазохист, вы можете позвонить в Adobe PDF IFilter с помощью COM-взаимодействия. спецификации IFilter довольно просты, но я бы предположил, что накладные расходы interop будут значительными.

Изменить: после повторного чтения вопроса и последующих ответов становится ясно, что OP имеет дело с изображениями в своем PDF файле. В этом случае вам нужно будет извлечь изображения (библиотеки PDF выше могут сделать это довольно легко) и запустить его через движок OCR.

Я использовал MODI в интерактивном режиме до, с достойными результатами. Это COM, поэтому вызов его из С# через interop также выполнимый и довольно простой:

' 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, но у меня есть прямой опыт работы с ним. Я слышал об этом как хорошие, так и плохие вещи, поэтому я думаю, что это сильно зависит от качества вашего источника.

Ответ 2

Вы не можете извлечь отсканированный текст из PDF. Вам необходимо программное обеспечение OCR. Хорошей новостью является то, что есть несколько приложений с открытым исходным кодом, которые вы можете попробовать, и маршрут OCR, скорее всего, будет проще, чем использование библиотеки PDF для извлечения текста. Проверьте Tesseract и GOCR.

Ответ 3

Я написал о разборе pdf в одном из моих блогов. Нажмите эту ссылку:

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.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 для .NET может быть скачанный из исходного файла.

Вам нужно добавить ссылку на IKVM.GNU.Classpath и PDFBox-0.7.3. А также Кроме того, FontBox-0.1.0-dev.dll и PDFBox-0.7.3.dll необходимо добавить в папку bin вашего приложения. Почему-то я не могу вспомнить (возможно, это из одного из уроков), я также добавил в корзину IKVM.GNU.Classpath.dll.

На стороне записки, только что получил мою копию "Head First С#" (по Киту предложение) от Amazon. Книга классная! Это действительно написано для начинающих. Это издание охватывает 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));
        }

     }
}

Ответ 4

В компании, с которой я работал, мы с успехом использовали инструментарий ActivePDF:

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

Я думаю, вам понадобится хотя бы стандартная версия или версия Pro, но у вас есть испытания, чтобы вы могли увидеть, будет ли она делать то, что вы хотите.

Ответ 6

Вы можете использовать модуль, например perl PDF, чтобы извлечь текст. И используйте другой инструмент для импорта соответствующей информации в базу данных.

Я уверен, что есть компоненты PDF для .NET, но я не пробовал, поэтому не знаю, что хорошо.

Ответ 7

Если PDF - это сканирование печатного текста, это будет сложно (включает обработку изображений, распознавание символов и т.д.), чтобы сделать это самостоятельно. PDF обычно сохраняет отсканированные документы в формате JPEG. Лучше использовать сторонний инструмент (инструмент OCR), который делает это.

Ответ 8

Недавно я нашел ReportLab для Python.

Ответ 9

Если я получу это правильно, sheebz спрашивает, как извлечь поля PDF и загрузить данные в базу данных. Вы посмотрели iTextSharp? - http://sourceforge.net/projects/itextsharp/