2013-08-19 20 views
7

다음 경매에 나열된 일부 속성에 대한 분석을하고 싶습니다. 유감스럽게도 경매를 운영하는 도시는 정보를 구조화 된 형식으로 게시하지 않고 대신 경매로 올라가는 속성의 700+ page PDF을 제공합니다.PDF를 구조화 된 형식으로 변환하는 방법에 대한 권장 사항 찾기

DB에 삽입하기위한 구조화 된 형식으로 PDF를 구문 분석하거나 속성 스프레드 시트를 만드는 방법에 대한 의견이 커뮤니티에 있는지 궁금합니다. 여기

는 각 페이지가 무엇을 나타내는 이미지입니다 : Property Guide

그리고 여기에 몇 가지 속성을 나열하는 페이지의 : 나는 그래서 문제가없는 파이썬과 루비 편안 해요 Sample List of Properties

을 솔루션을 스크립팅하지만, "열"과 그 열의 데이터가 함께 묶일 필요가 없기 때문에 이것은 모호한 제안 일 것입니다.

모든 아이디어는 크게 감사하겠습니다.

+0

내 생각은 텍스트 변환기에 PDF를 사용하고 (컨버터가 당신에게 예측 가능한 출력 포맷을 제공한다는 가정) 텍스트 파일을 구문 분석하는 것입니다. –

+0

네, 시도했습니다. 내가 시도한 루비 프로젝트 (https://github.com/kitplummer/pdftohtmlr)가 있고 그것은 쓰레기를 내뱉습니다. – doremi

+0

텍스트는 어떻게됩니까? HTML처럼 보입니다. –

답변

1

Xpdfpdftotext 명령을 사용하여 텍스트로 변환하십시오.

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

이 변환 텍스트 원래의 레이아웃 (인해 -layout 옵션) 정확히 잎 :

난 다음에 파일을 변환. 옵션 -f-l은 추출 할 페이지 범위의 첫 번째 및 마지막 페이지 번호를 나타냅니다.

거기에서 파싱은 간단해야합니다. 8 열의 숫자는 레코드의 첫 번째 줄을 나타내며 빈 줄은 레코드를 끝냅니다. 레코드 내의 요소를 정확히 배치하려면 가이드를 따르십시오.

1

3 시간 동안이 작업을 수행 한 후에 데이터에서 파싱 가능한 XML 문서를 만들 수있었습니다. 불행히도, 나는 미래의 경매 출판물에 사용할 수있는 완전히 재사용 가능한 일련의 단계들을 모으는 데 성공하지 못했습니다.

경매 (엑셀 등)를위한 대체 형식을 제공 할 수 있다면 로스 앤젤레스 카운티에 전화를 걸어 문의하려고 시도했지만 응답이 아니오였습니다. 그것은 당신을위한 정부입니다.여기

내 접근 방식에 대한 높은 수준의 뷰의 :

  • 데이터에서 XML 노드를 정리하고 만들 Poppler
  • 사용 정규식 foo는을 사용하여 텍스트 파일로 PDF를 변환
  • XML beautifier/validator를 사용하여 오류를 찾고 정리하기
  • Google지도 링크 노드를 추가하려면 Python/ruby를 사용하고 LA 카운티 평가자지도 (http://assessormap.co.la.ca.us/mapping/rolldata.asp?ain=APN-GOES_HERE) 및
  • 에 연결하십시오 그것을 빨리하고 행 번호를 포함한 정확한 오류보고를 주었기 때문에 루비

과 CSV에

  • 변환 XML은 내 XML을 아름답게/검사기로 http://xmlbeautifier.com/을 사용했다.

    사용 Homebrew Mac 용 Poppler를 설치합니다 : Poppler를 설치 한 후

    brew install poppler 
    

    , 당신은 PDF 변환 pdftotext 유틸리티에 액세스 할 수 있어야합니다 : 여기

    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