Извлечение заголовка / идентификация из PDF-файлов - PullRequest
0 голосов
/ 22 марта 2019

У меня есть большое количество PDF-файлов в разных форматах.Помимо прочего, мне нужно извлечь их заголовки (не название документа, а заголовок в тексте).Из-за разнообразия форматов заголовки не находятся в тех же местах в PDF-файлах.Кроме того, некоторые PDF-файлы на самом деле являются отсканированными изображениями (мне нужно использовать OCR / оптическое распознавание символов на них).Заголовки иногда бывают одной строкой, иногда 2. Они не имеют одинакового набора слов.В диапазоне физических местоположений заголовки обычно отображаются, часто есть другие слова (то есть, если документ 1 имеет заголовок 1 в x1, y1, документ 2 может иметь заголовок 2 в x2, y2, но иметь другой текст без заголовка в x1 y1).Кроме того, в некоторых очень редких случаях PDF-файлы не имеют заголовка.

До сих пор я мог использовать pdftotext для извлечения текста из заданного ограничивающего прямоугольника и преобразования его в текстовый файл.Если есть заголовок, это позволяет мне захватить заголовок, но часто с другими посторонними словами.Это также работает только в PDF-файлах без изображений.Мне интересно, если а) есть хороший способ идентифицировать заголовок среди всех слов, которые я извлекаю для документа (потому что часто встречаются посторонние слова), в идеале с хорошим способом определить, что заголовок не существует, и б) еслиЕсть любые инструменты, эквивалентные pdftotext, которые также будут работать с отсканированными изображениями (у меня действительно работает скрипт ocr, но он работает над всем изображением, а не над его частью).

Один из методов, который несколько решает дилемму заголовка, состоит в том, чтобы извлечь слова в ограничивающей рамке, использовать оставшуюся часть документа, чтобы определить, какие из слов ограничивающей рамки являются ключевыми словами для документа, и построить заголовок изключевые слова.Это не извлечет фактический заголовок, но может дать слова, которые могли бы создать разумную альтернативу.Я уже извлекаю ключевые слова для других частей проекта, но я бы определенно предпочел извлечь фактическое название, так как люди могут использовать дословное название для целей поиска.

Еще одно замечание, если неясно - я пытаюсь сделать это программно с помощью инструментов с открытым исходным кодом / бесплатно, в идеале на Python, и у меня будет большое количество документов (более 10000).

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Вы можете использовать информацию о размере шрифта word для извлечения заглавных слов. Из вашего вопроса, что я понимаю, вот что я предлагаю извлечь заглавные слова:

Преобразование документов PDF в изображение с использованием любого модуля с открытым исходным кодом, скажем, pdf2image , затем используйте tesseract для распознавания текста. Из вывода OCR у вас есть текстовые данные вместе с их информацией о размерах, т.е. отдельные ширина слова и высота.

Выполните некоторый статистический анализ (построение гистограммы) высоты слова и посмотрите, можно ли использовать распределение высоты для распознавания заглавного слова. Либо вы можете использовать фиксированное пороговое значение на основе эвристической информации, либо использовать некоторое адаптивное пороговое значение на основе распределения по высоте и использовать это пороговое значение для распознавания названий слов.

0 голосов
/ 22 марта 2019

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

Общий подход, который я буду использовать, - это машинное обучение через нейронную сеть (я сообщу о точности, как только она у меня будет).По сути, я беру первые 200 слов документа и генерирую n-граммы из 4-20 последовательных слов (так что ~ 16 * 200 n-граммов слов; 4 до н.э. ни одно из моих названий не короче, 20 одинаково, но длиннее),Затем я генерирую уникальный вектор признаков из каждого n-грамма, функции, которые я решил использовать, частично зависят от моего текста, но некоторые являются более общими, например: «Первая ли буква первого слова в n-грамме написана заглавными буквами?».Зная правильные названия, я могу превратить их в эквивалентный вектор.Так что если vec (n_gram) = vec (correct_title), тогда выведите 1, в противном случае выведите 0. Я использую это для обучения модели ML.В настоящее время это не решает мою проблему с отсканированными изображениями в формате PDF, если они не были сначала преобразованы в текстовые документы.Это также предполагает, что порядок слов сохраняется среди заглавных слов, когда pdf превращается в n-граммы.Я заметил, что порядок неназванных слов не всегда сохраняется при преобразовании, но это довольно редкая проблема, и кажется, что она возникает только тогда, когда есть разрывы строк и тогда вся строка не на своем месте (поэтому это не должно влиять на заголовкис надеждой).

...