루트 파일 정리: - DXF/P&ID 관련 → dxf-graph/ - fastTable 관련 → fastTable/ - plan/ → plans/ 통합 (최신 버전 유지) - 테스트 출력 파일, 구버전 프로젝트 삭제 - 불필요한 루트 문서 삭제
4.8 KiB
4.8 KiB
P&ID Parser Detailed Implementation Plan (by Gemma 4)
1. 개요 (Overview)
본 계획은 대용량 DXF 파일 처리 시 발생하는 LLM 프롬프트 복잡도 및 하드웨어 부하 문제를 해결하기 위해, 기존의 단일 프로세스 추출 방식을 **분산 처리 방식(Distributed Processing)**으로 전환하는 상세 설계도입니다.
2. 데이터 인터페이스 설계 (Data Interface Specification)
2.1 중간 데이터 포맷 (Intermediate JSON Schema)
메인 프로그램이 ezdxf로 전처리하여 서브 프로그램에 전달할 데이터 구조입니다. 서브 프로그램은 이 JSON을 읽어 패턴 매칭을 수행합니다.
{
"metadata": {
"filename": "string",
imtimestamp": "ISO8601"
},
"entities": [
{
"type": "TEXT | MTEXT | LINE | CIRCLE | LWPOLYLINE",
"layer": "string",
"content": "string (텍스트 내용)",
"coordinates": { "x": 0.0, "y": 0.0, "z": 0.0 },
"attributes": { "color": "int", "lineweight": "float" }
}
]
}
3. 컴포넌트별 상세 설계 (Component Detailed Design)
3.1 [Python] Main Processor (Orchestrator)
역할: DXF 전처리, 서브 프로세스 생명주기 관리, 결과 통합 및 DB 저장 요청.
- Class:
DXFPreprocessorload_and_parse(file_path):ezdxf를 사용하여 DXF를 로드하고 엔티티를 추출.generate_intermediate_json(output_path): 추출된 엔티티를 위 JSON 스키마로 변환하여 저장.
- Class:
ExtractionOrchestratorrun_parallel_extractors(input_json_path):subprocess.Popen을 사용하여 5개의 서브 프로그램을 병렬로 실행.monitor_processes(process_list): 모든 프로세스가 종료될 때까지 대기하며 에러 발생 시 로그 기록.aggregate_results(result_files): 각 서브 프로그램이 생성한 JSON 파일들을 읽어 하나의MasterExtractionResult로 병합.
- Class:
DatabaseIntegratorsend_to_backend(merged_data): 병합된 데이터를 .NET API(C#)로 전송.
3.2 [Python] Specialized Extractors (Sub-programs)
역할: 전달받은 JSON에서 특정 정규표현식(Regex) 패턴을 찾아 추출.
-
Common Logic (Base Class:
BaseExtractor)load_input_json(): 전처리된 JSON 로드.apply_regex_pattern(pattern): 엔티티의content필드에 대해 Regex 매칭 수행.save_output_json(): 추출된 결과를result_{type}.json으로 저장.
-
Specific Patterns (Regex Implementation)
dxf_extract_transmitter.py:r"(FIT|FT|LT|PT|TE)\s?-\s?\d+"dxf_extract_valve.py:r"(FCV|LCV|TCV|PCV|XV)\s?-\s?\d+"dxf_extract_gague.py:r"(PG|TG|LG)\s?-\s?\d+"dxf_extract_equipment.py:r"(C|T|F|D|E|B|CT|CH|K)-?\d+"(상세 규칙은 설계서 참조)dxf_extract_pump.py:r"(P|VP)-\d+"
3.3 [C#] Backend Service (Data Persistence)
역할: Python으로부터 전달받은 데이터를 검증하고 ExperionDbContext를 통해 DB에 영구 저장.
- Controller:
PidExtractionController[HttpPost] PostExtractionResult(ExtractionDto dto): Python의 요청을 수신.
- Service:
PidProcessingServiceProcessAndSave(ExtractionDto dto): 데이터 유효성 검사 후PidEquipment엔티티로 변환.
- Repository:
PidRepositorySaveAsync(PidEquipment entity): SQL Server에 저장.
4. 상세 구현 로드맵 (Implementation Roadmap)
Phase 1: 데이터 규격 및 환경 구축
IntermediateDataFormat.json스키마 확정.- Python
ezdxf기반의DXFPreprocessor프로토타입 개발.
Phase 2: 서브 프로그램(Extractor) 개발
BaseExtractor클래스 구현 (JSON 로드/저장/Regex 공통 로직).- 5종의 특화된 Regex 패턴 적용 및 개별 스크립트 완성.
- 검증:
test_dxf_extract_pid1.py를 활용한 추출 정확도 테스트.
Phase 3: 메인 오케스트레이터 개발
subprocess를 이용한 병렬 실행 및 프로세스 모int 모니터링 로직 구현.- 결과 파일 병합(Aggregation) 및 중복 제거 로직 구현.
Phase 4: 백엔드 연동 및 통합 테스트
- C# API 엔드포인트 구현 및 Python
DatabaseIntegrator연동. - E2E 테스트: DXF 파일 투입
\rightarrow분산 추출\rightarrowDB 저장 전체 파이프라인 검증.
5. 예외 처리 및 안정성 전략 (Error Handling)
- DXF 오류: 파일 손상 시
DXFPreprocessor에서 에러 로그 남기고 프로세스 중단. - 서브 프로세스 실패: 특정 서브 프로그램 실패 시, 해당 결과는 제외하되 다른 프로세스 결과는 유지하며
Partial Success상태로 보고. - DB 연결 오류: 재시도(Retry) 로직 적용 및 실패 시 로컬 파일로 결과 백업.