Программное распознавание текста по сканированным файлам в формате PDF [закрыто]

StackOverflow https://stackoverflow.com/questions/158479

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть PDF-файл, который содержит данные, которые нам нужно импортировать в базу данных.Файлы, похоже, представляют собой PDF-сканы печатного буквенно-цифрового текста.Выглядит примерно на 10 пунктов.Таймс Нью Роман.

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

Это было полезно?

Решение

Я использовал pdftohtml чтобы успешно преобразовать таблицы из PDF в CSV.Это основано на Xpdf, который является инструментом более общего назначения, который включает в себя pdfтотекст.Я просто описываю это как Процесс.Запустите вызов с C #.

Если вы ищете что-то более оригинальное, вот вам iTextSharp библиотека - порт Java iText - Текст - и PDFBox ( PDF-файл) (да, там написано Java - но у них есть .NET-версия в виде IKVM.NET).Вот несколько статей CodeProject об использовании iTextSharp и PDFBox ( PDF-файл) из C#.

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

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

Я использовал МОДИ раньше в интерактивном режиме, с достойными результатами.Это COM, поэтому вызывать его из C # через 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

Другим нравится Тессеракт, но у меня есть непосредственный опыт работы с этим.Я слышал об этом как хорошее, так и плохое, поэтому полагаю, что это во многом зависит от качества вашего исходного кода.

Другие советы

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

Я опубликовал статью о разборе 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 можно загрузить с sourceforge.

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

     }
}

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

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

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

Быстрый поиск в Google показывает этот многообещающий результат.http://www.pdftron.com/net/index.html

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

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

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

Недавно я обнаружил, что Лаборатория отчетов для Python.

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

Основываясь на ответе Марка Брэкетта, я создал Пакет Nuget обернуть pdfтотекст.

Это открытый исходный код, нацеливание .net стандарт 1.6 и платформа .net Framework 4.5.

Использование:

using XpdfNet;

var pdfHelper = new XpdfHelper();

string content = pdfHelper.ToText("./pathToFile.pdf");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top