File size: 5,084 Bytes
2959ef9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
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
|