我想对即将举行的拍卖中列出的一些房产进行一些分析。不幸的是,运营拍卖的城市并没有以结构化格式发布信息,而是提供了700+ page PDF个要拍卖的房产。
我想知道社区是否有任何关于如何将PDF解析为结构化格式以插入数据库或创建属性的电子表格的想法。
这是每个页面代表的图像:
这是一个列出一些属性的页面:
我对python和ruby很满意所以我没有任何问题脚本化解决方案,但因为“列”和那些列中的数据没有必要绑在一起,看起来这将是一个可疑的主张。
非常感谢任何想法。
答案 0 :(得分:2)
在使用了3个小时后,我能够从数据中创建一个可解析的XML文档。不幸的是,我没有成功完成一套完全可重复使用的步骤,可用于未来的拍卖出版物。
顺便说一句,我确实试图打电话询问洛杉矶县是否可以提供另类格式的拍卖物品(excel等),答案是否定的。那是你的政府。
以下是我的方法的高级视图:
我使用http://xmlbeautifier.com/作为我的XML美化/验证器,因为它很快并且提供了准确的错误报告,包括行号。
使用Homebrew安装适用于Mac的Poppler:
brew install poppler
安装Poppler后,您应该可以访问pdftotext实用程序来转换PDF:
pdftotext -layout -f 24 -l 687 AuctionBook2013.pdf auction_book.txt
这是XML(Click here for full 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 L S 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()
答案 1 :(得分:1)
使用pdftotext
命令将Xpdf转换为文本。
我使用以下内容转换了您的文件:
pdftottext.exe -layout -f 23 -l 510 AuctionBook2013.pdf AuctionBook2013.txt
此转换将文本完全保留在原始布局中(由于-layout
选项)。选项-f
和-l
表示要提取的页面范围的第一页和最后一页。
从那里开始,解析应该很简单 - 第8列中的数字表示记录的第一行,空白行结束记录。按照指南进行记录中元素的准确定位。