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(
|
||||
type=types.Type.OBJECT,
|
||||
properties={
|
||||
"사업명": ValueWithCoords,
|
||||
"시설_공구": ValueWithCoords,
|
||||
"노선이정": ValueWithCoords,
|
||||
"설계사": ValueWithCoords,
|
||||
"시공사": ValueWithCoords,
|
||||
"건설분야": ValueWithCoords,
|
||||
"건설단계": ValueWithCoords,
|
||||
"계정번호": ValueWithCoords,
|
||||
"계정날짜": ValueWithCoords,
|
||||
"개정내용": ValueWithCoords,
|
||||
"작성자": ValueWithCoords,
|
||||
"검토자": ValueWithCoords,
|
||||
"확인자": ValueWithCoords,
|
||||
"설계공구_Station": ValueWithCoords,
|
||||
"시공공구_Station": ValueWithCoords,
|
||||
"도면번호": ValueWithCoords,
|
||||
"도면축척": ValueWithCoords,
|
||||
"도면명": ValueWithCoords,
|
||||
"편철번호": ValueWithCoords,
|
||||
"도면번호": ValueWithCoords,
|
||||
"Main Title": ValueWithCoords,
|
||||
"Sub Title": ValueWithCoords,
|
||||
"수평축척": ValueWithCoords,
|
||||
"수직축척": ValueWithCoords,
|
||||
"적용표준버전": ValueWithCoords,
|
||||
"Note": ValueWithCoords,
|
||||
"Title": ValueWithCoords,
|
||||
"기타정보": ValueWithCoords,
|
||||
"사업명": ValueWithCoords,
|
||||
"시설_공구": ValueWithCoords,
|
||||
"설계공구_Station": ValueWithCoords,
|
||||
"시공공구_Station": ValueWithCoords,
|
||||
"건설분야": ValueWithCoords,
|
||||
"건설단계": ValueWithCoords,
|
||||
"설계사": ValueWithCoords,
|
||||
"시공사": ValueWithCoords,
|
||||
"노선이정": ValueWithCoords,
|
||||
"계정번호": ValueWithCoords,
|
||||
"계정날짜": ValueWithCoords,
|
||||
"계정내용": ValueWithCoords,
|
||||
"작성자": ValueWithCoords,
|
||||
"검토자": ValueWithCoords,
|
||||
"확인자": ValueWithCoords
|
||||
},
|
||||
)
|
||||
|
||||
SCHEMA_TRANSPORTATION = types.Schema(
|
||||
type=types.Type.OBJECT,
|
||||
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,
|
||||
"Note": ValueWithCoords,
|
||||
"Title": ValueWithCoords,
|
||||
"기타정보": ValueWithCoords,
|
||||
"위치정보": ValueWithCoords
|
||||
},
|
||||
)
|
||||
|
||||
@@ -142,6 +141,7 @@ class GeminiAnalyzer:
|
||||
"\n\n--- 지시사항 ---\n"
|
||||
"위 텍스트와 좌표 정보를 바탕으로, 이미지의 내용을 분석하여 JSON 스키마를 채워주세요."
|
||||
"각 필드에 해당하는 텍스트를 찾고, 해당 텍스트의 'value'와 시작 'x', 'y' 좌표를 JSON에 기입하세요."
|
||||
"해당하는 값이 없으면 빈 문자열을 사용하세요."
|
||||
)
|
||||
|
||||
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 asyncio
|
||||
import logging
|
||||
import os
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
import time
|
||||
|
||||
# 프로젝트 모듈 임포트
|
||||
from config import Config
|
||||
from multi_file_processor import MultiFileProcessor, BatchProcessingConfig, generate_default_csv_filename
|
||||
from ui_components import MultiFileUIComponents
|
||||
from utils import DateTimeUtils
|
||||
|
||||
# 로깅 설정
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
@@ -297,10 +293,10 @@ class MultiFileApp:
|
||||
# 상위 Container에서 텍스트 찾아서 업데이트
|
||||
try:
|
||||
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}개"
|
||||
self.page.update()
|
||||
except:
|
||||
except e: # noqa: E722
|
||||
logger.warning("슬라이더 레이블 업데이트 실패")
|
||||
|
||||
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