[법령 데이터 구축] 2. OPEN API 데이터 수집

데이터에 대한 모든 것·2022년 4월 14일
0

개인적으로, 데이터 아키텍쳐 및 데이터 모델링에 관심이 있어
최종적으로 법률 데이터 기반의 언어모델을 만들기 위한 데이터 전처리 과정 전 데이터 수집단계에서부터 제대로 내가 생각하기에 데이터 아키텍처의 전반적인 절차대로 진행해 나가고자 한다.

1. 기존 데이터 분석

1-1. 내용 종류별 XML 파일 계층구조 파악

국가법령정보 공동활용(LAW OPEN DATA) - OPEN API - OPEN API 활용가이드 - 법령 - 본문 - 현행법령 본문 조회

을 클릭하면, 다음과 같은 샘플 URL을 통해 XML구조를 파악할 수 있다.

그 중 XML 샘플 중 하나를 클릭하면 아래와 같은 창을 확인할 수 있는데, 이 샘플 페이지와 국가법령정보 공동활용에서 표로 제공하는 구조를 비교하면서 법령 본문의 XML 구조를 분석하고자 한다.

샘플 페이지를 통해 XML 구조를 분석한 결과, 법령 본문은 다음과 같은 체계를 가진 것을 확인할 수 있다.


법령 본문 XML 구조

<법령 - 법령키> 
	<기본정보> 
		<법령ID> 
		<공포일자> 
		<공포번호> 
		<언어> 
		<법종구분 - 법종구분코드>
		<법령명_한글>
		<법령명_한자>
		<법령명약칭>
		<제명변경여부> 
		<한글법령여부>
		<편장절관>
		<소관부처 - 소관부처코드>
		<전화번호>
		<시행일자>
		<제개정구분>
		<별표편집여부>
		<공포법령여부>
		<연락부서>
			<부서단위 - 부서키>
				<소관부처명>
				<소관부처코드>
				<부서명>
				<부서연락처>
	<조문>
		<조문단위 - 조문키>
			<조문번호>
			<조문가지번호>
			<조문여부>
            <조문제목>
            <조문시행일자>
   			<조문이동이전>
			<조문이동이후>
			<조문변경여부>
			<조문제개정유형>
			<조문내용>
			<조문참고자료>
			<>
				<항번호>
				<항제개정유형>
				<항제개정일자문자열>
				<항내용>
				<>
					<호번호>
					<호내용>
					<>
						<목번호>
						<목내용>
	<부칙>
		<부칙단위 - 부칙키>
			<부칙공포일자>
			<부칙공포번호>
			<부칙내용>
	<별표>
		<별표단위 - 별표키>
			<별표번호>
			<별표가지번호>
			<별표구분>
            <별표제목>
			<별표시행일자>
			<별표서식 파일링크>
			<별표HWP파일명>
			<별표서식PDF파일링크>
			<별표PDF 파일명>
			<별표이미지 파일명>
			<별표내용>
	<개정문>
		<개정문내용>
	<제개정이유>
		<제개정이유내용>
  

법령 본문 XML 구조 - DB설계 고려

<법령 - 법령키> KEY(BIGINT), NO VALUE, NOT NULL
	<기본정보> NO VALUE, NOT NULL
		<법령ID> INT, UNIQUE, NOT NULL
		<공포일자> DATE, NOT NULL
		<공포번호> INT, UNIQUE, NOT NULL
		<언어> CHAR(2), NOT NULL 
		<법종구분 - 법종구분코드> KEY(VARCHAR(20)), VALUE(VARCHAR(10)), NOT NULL
		<법령명_한글> TEXT, UNIQUE, NOT NULL
		<법령명_한자> TEXT, UNIQUE, NOT NULL
		<법령명약칭> TEXT, UNIQUE, IS NULL
		<제명변경여부> BIT(Y/N), NOT NULL
		<한글법령여부> BIT(Y/N), NOT NULL
		<편장절관> VARCHAR(30), NOT NULL
		<소관부처 - 소관부처코드> KEY(VARCHAR(20)), VALUE(VARCHAR(50)), NOT NULL
		<전화번호> VARCHAR(20), IS NULL
		<시행일자> DATE, NOT NULL
		<제개정구분> VARCHAR(30), NOT NULL
		<별표편집여부> BIT(Y/N), NOT NULL
		<공포법령여부> BIT(Y/N), NOT NULL
		<연락부서> NO VALUE, NOT NULL
			<부서단위 - 부서키> KEY(INT), NO VALUE, NOT NULL
				<소관부처명> VARCHAR(50), NOT NULL
				<소관부처코드> VARCHAR(20), NOT NULL
				<부서명> VARCHAR(50), NOT NULL
				<부서연락처> VARCHAR(20), IS NULL
	<조문> NO VALUE, NOT NULL
		<조문단위 - 조문키> KEY(INT), NO VALUE, NOT NULL
			<조문번호> TINYINT, NOT NULL
			<조문가지번호> TINYINT, IS NULL
			<조문여부> VARCHAR(30), NOT NULL
            <조문제목> TEXT, IS NULL
            <조문시행일자> DATE, NOT NULL
   			<조문이동이전> VARCHAR(20), NOT NULL
			<조문이동이후> VARCHAR(20), NOT NULL
			<조문변경여부> BIT(Y/N), NOT NULL
			<조문제개정유형> VARCHAR(30), IS NULL
			<조문내용> LONGTEXT, NOT NULL
			<조문참고자료> LONGTEXT, IS NULL
			<> NO VALUE, NOT NULL
				<항번호> TINYINT, NOT NULL
				<항제개정유형> VARCHAR(30), IS NULL
				<항제개정일자문자열> TEXT, IS NULL
				<항내용>LOGNTEXT, NOT NULL
				<> NO VALUE, IS NULL
					<호번호> TINYINT, NOT NULL, INT
					<호내용> NOT NULL, LONGTEXT
					<> NO VALUE, IS NULL
						<목번호> TINYINT, NOT NULL
						<목내용> LONGTEXT, NOT NULL
	<부칙> NO VALUE, NOT NULL
		<부칙단위 - 부칙키> KEY(BIGINT), NO VALUE, NOT NULL
			<부칙공포일자> DATE, NOT NULL
			<부칙공포번호> INT, NOT NULL
			<부칙내용> LONGTEXT, NOT NULL
	<별표> NO VALUE, IS NULL, NO VALUE
		<별표단위 - 별표키> BIGINT, NOT NULL
			<별표번호> TINYINT, NOT NULL
			<별표가지번호> TINYINT, IS NULL
			<별표구분> VARCHAR(30), IS NULL
            <별표제목> TEXT, IS NULL
			<별표시행일자> DATE, IS NULL
			<별표서식 파일링크> TEXT, IS NULL
			<별표HWP파일명> TEXT, IS NULL
			<별표서식PDF파일링크> TEXT, IS NULL
			<별표PDF 파일명> TEXT, IS NULL
			<별표이미지 파일명> TEXT, IS NULL
			<별표내용> LONGTEXT, NOT NULL
	<개정문> NO VALUE, NOT NULL
		<개정문내용> LONGTEXT, NOT NULL
	<제개정이유> NO VALUE, NOT NULL
		<제개정이유내용> LONGTEXT, NOT NULL
  

1-2. 기존 데이터의 도메인 파악(값의 범위 및 NULL 여부)

1-3. OPEN API를 통한 전체 법령 Crawling Code

2. 데이터 표준화 및 사전 구축(단어, 용어, 도메인, 코드)

3. ER-Diagram 작성

profile
좋은 서비스는 좋은 데이터로부터 나온다 :)

0개의 댓글