Анализ объектов формы PDF с помощью iTextSharp с использованием .Net

Я пытаюсь проанализировать кучу PDF-файлов, в которых есть часть того, что кажется текстом, но на самом деле это просто набор встроенных фигур, которые выглядят как текст, поэтому извлечение этого «текста» с помощью обычный объект PdfTextExtractor в iTextSharp невозможен.

Поскольку текст, который я пытаюсь извлечь, является одним из 10 возможных слов, вместо фактического «чтения» слова (или, скорее, «формы в форме слова»), я решил, что могу определить, что это за слово, сравнив это против других, которые я уже идентифицировал.

Мой первый вопрос: как мне добраться до этого раздела PDF? Как бы я использовал iText для анализа документа, чтобы перейти к этому объекту формы? Во всех моих документах этот раздел начинается с общего слова, поэтому я подумал, что могу использовать его в качестве ориентира, чтобы знать, когда я нахожусь в нужной области, но как мне вообще пройтись по всем формам документа?

Затем, как только я найду его, как мне идентифицировать конкретные формы (отрезки линий?) других слов, чтобы определить, на какие буквы я смотрю?

Чтобы проиллюстрировать проблему, вот сопоставимый сценарий. Раздел, который мне нужно проанализировать, представляет собой легенду карты, и это будет область PDF, которая выглядит следующим образом:

-- ЛЕГЕНДА --

  • Дорога
  • шоссе
  • река

Если я нахожу фигуру, представляющую слово «ЛЕГЕНДА», я знаю, что нахожусь в нужной области, и тогда я могу попытаться определить, какие слова есть в легенде (поскольку это ограниченный список из примерно 10 слов). Но как мне это сделать?

Я использую .NET, поэтому мне подойдут любые образцы кода C# или VB.Net.


person Avi    schedule 09.09.2011    source источник


Ответы (1)


У тебя есть моя жалость.

Единственный разумный способ справиться с подобными вещами — использовать OCR. Оптическое распознавание символов. В коде Google можно найти по крайней мере один достойный пакет OCR с открытым исходным кодом.

Пакет Pdf Parser еще никоим образом не обрабатывает штриховые рисунки. Так что это исключено, если вы не хотите писать поддержку самостоятельно.

Если у вас есть «хорошие» примеры каждого из ваших 10 слов, вы ВОЗМОЖНО сможете придумать регулярное выражение, которое будет последовательно обнаруживать каждое из них. Это не удастся, если ваш «текст» всегда будет одним и тем же «шрифтом».

Вам придется искать определенную серию команд lineTo/curveTo/moveTo.

Вам придется игнорировать координаты в вашем регулярном выражении, но затем вернуться и проанализировать их, если вам нужно определить ограничивающую рамку для данного слова.

Веселье, веселье, веселье.

person Mark Storer    schedule 13.09.2011