90 lines
3.8 KiB
Python
90 lines
3.8 KiB
Python
import json
|
|
|
|
# JSON 매핑 테이블 로드
|
|
def load_mapping_table(json_file_path):
|
|
"""매핑 테이블 JSON 파일을 로드합니다."""
|
|
with open(json_file_path, 'r', encoding='utf-8') as file:
|
|
return json.load(file)
|
|
|
|
class FieldMapper:
|
|
def __init__(self, mapping_data):
|
|
self.mapping_data = mapping_data
|
|
self.ailabel_to_systems = mapping_data['mapping_table']['ailabel_to_systems']
|
|
self.system_mappings = mapping_data['mapping_table']['system_mappings']
|
|
|
|
def ailabel_to_expressway(self, ailabel):
|
|
"""AI 라벨을 고속도로공사 필드명으로 변환"""
|
|
if ailabel in self.ailabel_to_systems:
|
|
return self.ailabel_to_systems[ailabel]['expressway']
|
|
return None
|
|
|
|
def expressway_to_transportation(self, expressway_field):
|
|
"""고속도로공사 필드명을 교통부 필드명으로 변환"""
|
|
if expressway_field in self.system_mappings['expressway_to_transportation']:
|
|
return self.system_mappings['expressway_to_transportation'][expressway_field]
|
|
return None
|
|
|
|
def ailabel_to_transportation_via_expressway(self, ailabel):
|
|
"""AI 라벨 → 고속도로공사 → 교통부 순서로 변환"""
|
|
expressway_field = self.ailabel_to_expressway(ailabel)
|
|
if expressway_field:
|
|
return self.expressway_to_transportation(expressway_field)
|
|
return None
|
|
|
|
def get_all_system_fields(self, ailabel):
|
|
"""AI 라벨에 해당하는 모든 시스템의 필드명을 반환"""
|
|
if ailabel in self.ailabel_to_systems:
|
|
return self.ailabel_to_systems[ailabel]
|
|
return None
|
|
|
|
# 사용 예제
|
|
if __name__ == "__main__":
|
|
# 매핑 테이블 로드
|
|
mapping_data = load_mapping_table('mapping_table.json')
|
|
mapper = FieldMapper(mapping_data)
|
|
|
|
# 사용 사례 1: AILABEL => EXPRESSWAY
|
|
print("=== AI 라벨 → 고속도로공사 필드명 변환 ===")
|
|
test_labels = ["도면명", "편철번호", "도면번호", "Main Title", "계정번호"]
|
|
|
|
for label in test_labels:
|
|
expressway_field = mapper.ailabel_to_expressway(label)
|
|
print(f"{label} → {expressway_field}")
|
|
|
|
print("\n=== 고속도로공사 → 교통부 필드명 변환 ===")
|
|
# 사용 사례 2: EXPRESSWAY => TRANSPORTATION
|
|
expressway_fields = ["TD_DNAME_MAIN", "TD_DWGNO", "TD_DWGCODE", "TR_RNUM1"]
|
|
|
|
for field in expressway_fields:
|
|
transportation_field = mapper.expressway_to_transportation(field)
|
|
print(f"{field} → {transportation_field}")
|
|
|
|
print("\n=== AI 라벨 → 고속도로공사 → 교통부 (연속 변환) ===")
|
|
# 연속 변환 예제
|
|
for label in test_labels:
|
|
transportation_field = mapper.ailabel_to_transportation_via_expressway(label)
|
|
expressway_field = mapper.ailabel_to_expressway(label)
|
|
print(f"{label} → {expressway_field} → {transportation_field}")
|
|
|
|
print("\n=== 특정 AI 라벨의 모든 시스템 필드명 ===")
|
|
# 모든 시스템 필드명 조회
|
|
all_fields = mapper.get_all_system_fields("도면명")
|
|
if all_fields:
|
|
print("도면명에 해당하는 모든 시스템 필드:")
|
|
for system, field in all_fields.items():
|
|
print(f" {system}: {field}")
|
|
|
|
# 배치 처리 함수
|
|
def batch_convert_ailabel_to_expressway(mapper, ailabels):
|
|
"""여러 AI 라벨을 한번에 고속도로공사 필드명으로 변환"""
|
|
results = {}
|
|
for label in ailabels:
|
|
results[label] = mapper.ailabel_to_expressway(label)
|
|
return results
|
|
|
|
def batch_convert_expressway_to_transportation(mapper, expressway_fields):
|
|
"""여러 고속도로공사 필드를 한번에 교통부 필드명으로 변환"""
|
|
results = {}
|
|
for field in expressway_fields:
|
|
results[field] = mapper.expressway_to_transportation(field)
|
|
return results |