寻找有关如何将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列中的数字表示记录的第一行,空行结束记录。 按照指南进行记录中元素的准确定位。