Spaces:
Sleeping
Sleeping
| from typing import Optional | |
| import re | |
| def extract_plugs_max_current(spec: str) -> Optional[int]: | |
| """Extract max current for plugs product in Ampe""" | |
| try: | |
| if not spec: | |
| return None | |
| # Pattern to match "Dòng điện ổ cắm tối đa: XA" where X is the current value | |
| current_patterns = [ | |
| r'dòng điện ổ cắm tối đa:\s*(\d+)\s*A', | |
| r'dòng điện ổ cắm tối đa:\s*(\d+)A', | |
| ] | |
| for pattern in current_patterns: | |
| current_match = re.search(pattern, spec, re.IGNORECASE) | |
| if current_match: | |
| return int(current_match.group(1)) | |
| return None | |
| except Exception: | |
| return None | |
| def extract_power(spec: str) -> Optional[int]: | |
| """Extract power consumption in watts""" | |
| try: | |
| # # Pattern 1: XW/Ym format - return floor(X/Y) | |
| # power_per_meter_pattern = r'(?:Công suất danh định|công suất danh định|Công suất|công suất).*?[:]\s*(\d+)[Ww]/(\d+)m' | |
| # per_meter_match = re.search(power_per_meter_pattern, spec, re.IGNORECASE) | |
| # if per_meter_match: | |
| # watts = int(per_meter_match.group(1)) | |
| # meters = int(per_meter_match.group(2)) | |
| # return watts // meters | |
| # Pattern 2: XW format - return X (exclude tối đa, chịu tải, etc.) | |
| power_pattern = r'(?:Công suất danh định|công suất danh định|Công suất|công suất)(?!.*(?:tối đa|chịu tải|đầu ra)).*?[:]\s*(\d+)\s*[Ww]' | |
| power_match = re.search(power_pattern, spec, re.IGNORECASE) | |
| if power_match: | |
| return int(power_match.group(1)) | |
| except: | |
| return None | |
| def extract_ceiling_hole_diameter2(spec: str) -> Optional[int]: | |
| """Extract ceiling hole diameter in mm for sp chieu sang""" | |
| hole_patterns = [ | |
| r'(?:[đĐ]ường kính lỗ khoét trần|đường kính lỗ khoét trần).*?(\d+)', | |
| r'(?:lỗ khoét|Lỗ khoét).*?(\d+)', | |
| r'(?:lỗ khoét trần).*?(\d+)', | |
| r"[kK]ích\s*thước\s*lỗ\s*khoét\s*trần\s*:\s*(\d+)\s*mm" | |
| ] | |
| for pattern in hole_patterns: | |
| hole_match = re.search(pattern, spec, re.IGNORECASE) | |
| if hole_match: | |
| return int(hole_match.group(1)) | |
| def extract_dong_danh_dinh(spec: str): | |
| try: | |
| patterns = [ | |
| r"[dD]òng\s*(?:ngắn\s*mạch\s*)?danh\s*định\s*:\s*(\d+)A", | |
| r'(?:Dòng điện định mức|dòng điện định mức).*?(\d+(?:[.,]\d+)?)\s*(?:A|Ampe|Amp)' | |
| ] | |
| for p in patterns: | |
| match = re.search(p, spec, re.IGNORECASE) | |
| if match: | |
| return int(match.group(1)) | |
| return None | |
| except: | |
| return None | |
| def extract_cable_length(spec: str) -> Optional[float]: | |
| """Lấy chiều dài dây""" | |
| try: | |
| length_patterns = [ | |
| r'(?:Chiều dài dây|chiều dài dây).*?:?\s*([\d\.,]+)\s*(?:m|mét|meter)', | |
| r'(?:Dây dài|dây dài).*?:?\s*([\d\.,]+)\s*(?:m|mét|meter)', | |
| r'(?:Chiều dài|chiều dài).*?dây.*?:?\s*([\d\.,]+)\s*(?:m|mét|meter)', | |
| r'(?:Dây|dây).*?(?:dài|chiều dài).*?:?\s*([\d\.,]+)\s*(?:m|mét|meter)' | |
| ] | |
| for pattern in length_patterns: | |
| length_match = re.search(pattern, spec, re.IGNORECASE) | |
| if length_match: | |
| # Convert comma to dot for decimal values | |
| length_str = length_match.group(1).replace(',', '.') | |
| return float(length_str) | |
| return None | |
| except: | |
| return None | |
| def extract_voltage(model: str) -> Optional[int]: | |
| """Trích xuất thông tin điện áp từ Mã Sản Phẩm""" | |
| try: | |
| if not model: | |
| return None | |
| voltage_patterns = [ | |
| r'(\d+)V', | |
| ] | |
| for pattern in voltage_patterns: | |
| voltage_match = re.search(pattern, model, re.IGNORECASE) | |
| if voltage_match: | |
| return int(voltage_match.group(1)) | |
| return None | |
| except Exception: | |
| return None | |
| def extract_tinh_nang(model : str, name : str) -> Optional[str]: | |
| """Trích xuất thông tin về tính năng: đổi màu/xoay góc""" | |
| try: | |
| if not model or not name: | |
| return None | |
| model_upper = model.upper() | |
| name_lower = name.lower() | |
| if "ĐM" in model_upper: | |
| return "đổi màu" | |
| if "xoay góc" in name_lower: | |
| return "xoay góc" | |
| return None | |
| except: | |
| return None | |
| def extract_he_thong_hoa_luoi_pha(name: str) -> Optional[str]: | |
| """Trích xuất thông tin hệ thống hoa luợi""" | |
| try: | |
| if not name: | |
| return None | |
| name_lower = name.lower() | |
| if "1 pha" in name_lower: | |
| return "1 pha" | |
| if "3 pha" in name_lower: | |
| return "3 pha" | |
| return None | |
| except: | |
| return None | |