Программно распознавать текст из сканирования в файле PDF
У меня есть файл PDF, который содержит данные, которые нам нужно импортировать в базу данных. Файлы выглядят как PDF-сканирование печатного алфавитно-цифрового текста. Похож на 10 пт. Times New Roman.
Существуют ли какие-либо инструменты или компоненты, которые могут позволить мне распознавать и анализировать этот текст?
Ответы
Ответ 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, но у вас есть испытания, чтобы вы могли увидеть, будет ли она делать то, что вы хотите.
Ответ 5
Быстрый поиск в Google показывает этот многообещающий результат.
http://www.pdftron.com/net/index.html
Ответ 6
Вы можете использовать модуль, например perl PDF, чтобы извлечь текст. И используйте другой инструмент для импорта соответствующей информации в базу данных.
Я уверен, что есть компоненты PDF для .NET, но я не пробовал, поэтому не знаю, что хорошо.
Ответ 7
Если PDF - это сканирование печатного текста, это будет сложно (включает обработку изображений, распознавание символов и т.д.), чтобы сделать это самостоятельно. PDF обычно сохраняет отсканированные документы в формате JPEG. Лучше использовать сторонний инструмент (инструмент OCR), который делает это.
Ответ 8
Недавно я нашел ReportLab для Python.
Ответ 9
Если я получу это правильно, sheebz спрашивает, как извлечь поля PDF и загрузить данные в базу данных. Вы посмотрели iTextSharp? - http://sourceforge.net/projects/itextsharp/