2013-08-19 78 views
7

我想對即將進行的拍賣中列出的一些房產做一些分析。不幸的是,進行拍賣的城市不會以結構化的格式發佈信息,而是提供700+ page PDF的拍賣物業。尋找關於如何將PDF轉換爲結構化格式的建議

我想知道社區是否有任何想法,我可以如何解析PDF格式的結構化格式插入數據庫或創建屬性的電子表格。

這裏的每一頁代表什麼的圖像: Property Guide

這裏還有一個頁面,列出了一些屬性: Sample List of Properties

我熟悉Python和Ruby,所以我沒有任何問題編寫一個解決方案,但是因爲這些列中的「列」和數據並不需要綁定在一起,所以這似乎是一個可疑的命題。

任何想法將不勝感激。

+0

我的想法是使用一個PDF文本轉換器,然後分析文本文件(假設轉換器爲您提供了一個可預測的輸出格式)。 –

+0

是的,我試過了。有一個我嘗試過的紅寶石項目(https://github.com/kitplummer/pdftohtmlr),它吐出垃圾。 – doremi

+0

怎麼樣的文字?這看起來像它的HTML。 –

回答

1

使用命令pdftotext轉換爲Xpdf的文本。

我轉換具有以下文件:

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

這種轉換離開文本原始佈局(由於-layout選項)正是。選項-f-l指示要提取的頁面範圍的第一個和最後一個頁碼。

從那裏,解析應該很簡單 - 第8列中的數字表示記錄的第一行,空行結束記錄。按照指南精確定位記錄中的元素。

1

經過3個小時的磨合,我能夠從數據中創建可解析的XML文檔。不幸的是,我沒有成功完成一套完全可重複使用的步驟,可以用於未來的拍賣出版物。

另外,我確實試圖打電話詢問洛杉磯縣是否可以提供拍賣(excel等)屬性的替代格式,答案是否定的。這是你的政府。

這裏是我的方法的高級視圖:

我以前http://xmlbeautifier.com/作爲我的XML美化/驗證,因爲它速度快,它給了準確的錯誤報告,其中包括行號。

使用Homebrew安裝poppler的爲Mac:

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() 

Link to Final CSV