Разбор PDF-объектов Shape с помощью iTextSharp с использованием .Net - PullRequest
1 голос
/ 09 сентября 2011

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

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

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

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

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

- LEGEND -

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

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

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

1 Ответ

0 голосов
/ 13 сентября 2011

Вы мне жаль.

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

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

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

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

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

Весело, весело, весело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...