문서를 OCR 하고, 파싱해서 추출된 주소 텍스트를 가지고 정확한 도로명주소, 우편번호를 얻어오는 코드.
주소기반산업지원서비스 API를 활용.
1. API 신청
아래 사이트에서 API 키를 신청한다.

주소정보누리집(도로명주소 안내시스템)
business.juso.go.kr
2. 코드 요구사항
텍스트에는 동/읍/면/리 또는 도로명 주소가 들어가 있을 수 있고,
상세주소(건물명, 아파트 동, 호수 등)가 같이 있을 수 있음.
리턴 값은 "도로명 주소", "우편번호"
3. 코드 구현
import os
import re
import requests
from dotenv import load_dotenv
# .env
load_dotenv()
# https://business.juso.go.kr/addrlink/openApi/apiReqst.do
JUSO_API_KEY = os.environ.get('JUSO_API_KEY')
# 주소 패턴
addr_pattern = r"^([가-힣]+[시도]?\s[가-힣]+[구군시]\s[가-힣0-9\-]+(?:[로길대로]|[읍면동리])\s?[0-9\-번지]*)\s?(.*)?"
# 텍스트에서 추출한 도로명 or 동/읍/면/리 주소를 검색 가능한 텍스트로 분리.
def extract_addr(addr):
re_addr = re.sub(r"^\(.*?\)\s*", "", addr)
re_addr = re.sub(r"[.,]", " ", re_addr)
match = re.match(addr_pattern, re_addr)
if match:
road_address = match.group(1) # 도로명 주소
detailed_address = match.group(2) if match.group(2) else "" # 상세 주소
return road_address, detailed_address.strip()
else:
return addr, ""
# API 호출 함수
def api_resquest(addr):
try:
addr1, addr2 = extract_addr(addr)
url = f"https://business.juso.go.kr/addrlink/addrLinkApi.do?confmKey={JUSO_API_KEY}¤tPage=1&countPerPage=10&keyword={addr1}&resultType=json"
response = requests.get(url)
data = response.json()
if data['results']['common']['errorMessage'] == '정상' and len(data['results']['juso']) > 0:
juso = data['results']['juso'][0]["roadAddrPart1"]
zipno = data['results']['juso'][0]['zipNo']
return f"{juso} {addr2}", zipno
else:
return addr, "-"
except Exception as e:
print(f"Exception occured in postal api_resquest: {e}")
return addr, "-"
def get_road_addr_n_postcode(addr):
return api_resquest(addr)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-t", help="address", required=True)
args = parser.parse_args()
juso, zipno = get_road_addr_n_postcode(args.t)
print(f"juso: {juso}, zip: {zipno}")
| [Neo 둥근모 폰트] 레트로 느낌의 폰트로 개발하기 (1) | 2022.09.20 |
|---|---|
| [Vue.js] dotenv 사용하기 (0) | 2022.04.21 |
| [MySQL] 함수(PROCEDURE) 및 loop 사용해 연속된 데이터 Insert 하기 (0) | 2021.07.26 |
| GeoLite2 Country 활용한 한국 IP list 추출 & iptables 에 적용하기 (0) | 2021.07.22 |
| [Network] IP Traffic Monitoring Tools (0) | 2021.07.20 |