공지사항

북마크 입니당 >

태양광 건축물대장 pdf to excel 추출, 파이썬!

 태양광 인허가 때도 건축물대장을 제출 한다.

(물론 노지 때는 제외)


왜?


무엇을 봐야해서?


기본적인 주소, 소유자, 면적, 용도, 구조형태 등을 대략이나마 파악하기 위함이다.

오래된 기업 일 수록,

땅을 추가로 사서, 건물을 올리고, 이렇게 덕지덕지 수많은 건축물이 축조 되어 있으며,

심한 경우 꼬여있다.


한 두개야 지난번처럼 pdf 윈도우 탐색기 미리보기 기능 등으로 보고 처리하면 되나,

윈도우 탐색기 pdf 미리보기 갑자기 안 될 때 with 알pdf

그 수가 많아진다면,

일일히 열고 필요한 정보를 취득하는데 한계가 있다.




그래서 간단하게 pdf 내용을 추출하는 파이썬 코드를 하나 짰다.

근디, 요즘은 AI가 워낙 기능이 좋아,

파이썬을 아무리 잘 짜더라도, ai만 못함을 미리 알려드린다.


코드는 다음과 같다.

import pdfplumber
import pandas as pd
import PyPDF2
import re
import os
import tkinter as tk
from tkinter import filedialog

# 폴더 선택 다이얼로그를 위한 tkinter UI 설정
def select_folder():
    root = tk.Tk()
    root.withdraw()  # UI 창을 숨깁니다
    folder_selected = filedialog.askdirectory(title="PDF 파일이 있는 폴더를 선택하세요.")
    return folder_selected

# PDF 파일 경로 설정
folder_path = select_folder()  # 사용자에게 폴더 선택을 요청

# 엑셀 파일 저장 경로 설정
output_path = "C:\\python\\extracted_data.xlsx"

# 엑셀에 저장할 데이터를 담을 리스트
all_data = []

# 폴더 내 모든 PDF 파일을 처리
for file_name in os.listdir(folder_path):
    if file_name.lower().endswith('.pdf'):
        pdf_path = os.path.join(folder_path, file_name)

        # PDF 열기
        with pdfplumber.open(pdf_path) as pdf:
            # 첫 번째 페이지에서 표 추출
            first_page = pdf.pages[0]
            table = first_page.extract_tables()

        # 첫 번째 표가 존재한다면
        if table:
            # 첫 번째 표를 pandas DataFrame으로 변환
            df = pd.DataFrame(table[0][1:], columns=table[0][0])

            # '주구조', '주용도', '지붕'으로 시작하는 값 추출
            extracted_data = {
                "주구조": [],
                "주용도": [],
                "지붕": []
            }

            # 정규 표현식 패턴 설정
            pattern_주구조 = re.compile(r"주구조\s*[::]?\s*(\S+)")
            pattern_주용도 = re.compile(r"주용도\s*[::]?\s*(\S+)")
            pattern_지붕 = re.compile(r"지붕\s*[::]?\s*(\S+)")

            # 각 행을 순차적으로 검사하여 '주구조', '주용도', '지붕'에 해당하는 값을 추출
            for index, row in df.iterrows():
                for col in df.columns:
                    value = str(row[col])  # 문자열로 변환

                    # 주구조: '주구조'로 시작하는 값 추출
                    match_주구조 = pattern_주구조.search(value)
                    if match_주구조:
                        extracted_data["주구조"].append(match_주구조.group(1))

                    # 주용도: '주용도'로 시작하는 값 추출
                    match_주용도 = pattern_주용도.search(value)
                    if match_주용도:
                        extracted_data["주용도"].append(match_주용도.group(1))

                    # 지붕: '지붕'으로 시작하는 값 추출
                    match_지붕 = pattern_지붕.search(value)
                    if match_지붕:
                        extracted_data["지붕"].append(match_지붕.group(1))

            # 추출된 데이터의 길이가 같지 않으면 길이를 맞추기 위해 빈 값을 추가
            max_length = max(len(extracted_data["주구조"]),
                             len(extracted_data["주용도"]),
                             len(extracted_data["지붕"]))

            for key in extracted_data:
                while len(extracted_data[key]) < max_length:
                    extracted_data[key].append(None)  # 부족한 항목에 None 추가

        # PDF에서 텍스트 추출
        with open(pdf_path, 'rb') as file:
            pdf_reader = PyPDF2.PdfReader(file)
            pdf_text = ""
            for page in pdf_reader.pages:
                pdf_text += page.extract_text()

        # 데이터 추출 함수 정의 (매칭 실패 시 None 반환)
        def extract_value(pattern, text):
            match = re.search(pattern, text, re.MULTILINE)
            return match.group(1).strip() if match else None

        # 주구조, 주용도, 지붕은 이미 추출하였으므로 제외한 다른 항목만 추가로 추출
        data = {
            "도로명주소": extract_value(r"도로명주소\s*([^\n]+)", pdf_text),
            "건축면적": extract_value(r"건축면적\s*([\d,.]+)\s*㎡", pdf_text),
            "명칭": extract_value(r"명칭\s+([^\n]+)", pdf_text),
        }

        # DataFrame에 주구조, 주용도, 지붕 데이터를 추가
        final_data = {**data, **extracted_data}

        # 각 PDF에서 추출한 데이터를 리스트에 추가
        all_data.append(final_data)

# 모든 PDF에서 추출한 데이터를 하나의 DataFrame으로 결합
df_final = pd.DataFrame(all_data)

# 엑셀 파일로 저장
df_final.to_excel(output_path, index=False)

print(f"모든 PDF에서 추출된 데이터가 '{output_path}' 엑셀 파일에 저장되었습니다.")



사용방법은
1. 즐겨쓰는 에디터에서 실행버튼을 누르면,
pdf가 들어 있는 폴더를 기입하라는 ui가 뜬다.

2. 해당 폴더를 선택한 뒤 확인~

그럼 엑셀이 만들어지면서, 자료를 정리 해 준다.




이 것만으로 해당 건축물의 특징을 다 알 수 없다.
그저 지레짐작 할 뿐이다.




댓글

7일동안 많은 클릭!!!

캐드 글자 깨짐 해결하는 방법(세가지)

태그(카테고리) 별 버튼 글자 색깔을 바꿔보자 with chatGPT

DWG TrueView 2024 설치 오류(4000), autoCad를 설치 해 보세요... 그래도 안 되면....

태양광 공작물축조신고 기준, 무게에 따라서 공작물 축조 신고 해야 되여...

베테랑2~사적 제재의 위험성을 보여주는 영화, 삐질...

표절로 연재 중단 된 웹툰 대가리(无敌好学生) 이제는 어디서 봐야 할까?