refactor: centralize classifier constants and simplify logic
This commit is contained in:
157
backend/app/services/classifier_constants.py
Normal file
157
backend/app/services/classifier_constants.py
Normal file
@@ -0,0 +1,157 @@
|
||||
"""
|
||||
자재 분류 시스템용 상수 및 키워드 정의
|
||||
중복 로직 제거 및 유지보수성 향상을 위해 중앙 집중화됨
|
||||
"""
|
||||
|
||||
from typing import Dict, List
|
||||
|
||||
# ==============================================================================
|
||||
# 1. 압력 등급 (Pressure Ratings)
|
||||
# ==============================================================================
|
||||
|
||||
# 단순 키워드 목록 (Integrated Classifier용)
|
||||
LEVEL3_PRESSURE_KEYWORDS = [
|
||||
"150LB", "300LB", "600LB", "900LB", "1500LB",
|
||||
"2500LB", "3000LB", "6000LB", "9000LB"
|
||||
]
|
||||
|
||||
# 상세 스펙 및 메타데이터 (Fitting Classifier용)
|
||||
PRESSURE_RATINGS_SPECS = {
|
||||
"150LB": {"max_pressure": "285 PSI", "common_use": "저압 일반용"},
|
||||
"300LB": {"max_pressure": "740 PSI", "common_use": "중압용"},
|
||||
"600LB": {"max_pressure": "1480 PSI", "common_use": "고압용"},
|
||||
"900LB": {"max_pressure": "2220 PSI", "common_use": "고압용"},
|
||||
"1500LB": {"max_pressure": "3705 PSI", "common_use": "고압용"},
|
||||
"2500LB": {"max_pressure": "6170 PSI", "common_use": "초고압용"},
|
||||
"3000LB": {"max_pressure": "7400 PSI", "common_use": "소구경 고압용"},
|
||||
"6000LB": {"max_pressure": "14800 PSI", "common_use": "소구경 초고압용"},
|
||||
"9000LB": {"max_pressure": "22200 PSI", "common_use": "소구경 극고압용"}
|
||||
}
|
||||
|
||||
# 정규식 패턴 (Fitting Classifier용)
|
||||
PRESSURE_PATTERNS = [
|
||||
r"(\d+)LB",
|
||||
r"CLASS\s*(\d+)",
|
||||
r"CL\s*(\d+)",
|
||||
r"(\d+)#",
|
||||
r"(\d+)\s*LB"
|
||||
]
|
||||
|
||||
# ==============================================================================
|
||||
# 2. OLET 키워드 (OLET Keywords)
|
||||
# ==============================================================================
|
||||
# Fitting Classifier와 Integrated Classifier에서 공통 사용
|
||||
OLET_KEYWORDS = [
|
||||
# Full Names
|
||||
"SOCK-O-LET", "WELD-O-LET", "ELL-O-LET", "THREAD-O-LET", "ELB-O-LET",
|
||||
"NIP-O-LET", "COUP-O-LET",
|
||||
# Variations
|
||||
"SOCKOLET", "WELDOLET", "ELLOLET", "THREADOLET", "ELBOLET", "NIPOLET", "COUPOLET",
|
||||
"OLET", "올렛", "O-LET", "SOCKLET", "SOCKET-O-LET", "WELD O-LET", "ELL O-LET",
|
||||
"THREADED-O-LET", "ELBOW-O-LET", "NIPPLE-O-LET", "COUPLING-O-LET",
|
||||
# Abbreviations (Caution: specific context needed sometimes)
|
||||
"SOL", "WOL", "EOL", "TOL", "NOL", "COL"
|
||||
]
|
||||
|
||||
# ==============================================================================
|
||||
# 3. 연결 방식 (Connection Methods)
|
||||
# ==============================================================================
|
||||
LEVEL3_CONNECTION_KEYWORDS = {
|
||||
"SW": ["SW", "SOCKET WELD", "소켓웰드", "SOCKET-WELD", "_SW_"],
|
||||
"THD": ["THD", "THREADED", "NPT", "나사", "THRD", "TR", "_TR", "_THD"],
|
||||
"BW": ["BW", "BUTT WELD", "맞대기용접", "BUTT-WELD", "_BW"],
|
||||
"FL": ["FL", "FLANGED", "플랜지", "FLG", "_FL_"]
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# 4. 재질 키워드 (Material Keywords)
|
||||
# ==============================================================================
|
||||
LEVEL4_MATERIAL_KEYWORDS = {
|
||||
"PIPE": ["A106", "A333", "A312", "A53"],
|
||||
"FITTING": ["A234", "A403", "A420"],
|
||||
"FLANGE": ["A182", "A350"],
|
||||
"VALVE": ["A216", "A217", "A351", "A352"],
|
||||
"BOLT": ["A193", "A194", "A320", "A325", "A490"]
|
||||
}
|
||||
|
||||
GENERIC_MATERIALS = {
|
||||
"A105": ["VALVE", "FLANGE", "FITTING"],
|
||||
"316": ["VALVE", "FLANGE", "FITTING", "PIPE", "BOLT"],
|
||||
"304": ["VALVE", "FLANGE", "FITTING", "PIPE", "BOLT"]
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# 5. 메인 분류 키워드 (Level 1 Type Keywords)
|
||||
# ==============================================================================
|
||||
LEVEL1_TYPE_KEYWORDS = {
|
||||
"BOLT": [
|
||||
"FLANGE BOLT", "U-BOLT", "U BOLT", "BOLT", "STUD", "NUT", "SCREW",
|
||||
"WASHER", "볼트", "너트", "스터드", "나사", "와셔", "유볼트"
|
||||
],
|
||||
"VALVE": [
|
||||
"VALVE", "GATE", "BALL", "GLOBE", "CHECK", "BUTTERFLY", "NEEDLE",
|
||||
"RELIEF", "SIGHT GLASS", "STRAINER", "밸브", "게이트", "볼", "글로브",
|
||||
"체크", "버터플라이", "니들", "릴리프", "사이트글라스", "스트레이너"
|
||||
],
|
||||
"FLANGE": [
|
||||
"FLG", "FLANGE", "플랜지", "프랜지", "ORIFICE", "SPECTACLE", "PADDLE",
|
||||
"SPACER", "BLIND", "REDUCING FLANGE", "RED FLANGE"
|
||||
],
|
||||
"PIPE": [
|
||||
"PIPE", "TUBE", "파이프", "배관", "SMLS", "SEAMLESS"
|
||||
],
|
||||
"FITTING": [
|
||||
# Standard Fittings
|
||||
"ELBOW", "ELL", "TEE", "REDUCER", "CAP", "COUPLING", "NIPPLE", "SWAGE", "PLUG",
|
||||
"엘보", "티", "리듀서", "캡", "니플", "커플링", "플러그", "CONC", "ECC",
|
||||
# Instrument Fittings
|
||||
"SWAGELOK", "DK-LOK", "HY-LOK", "SUPERLOK", "TUBE FITTING", "COMPRESSION",
|
||||
"UNION", "FERRULE", "NUT & FERRULE", "MALE CONNECTOR", "FEMALE CONNECTOR",
|
||||
"TUBE ADAPTER", "PORT CONNECTOR", "CONNECTOR"
|
||||
] + OLET_KEYWORDS, # OLET Keywords 병합
|
||||
"GASKET": [
|
||||
"GASKET", "GASK", "가스켓", "SWG", "SPIRAL"
|
||||
],
|
||||
"INSTRUMENT": [
|
||||
"GAUGE", "TRANSMITTER", "SENSOR", "THERMOMETER", "계기", "게이지", "트랜스미터", "센서"
|
||||
],
|
||||
"SUPPORT": [
|
||||
"URETHANE BLOCK", "URETHANE", "BLOCK SHOE", "CLAMP", "SUPPORT", "HANGER",
|
||||
"SPRING", "우레탄", "블록", "클램프", "서포트", "행거", "스프링", "PIPE CLAMP"
|
||||
],
|
||||
"PLATE": [
|
||||
"PLATE", "PL", "CHECKER PLATE", "판재", "철판"
|
||||
],
|
||||
"STRUCTURAL": [
|
||||
"H-BEAM", "BEAM", "ANGLE", "CHANNEL", "H-SECTION", "I-BEAM", "형강", "앵글", "채널"
|
||||
]
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# 6. 서브타입 키워드 (Level 2 Subtype Keywords)
|
||||
# ==============================================================================
|
||||
LEVEL2_SUBTYPE_KEYWORDS = {
|
||||
"VALVE": {
|
||||
"GATE": ["GATE VALVE", "GATE", "게이트 밸브"],
|
||||
"BALL": ["BALL VALVE", "BALL", "볼 밸브"],
|
||||
"GLOBE": ["GLOBE VALVE", "GLOBE", "글로브 밸브"],
|
||||
"CHECK": ["CHECK VALVE", "CHECK", "체크 밸브", "역지 밸브"]
|
||||
},
|
||||
"FLANGE": {
|
||||
"WELD_NECK": ["WELD NECK", "WN", "웰드넥"],
|
||||
"SLIP_ON": ["SLIP ON", "SO", "슬립온"],
|
||||
"BLIND": ["BLIND", "BL", "막음", "차단"],
|
||||
"SOCKET_WELD": ["SOCKET WELD", "소켓웰드"]
|
||||
},
|
||||
"BOLT": {
|
||||
"HEX_BOLT": ["HEX BOLT", "HEXAGON", "육각 볼트"],
|
||||
"STUD_BOLT": ["STUD BOLT", "STUD", "스터드 볼트"],
|
||||
"U_BOLT": ["U-BOLT", "U BOLT", "유볼트"]
|
||||
},
|
||||
"SUPPORT": {
|
||||
"URETHANE_BLOCK": ["URETHANE BLOCK", "BLOCK SHOE", "우레탄 블록"],
|
||||
"CLAMP": ["CLAMP", "클램프"],
|
||||
"HANGER": ["HANGER", "SUPPORT", "행거", "서포트"],
|
||||
"SPRING": ["SPRING", "스프링"]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user