Как разобрать pdf в Ruby

Я пробовал простую программу Ruby для анализа простого файла PDF и извлечения интересующих меня текстов. Я обнаружил, что pdf-reader — неплохой инструмент для разбора pdf-файлов. Я прочитал примеры, приведенные в этом геме, и некоторые учебники вокруг этого.

Я попробовал метод обратного вызова и смог получить весь текст из моего файла PDF. Но я не понял концепции аргументов для некоторых обратных вызовов.

Например, если в моем pdf есть простая таблица с 3 столбцами и 2 строками. (Значения строки заголовка — это имя, адрес, возраст), а значения первой строки — (Арун, Хоскоте, 22), и когда U запускает скрипт ruby, следующий за ruby.

receiver = PDF::Reader::RegisterReceiver.new
reader = PDF::Reader.new("Arun.pdf")
reader.pages.each do |page|
    page.walk(receiver)
    receiver.callbacks.each do |cb|
      puts cb.inspect
    end
end

Он печатает серию обратных вызовов, среди которых некоторые из интересных обратных вызовов show_text_with_positioning были такими, как следующие

{:name=>:show_text_with_positioning, :args=>[["N", 5, "am", -4, "e"]]}
{:name=>:show_text_with_positioning, :args=>[[" "]]}
{:name=>:show_text_with_positioning, :args=>[["Ad", 6, "d", 3, "ress"]]}
{:name=>:show_text_with_positioning, :args=>[[" "]]}
{:name=>:show_text_with_positioning, :args=>[["Age"]]}
{:name=>:show_text_with_positioning, :args=>[[" "]]}
{:name=>:show_text_with_positioning, :args=>[["Ar", 4, "u", 3, "n"]]}
{:name=>:show_text_with_positioning, :args=>[[" "]]}
{:name=>:show_text_with_positioning, :args=>[["H", 3, "o", -5, "sk", 9, "o", -5,     "te"]]}
{:name=>:show_text_with_positioning, :args=>[[" "]]}
{:name=>:show_text_with_positioning, :args=>[["22"]]}
{:name=>:show_text_with_positioning, :args=>[[" "]]}

Из приведенных выше обратных вызовов, что представляет args по отношению к файлу pdf? Если я хочу извлечь только значение имени, которое является «Арун» (сюда может прийти что угодно) здесь, или значение возраста i, e «25» (здесь может быть любое значение) здесь, в этом примере, как я могу сделать это в программе ruby? Есть ли какой-либо API-интерфейс pdf-parser или API Ruby для получения только одного «заинтересованного» значения из файла PDF?

Как я могу написать программу Ruby для доступа к конкретному обратному вызову, который меня интересует, который дает мне текст, который я хотел?


person Raghavendra Nilekani    schedule 09.10.2013    source источник


Ответы (1)


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

receiver = PDF::Reader::TextReceiver.new($stdout)
PDF::Reader.file("Arun.pdf", receiver)

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

person Trejkaz    schedule 20.04.2015