Gainward777's picture
Upload 6 files
f556b0c verified
import re
def extract_years(text):
"""
Извлекает сочетание числа и слова, указывающего возраст (например: '50 лет', '21 years').
"""
# Регулярное выражение ищет числа и слова 'лет' или 'years' с учетом регистра
match = re.search(r'\b(?<!\d)(\d{1,2})\s*(лет|years)\b', text, re.IGNORECASE)
if match:
# Приводим слово 'лет' или 'years' к исходному регистру
return f"{match.group(1)} {match.group(2)}"
return None
def extract_production_year(text):
"""
Извлекает год производства (четырехзначное число в диапазоне 1900–2099) из строки.
Например: '2019'.
"""
match = re.search(r'\b(19\d{2}|20\d{2})\b', text)
if match:
return match.group(1)
return None
def extract_alcohol_content(text):
"""
Извлекает содержание алкоголя из строки.
Например: '40%'.
"""
match = re.search(r'(\d{1,2}(?:[.,]\d+)?\s*%)', text)
if match:
# Заменяем запятую на точку для единообразия (если нужно)
return match.group(1).replace(' ', '').replace(',', '.')
return None
def is_volume(value):
"""
Проверяет, является ли значение валидным объемом (<= 10 литров).
"""
try:
volume = float(value)
return volume if volume <= 10 else None
except ValueError:
return None
def extract_volume_or_number(text):
"""
Извлекает объем в литрах или число с плавающей точкой из строки.
Например: '0,75л', '0.5', или '1,5 л'.
"""
# Попытка найти объем с буквой 'л' или без пробела перед ней
match_with_l = re.search(r'(\d+(?:[\.,]\d+)?\s*[лЛ]|(?:\d+(?:[\.,]\d+)?[лЛ]))', text)
if match_with_l:
return is_volume(match_with_l.group(1).replace(',', '.').replace('л', '').replace('Л', '').strip())
# Если не найдено, ищем просто число с плавающей точкой
match_number = re.search(r'(?<!№)\b(\d{1,2}(?:[\.,]\d+))\b(?!\s*(№|-er|er|\d{3,}))', text)
if match_number:
return is_volume(match_number.group(1).replace(',', '.'))
return None