2014-10-07 3 views
0

Моего вопрос:экстракта текст PDF столбцов

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

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


Я использую pdfBox и попытался/искали несколько вещей:

  • Я попробовал getThreadBeads() метод PDPage класса -> Результат: список с 0 размером
  • Я попытался graping в текст с методом getCharactersByArticle() -> текст, не разделенный на колонки
    (Я пробовал это с pdf-файлами опубликованных текстов, а также с самоподготовленными файлами на основе .doc, каждый из которых имеет несколько колонок млн раскладка)

Дело в том, что pdfBox кажется разделить текст на столбцы автоматически: Если установить setSortByPosition() в виде PDFTextStripper на истинный все признаки страницы устанавливаются в линию без распознавания отдельных столбцов. Но если я установил setSortByPosition() на false, стриптизер делает это деление.

Для этого я взглянул на исходный код pdfBox: Решающим методом является метод PDFTextStripper writePage(). Здесь пробелы (которые не указаны в большинстве pdf-файлов) и разрывы строк вычисляются, очевидно. Но я не мог найти, как Стриппер вычисляет разрывы столбцов.

Таким образом, вопросы снова:

  • Как PDFTextStripper счетные разрывы столбцов?
  • Существуют ли методы в pdfBox API, чтобы поймать это /, чтобы извлечь текст по столбцам?
  • Возможно ли это с другим pdf-api?

заранее спасибо

ответ

2

Если я устанавливаю setSortByPosition() из более PDFTextStripper на истинном все признаки страницы устанавливаются в линии без распознавания отдельных столбцов. Но если я устанавливаю setSortByPosition() на false, то стриппер выполняет это деление.

[...] Как разрывается колонка расчета PDFTextStripper?

Это не так.

Устанавливая SortByPosition к false вы говорите PDFBox к не пытаться сортировать текстовые фрагменты из потока содержимого страницы, но вместо этого принять их в порядке их появления.

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

Активация этой опции (установка SortByPosition на true) в документе возвращает текст без учета столбцов.

Есть ли методы в API pdfBox, чтобы поймать это /, чтобы извлечь текст по столбцам?

PDFBox не анализирует содержимое страницы для распознавания столбцов. Однако, если вы выполняете анализ, он позволяет извлекать текстовый столбец по столбцу, если вы предоставляете прямоугольники столбцов как правила.

+0

спасибо! Таким образом, порядок чтения, на который полагается текст PDF, защищен PDF-документом при его создании? I.e .: Когда я преобразовываю .doc в pdf, PDF (обычно) сохраняет текст в порядке чтения? если да: существует ли способ хранения информации о столбцах при создании PDF-файла? – matthiasboesinger

+1

* Когда я преобразовываю .doc в pdf, PDF (обычно) защищает текст в порядке чтения. * - * ваш * документ такого типа. И он выглядит довольно естественным. Но я не могу сказать, насколько это распространено на самом деле. Вам все равно придется проверять ваши источники в формате PDF, поскольку они могут быть необычными ...;) – mkl

+2

* есть ли способ хранения информации о столбцах при создании PDF? * - да, но это, похоже, не используется в вашем образце документа, в противном случае ваши эксперименты с 'getThreadBeads' и' getCharactersByArticle' были бы более успешными. – mkl