Sale_Agent_Data_Indexing / data_helper.py
anhkhoiphan's picture
Initial commit on HF Space
2959ef9
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