자재 분류 시스템 개선 및 통합 분류기 구현

- 통합 분류기 구현으로 키워드 우선순위 체계 적용
- HEX.PLUG → FITTING 분류 수정 (기존 VALVE 오분류 해결)
- 플랜지/밸브가 볼트로 오분류되는 문제 해결 (A193, A194 재질 키워드 우선순위 적용)
- 피팅 재질(A234, A403, A420) 기반 분류 추가
- 니플 길이 정보 보존 로직 개선
- 파이프 끝단 가공 정보를 구매 단계에서 제외
- PostgreSQL 사용으로 RULES.md 업데이트
- 상호 배타적 키워드 시스템 구현 (Level 1 키워드 우선)
This commit is contained in:
Hyungi Ahn
2025-07-23 14:38:49 +09:00
parent 0d31d8b3fc
commit 9e5250a8f9
9 changed files with 327 additions and 121 deletions

View File

@@ -212,15 +212,20 @@ def classify_valve(dat_file: str, description: str, main_nom: str, length: float
desc_upper = description.upper()
dat_upper = dat_file.upper()
# 1. 명칭 우선 확인 (밸브 키워드가 있으면 밸브)
valve_keywords = ['VALVE', 'GATE', 'BALL', 'GLOBE', 'CHECK', 'BUTTERFLY', 'NEEDLE', 'RELIEF', 'SOLENOID', 'PLUG', '밸브', '게이트', '', '글로브', '체크', '버터플라이', '니들', '릴리프', '솔레노이드', '플러그']
is_valve = any(keyword in desc_upper or keyword in dat_upper for keyword in valve_keywords)
# 1. 밸브 키워드 확인 (재질만 있어도 통합 분류기가 이미 밸브로 분류했으므로 진행)
valve_keywords = ['VALVE', 'GATE', 'BALL', 'GLOBE', 'CHECK', 'BUTTERFLY', 'NEEDLE', 'RELIEF', 'SOLENOID', '밸브', '게이트', '', '글로브', '체크', '버터플라이', '니들', '릴리프', '솔레노이드']
has_valve_keyword = any(keyword in desc_upper or keyword in dat_upper for keyword in valve_keywords)
if not is_valve:
# 밸브 재질 확인 (A216, A217, A351, A352)
valve_materials = ['A216', 'A217', 'A351', 'A352']
has_valve_material = any(material in desc_upper for material in valve_materials)
# 밸브 키워드도 없고 밸브 재질도 없으면 UNKNOWN
if not has_valve_keyword and not has_valve_material:
return {
"category": "UNKNOWN",
"overall_confidence": 0.0,
"reason": "밸브 키워드 없음"
"reason": "밸브 키워드 및 재질 없음"
}
# 2. 재질 분류 (공통 모듈 사용)