Ищете рекомендации о том, как конвертировать PDF в структурированный формат

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

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

Вот изображение того, что представляет каждая страница: Руководство по недвижимости

И вот страница, в которой перечислены некоторые свойства: Пример списка свойств

Мне комфортно работать с python и ruby, поэтому у меня нет проблем с созданием решения, но поскольку «столбцы» и данные в этих столбцах необязательно связаны друг с другом, похоже, это было бы сомнительным предложением ,

Любые идеи очень приветствуются.

2 Solutions collect form web for “Ищете рекомендации о том, как конвертировать PDF в структурированный формат”

Преобразуйте в текст с помощью Xpdf, используя команду pdftotext .

Я преобразовал ваш файл со следующим:

 pdftottext.exe -layout -f 23 -l 510 AuctionBook2013.pdf AuctionBook2013.txt 

Это преобразование оставляет текст точно в оригинальной компоновке (из-за опции -layout ). Параметры -f и -l указывают первый и последний номера страниц диапазона страниц для извлечения.

После этого разбор должен быть простым: число в столбце 8 указывает первую строку записи, пустая строка заканчивает запись. Следуйте инструкциям для точного позиционирования элементов в записи.

После того, как это произошло в течение 3 часов, я смог создать анализируемый XML-документ из данных. К сожалению, мне не удалось собрать полностью повторный набор шагов, которые я могу использовать для будущих изданий аукционов.

В стороне, я попытался позвонить и спросить в Лос-Анджелесе, если бы они могли предоставить альтернативный формат свойств для аукциона (excel и т. Д.), И ответ был отрицательным. Это правительство для вас.

Вот высокоуровневое представление о моем подходе:

  • Преобразование PDF в текстовый файл с использованием Poppler
  • Используйте RegEx foo для очистки и создания узлов XML из данных
  • Используйте XML beautifier / validator для поиска ошибок и очистки
  • Используйте Python / ruby ​​для добавления узла Google Maps Link и ссылку на карту оценщиков LA County ( http://assessormap.co.la.ca.us/mapping/rolldata.asp?ain=APN-GOES_HERE ) и
  • Преобразование XML в CSV с помощью Ruby

Я использовал http://xmlbeautifier.com/ как мой XML beautifier / validator, потому что он был быстрым, и он дал точные отчеты об ошибках, включая номера строк.

Используйте Homebrew для установки Poppler для Mac:

 brew install poppler 

После установки Poppler у вас должен быть доступ к утилите pdftotext для преобразования PDF:

 pdftotext -layout -f 24 -l 687 AuctionBook2013.pdf auction_book.txt 

Вот предварительный просмотр XML ( нажмите здесь для полного XML ):

 <?xml version="1.0" encoding="UTF-8"?> <listings> <item id="1"> <nsb>536</nsb> <minbid>3,422</minbid> <apn>2006 003 001</apn> <delinquent_year>03</delinquent_year> <apn_old>2006 003 001</apn_old> <description>LICENSED SURVEYOR'S MAP AS PER BK 25 PG 28 OF LS LOT 1 BLK 1 ASSESSED TO J AND S LIMITED LLC C/O DUNA CSARDAS - JULIUS JANCSO LOCATION COUNTY OF LOS ANGELES</description> <address>VACANT LOT</address> </item> 

Изменить: добавление Ruby, который я написал, для преобразования XML в CSV.

 require 'rexml/document' require 'CSV' class Auction def initialize f = File.new('AuctionBook2013.xml', 'r') doc = REXML::Document.new(f) CSV.open("auction.csv", "w+b") do |csv| csv << ['id', 'minbid', 'apn', 'delinquent_year', 'apn_old', 'description', 'address'] doc.elements.each('/listings/item') do |item| csv << [item.attributes['id'], item.elements['minbid'].text, item.elements['apn'].text, item.elements['delinquent_year'].text, item.elements['apn_old'].text, item.elements['description'].text, item.elements['address'].text] end end end end a = Auction.new() 

Ссылка на окончательный CSV

  • Извлечение вывода Visual Event 2 в скрипт
  • Поиск уличного адреса в строке - Python или Ruby
  • Как интегрировать автономный скрипт Python в приложение Rails?
  • Понимание списков в Haskell, Python и Ruby
  • Внедрение сервера
  • Какое хранилище ключей / ценностей является наиболее перспективным / стабильным?
  • Изменен ли Python на более объектно-ориентированный?
  • Практический инструментарий GUI?
  • Могут ли шаблоны Mustache делать расширение шаблона?
  • Существуют ли технические причины, по которым Ruby DSL, например RSpec, не может быть переписан на Python?
  • Ruby on Rails против Python
  • Python - лучший язык программирования в мире.