북마크 입니당 >
태양광 건축물대장 pdf to excel 추출, 파이썬!
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
태양광 인허가 때도 건축물대장을 제출 한다.
(물론 노지 때는 제외)
왜?
무엇을 봐야해서?
기본적인 주소, 소유자, 면적, 용도, 구조형태 등을 대략이나마 파악하기 위함이다.
오래된 기업 일 수록,
땅을 추가로 사서, 건물을 올리고, 이렇게 덕지덕지 수많은 건축물이 축조 되어 있으며,
심한 경우 꼬여있다.
한 두개야 지난번처럼 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. 해당 폴더를 선택한 뒤 확인~
그럼 엑셀이 만들어지면서, 자료를 정리 해 준다.
이 것만으로 해당 건축물의 특징을 다 알 수 없다.
그저 지레짐작 할 뿐이다.



댓글
댓글 쓰기