寻找有关如何将PDF转换为结构化格式的建议

我想对即将到来的拍卖中列出的一些房产做一些分析。 不幸的是,运营拍卖的城市并没有以结构化格式发布信息,而是提供了700多页的拍卖物业PDF 。

我想知道社区是否有任何关于如何解析所述PDF到结构化格式以插入数据库或创建属性的电子表格的想法。

这是每个页面代表的图像: 物业指南

这是一个列出一些属性的页面: 样本列表

我对python和ruby很满意所以我没有任何问题编写解决方案,但因为“列”和那些列中的数据没有必要绑在一起,看起来这可能是一个可疑的命题。

任何想法将不胜感激。

在使用了3个小时后,我能够从数据中创建一个可解析的XML文档。 不幸的是,我没有成功完成一套完全可重复使用的步骤,我可以将其用于未来的拍卖出版物。

顺便说一句,我确实试图打电话问洛杉矶县是否可以提供另类格式的拍卖物品(excel等),答案是否定的。 那是你的政府。

以下是我的方法的高级视图:

  • 使用Poppler将PDF转换为文本文件
  • 使用RegEx foo从数据中清除和创建XML节点
  • 使用XML美化/validation器查找错误并进行清理
  • 使用Python / ruby​​添加Google Maps Link节点,并链接到LA County Assessors Map( http://assessormap.co.la.ca.us/mapping/rolldata.asp?ain=APN-GOES_HERE )和
  • 使用Ruby将XML转换为CSV

我使用http://xmlbeautifier.com/作为我的XML美化/validation器,因为它很快并且它提供了准确的错误报告,包括行号。

使用Homebrew安装Poppler for Mac:

brew install poppler 

安装Poppler后,您应该可以访问pdftotext实用程序来转换PDF:

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

这是XML的预览( 单击此处查看完整XML ):

    536 3,422 2006 003 001 03 2006 003 001 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 
VACANT LOT

编辑:添加我编写的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

使用命令pdftotext使用Xpdf转换为文本。

我用以下内容转换了您的文件:

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

此转换将文本完全 -layout在其原始布局中(由于-layout选项)。 选项-f-l表示要提取的页面范围的第一个和最后一个页码。

从那里,解析应该很简单 – 第8列中的数字表示记录的第一行,空行结束记录。 按照指南进行记录中元素的准确定位。