tag mappin 소스 추가.
This commit is contained in:
22
.vscode/launch.json
vendored
Normal file
22
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
|
||||||
|
// 기존 특성에 대한 설명을 보려면 가리킵니다.
|
||||||
|
// 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Python 디버거: main.py",
|
||||||
|
"type": "debugpy",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/main.py",
|
||||||
|
"console": "integratedTerminal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Python 디버거: 현재 파일",
|
||||||
|
"type": "debugpy",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${file}",
|
||||||
|
"console": "integratedTerminal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -33,54 +33,53 @@ ValueWithCoords = types.Schema(
|
|||||||
SCHEMA_EXPRESSWAY = types.Schema(
|
SCHEMA_EXPRESSWAY = types.Schema(
|
||||||
type=types.Type.OBJECT,
|
type=types.Type.OBJECT,
|
||||||
properties={
|
properties={
|
||||||
"사업명": ValueWithCoords,
|
|
||||||
"시설_공구": ValueWithCoords,
|
|
||||||
"노선이정": ValueWithCoords,
|
|
||||||
"설계사": ValueWithCoords,
|
|
||||||
"시공사": ValueWithCoords,
|
|
||||||
"건설분야": ValueWithCoords,
|
|
||||||
"건설단계": ValueWithCoords,
|
|
||||||
"계정번호": ValueWithCoords,
|
|
||||||
"계정날짜": ValueWithCoords,
|
|
||||||
"개정내용": ValueWithCoords,
|
|
||||||
"작성자": ValueWithCoords,
|
|
||||||
"검토자": ValueWithCoords,
|
|
||||||
"확인자": ValueWithCoords,
|
|
||||||
"설계공구_Station": ValueWithCoords,
|
|
||||||
"시공공구_Station": ValueWithCoords,
|
|
||||||
"도면번호": ValueWithCoords,
|
|
||||||
"도면축척": ValueWithCoords,
|
|
||||||
"도면명": ValueWithCoords,
|
"도면명": ValueWithCoords,
|
||||||
"편철번호": ValueWithCoords,
|
"편철번호": ValueWithCoords,
|
||||||
|
"도면번호": ValueWithCoords,
|
||||||
|
"Main Title": ValueWithCoords,
|
||||||
|
"Sub Title": ValueWithCoords,
|
||||||
|
"수평축척": ValueWithCoords,
|
||||||
|
"수직축척": ValueWithCoords,
|
||||||
"적용표준버전": ValueWithCoords,
|
"적용표준버전": ValueWithCoords,
|
||||||
"Note": ValueWithCoords,
|
"사업명": ValueWithCoords,
|
||||||
"Title": ValueWithCoords,
|
"시설_공구": ValueWithCoords,
|
||||||
"기타정보": ValueWithCoords,
|
"설계공구_Station": ValueWithCoords,
|
||||||
|
"시공공구_Station": ValueWithCoords,
|
||||||
|
"건설분야": ValueWithCoords,
|
||||||
|
"건설단계": ValueWithCoords,
|
||||||
|
"설계사": ValueWithCoords,
|
||||||
|
"시공사": ValueWithCoords,
|
||||||
|
"노선이정": ValueWithCoords,
|
||||||
|
"계정번호": ValueWithCoords,
|
||||||
|
"계정날짜": ValueWithCoords,
|
||||||
|
"계정내용": ValueWithCoords,
|
||||||
|
"작성자": ValueWithCoords,
|
||||||
|
"검토자": ValueWithCoords,
|
||||||
|
"확인자": ValueWithCoords
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
SCHEMA_TRANSPORTATION = types.Schema(
|
SCHEMA_TRANSPORTATION = types.Schema(
|
||||||
type=types.Type.OBJECT,
|
type=types.Type.OBJECT,
|
||||||
properties={
|
properties={
|
||||||
|
"도면명": ValueWithCoords,
|
||||||
|
"편철번호": ValueWithCoords,
|
||||||
|
"도면번호": ValueWithCoords,
|
||||||
|
"Main Title": ValueWithCoords,
|
||||||
|
"Sub Title": ValueWithCoords,
|
||||||
|
"수평축척": ValueWithCoords,
|
||||||
|
"수직축척": ValueWithCoords,
|
||||||
|
"적용표준": ValueWithCoords,
|
||||||
"사업명": ValueWithCoords,
|
"사업명": ValueWithCoords,
|
||||||
"시설_공구": ValueWithCoords,
|
"시설_공구": ValueWithCoords,
|
||||||
"건설분야": ValueWithCoords,
|
"건설분야": ValueWithCoords,
|
||||||
"건설단계": ValueWithCoords,
|
"건설단계": ValueWithCoords,
|
||||||
"계정차수": ValueWithCoords,
|
"계정차수": ValueWithCoords,
|
||||||
"계정일자": ValueWithCoords,
|
"계정일자": ValueWithCoords,
|
||||||
"개정내용": ValueWithCoords,
|
|
||||||
"과업책임자": ValueWithCoords,
|
"과업책임자": ValueWithCoords,
|
||||||
"분야별책임자": ValueWithCoords,
|
"분야별책임자": ValueWithCoords,
|
||||||
"설계자": ValueWithCoords,
|
"설계자": ValueWithCoords,
|
||||||
"위치정보": ValueWithCoords,
|
"위치정보": ValueWithCoords
|
||||||
"축척": ValueWithCoords,
|
|
||||||
"도면번호": ValueWithCoords,
|
|
||||||
"도면명": ValueWithCoords,
|
|
||||||
"편철번호": ValueWithCoords,
|
|
||||||
"적용표준": ValueWithCoords,
|
|
||||||
"Note": ValueWithCoords,
|
|
||||||
"Title": ValueWithCoords,
|
|
||||||
"기타정보": ValueWithCoords,
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -142,6 +141,7 @@ class GeminiAnalyzer:
|
|||||||
"\n\n--- 지시사항 ---\n"
|
"\n\n--- 지시사항 ---\n"
|
||||||
"위 텍스트와 좌표 정보를 바탕으로, 이미지의 내용을 분석하여 JSON 스키마를 채워주세요."
|
"위 텍스트와 좌표 정보를 바탕으로, 이미지의 내용을 분석하여 JSON 스키마를 채워주세요."
|
||||||
"각 필드에 해당하는 텍스트를 찾고, 해당 텍스트의 'value'와 시작 'x', 'y' 좌표를 JSON에 기입하세요."
|
"각 필드에 해당하는 텍스트를 찾고, 해당 텍스트의 'value'와 시작 'x', 'y' 좌표를 JSON에 기입하세요."
|
||||||
|
"해당하는 값이 없으면 빈 문자열을 사용하세요."
|
||||||
)
|
)
|
||||||
|
|
||||||
contents = [
|
contents = [
|
||||||
|
|||||||
169
mapping_table_json.json
Normal file
169
mapping_table_json.json
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
{
|
||||||
|
"mapping_table": {
|
||||||
|
"ailabel_to_systems": {
|
||||||
|
"도면명": {
|
||||||
|
"molit": "DI_TITLE",
|
||||||
|
"expressway": "TD_DNAME_MAIN",
|
||||||
|
"railway": "TD_DNAME_MAIN",
|
||||||
|
"docaikey": "DNAME_MAIN"
|
||||||
|
},
|
||||||
|
"편철번호": {
|
||||||
|
"molit": "DI_SUBTITLE",
|
||||||
|
"expressway": "TD_DNAME_BOT",
|
||||||
|
"railway": "TD_DNAME_BOT",
|
||||||
|
"docaikey": "DNAME_BOT"
|
||||||
|
},
|
||||||
|
"도면번호": {
|
||||||
|
"molit": "DA_PAGENO",
|
||||||
|
"expressway": "TD_DWGNO",
|
||||||
|
"railway": "TD_DWGNO",
|
||||||
|
"docaikey": "DWGNO"
|
||||||
|
},
|
||||||
|
"Main Title": {
|
||||||
|
"molit": "DI_DRWNO",
|
||||||
|
"expressway": "TD_DWGCODE",
|
||||||
|
"railway": "TD_DWGCODE",
|
||||||
|
"docaikey": "DWGCODE"
|
||||||
|
},
|
||||||
|
"Sub Title": {
|
||||||
|
"molit": "UD_TITLE",
|
||||||
|
"expressway": "TB_MTITIL",
|
||||||
|
"railway": "TB_MTITIL",
|
||||||
|
"docaikey": "MTITIL"
|
||||||
|
},
|
||||||
|
"수평축척": {
|
||||||
|
"molit": "UD_SUBTITLE",
|
||||||
|
"expressway": "TB_STITL",
|
||||||
|
"railway": "TB_STITL",
|
||||||
|
"docaikey": "STITL"
|
||||||
|
},
|
||||||
|
"수직축척": {
|
||||||
|
"molit": "",
|
||||||
|
"expressway": "TD_DWGCODE_PREV",
|
||||||
|
"railway": "",
|
||||||
|
"docaikey": "DWGCODE_PREV"
|
||||||
|
},
|
||||||
|
"도면축척": {
|
||||||
|
"molit": "DA_HSCALE",
|
||||||
|
"expressway": "TD_HSCAL",
|
||||||
|
"railway": "",
|
||||||
|
"docaikey": "HSCAL"
|
||||||
|
},
|
||||||
|
"적용표준버전": {
|
||||||
|
"molit": "DA_STDNAME",
|
||||||
|
"expressway": "STDNAME",
|
||||||
|
"railway": "",
|
||||||
|
"docaikey": ""
|
||||||
|
},
|
||||||
|
"사업명": {
|
||||||
|
"molit": "DA_STDVER",
|
||||||
|
"expressway": "TD_VERSION",
|
||||||
|
"railway": "TD_VERSION",
|
||||||
|
"docaikey": "VERSION"
|
||||||
|
},
|
||||||
|
"시설_공구": {
|
||||||
|
"molit": "PI_CNAME",
|
||||||
|
"expressway": "TB_CNAME",
|
||||||
|
"railway": "",
|
||||||
|
"docaikey": "TBCNAME"
|
||||||
|
},
|
||||||
|
"설계공구_Station": {
|
||||||
|
"molit": "UD_CDNAME",
|
||||||
|
"expressway": "TB_CSCOP",
|
||||||
|
"railway": "",
|
||||||
|
"docaikey": "CSCOP"
|
||||||
|
},
|
||||||
|
"건설분야": {
|
||||||
|
"molit": "PA_CCLASS",
|
||||||
|
"expressway": "TD_FIELD",
|
||||||
|
"railway": "TD_FIELD",
|
||||||
|
"docaikey": "FIELD"
|
||||||
|
},
|
||||||
|
"건설단계": {
|
||||||
|
"molit": "PI_STAGE",
|
||||||
|
"expressway": "TD_CSTEP",
|
||||||
|
"railway": "TD_CSTEP",
|
||||||
|
"docaikey": "CSTEP"
|
||||||
|
},
|
||||||
|
"설계사": {
|
||||||
|
"molit": "TD_DCOMP",
|
||||||
|
"expressway": "TD_DCOMP",
|
||||||
|
"railway": "",
|
||||||
|
"docaikey": "DCOMP"
|
||||||
|
},
|
||||||
|
"시공사": {
|
||||||
|
"molit": "TD_CCOMP",
|
||||||
|
"expressway": "TD_CCOMP",
|
||||||
|
"railway": "",
|
||||||
|
"docaikey": "CCOMP"
|
||||||
|
},
|
||||||
|
"노선이정": {
|
||||||
|
"molit": "TD_LNDST",
|
||||||
|
"expressway": "",
|
||||||
|
"railway": "",
|
||||||
|
"docaikey": "LNDST"
|
||||||
|
},
|
||||||
|
"계정번호": {
|
||||||
|
"molit": "DC_RNUM1",
|
||||||
|
"expressway": "TR_RNUM1",
|
||||||
|
"railway": "TR_RNUM1",
|
||||||
|
"docaikey": "RNUM1"
|
||||||
|
},
|
||||||
|
"계정날짜": {
|
||||||
|
"molit": "DC_RDATE1",
|
||||||
|
"expressway": "TR_RDAT1",
|
||||||
|
"railway": "TR_RDAT1",
|
||||||
|
"docaikey": "RDAT1"
|
||||||
|
},
|
||||||
|
"개정내용": {
|
||||||
|
"molit": "DC_RDES1",
|
||||||
|
"expressway": "TR_RCON1",
|
||||||
|
"railway": "TR_RCON1",
|
||||||
|
"docaikey": "RCON1"
|
||||||
|
},
|
||||||
|
"작성자": {
|
||||||
|
"molit": "DC_RDGN1",
|
||||||
|
"expressway": "TR_DGN1",
|
||||||
|
"railway": "TR_DGN1",
|
||||||
|
"docaikey": "DGN1"
|
||||||
|
},
|
||||||
|
"검토자": {
|
||||||
|
"molit": "DC_RCHK1",
|
||||||
|
"expressway": "TR_CHK1",
|
||||||
|
"railway": "TR_CHK1",
|
||||||
|
"docaikey": "CHK1"
|
||||||
|
},
|
||||||
|
"확인자": {
|
||||||
|
"molit": "DC_RAPP1",
|
||||||
|
"expressway": "TR_APP1",
|
||||||
|
"railway": "TR_APP1",
|
||||||
|
"docaikey": "APP1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"system_mappings": {
|
||||||
|
"expressway_to_transportation": {
|
||||||
|
"TD_DNAME_MAIN": "DNAME_MAIN",
|
||||||
|
"TD_DNAME_BOT": "DNAME_BOT",
|
||||||
|
"TD_DWGNO": "DWGNO",
|
||||||
|
"TD_DWGCODE": "DWGCODE",
|
||||||
|
"TB_MTITIL": "MTITIL",
|
||||||
|
"TB_STITL": "STITL",
|
||||||
|
"TD_DWGCODE_PREV": "DWGCODE_PREV",
|
||||||
|
"TD_HSCAL": "HSCAL",
|
||||||
|
"TD_VERSION": "VERSION",
|
||||||
|
"TB_CNAME": "TBCNAME",
|
||||||
|
"TB_CSCOP": "CSCOP",
|
||||||
|
"TD_FIELD": "FIELD",
|
||||||
|
"TD_CSTEP": "CSTEP",
|
||||||
|
"TD_DCOMP": "DCOMP",
|
||||||
|
"TD_CCOMP": "CCOMP",
|
||||||
|
"TR_RNUM1": "RNUM1",
|
||||||
|
"TR_RDAT1": "RDAT1",
|
||||||
|
"TR_RCON1": "RCON1",
|
||||||
|
"TR_DGN1": "DGN1",
|
||||||
|
"TR_CHK1": "CHK1",
|
||||||
|
"TR_APP1": "APP1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,18 +8,14 @@ Version: 1.0.0
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import flet as ft
|
import flet as ft
|
||||||
import asyncio
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from datetime import datetime
|
|
||||||
from typing import List, Optional
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
# 프로젝트 모듈 임포트
|
# 프로젝트 모듈 임포트
|
||||||
from config import Config
|
from config import Config
|
||||||
from multi_file_processor import MultiFileProcessor, BatchProcessingConfig, generate_default_csv_filename
|
from multi_file_processor import MultiFileProcessor, BatchProcessingConfig, generate_default_csv_filename
|
||||||
from ui_components import MultiFileUIComponents
|
from ui_components import MultiFileUIComponents
|
||||||
from utils import DateTimeUtils
|
|
||||||
|
|
||||||
# 로깅 설정
|
# 로깅 설정
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
@@ -297,10 +293,10 @@ class MultiFileApp:
|
|||||||
# 상위 Container에서 텍스트 찾아서 업데이트
|
# 상위 Container에서 텍스트 찾아서 업데이트
|
||||||
try:
|
try:
|
||||||
settings_container = e.control.parent.parent # Column -> Container
|
settings_container = e.control.parent.parent # Column -> Container
|
||||||
text_control = settings_container.content.controls[2].controls[1].controls[0] # 해당 텍스트
|
text_control = settings_container.controls[0]
|
||||||
text_control.value = f"동시 처리 수: {value}개"
|
text_control.value = f"동시 처리 수: {value}개"
|
||||||
self.page.update()
|
self.page.update()
|
||||||
except:
|
except e: # noqa: E722
|
||||||
logger.warning("슬라이더 레이블 업데이트 실패")
|
logger.warning("슬라이더 레이블 업데이트 실패")
|
||||||
|
|
||||||
def on_browse_csv_path_click(self, e):
|
def on_browse_csv_path_click(self, e):
|
||||||
|
|||||||
90
python_mapping_usage.py
Normal file
90
python_mapping_usage.py
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
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
|
||||||
Reference in New Issue
Block a user