Commit 7e667847 authored by Roman Alifanov's avatar Roman Alifanov

code separation

parent b35dcbd8
from pymorphy3 import MorphAnalyzer
morph = MorphAnalyzer()
import logging
logger = logging.getLogger(__name__)
import emoji
import re
import unicodedata
def normalize_text_to_infinitive(text, chat_id):
chat_id = chat_id
"""
Приводит текст к нижнему регистру, нормализует слова до начальной формы,
удаляет лишние символы и обрабатывает смешанные раскладки.
"""
if not text: # Проверяем, что текст не None или пустой
return []
# Приведение текста к единой форме Unicode (NFKC)
text = unicodedata.normalize("NFKC", text)
# Заменяем все знаки препинания и спецсимволы внутри слов на пробелы
text = re.sub(r'[\.,;!?"()\-:—/\\\[\]{}<>]', ' ', text) # Заменяем все знаки препинания на пробелы
text = re.sub(r'\s+', ' ', text) # Убираем лишние пробелы
# Приведение текста к нижнему регистру
text = text.lower()
# Оставляем только алфавитные символы, цифры и эмодзи
text = ''.join(ch for ch in text if ch.isalnum() or ch.isspace() or emoji.is_emoji(ch))
# Токенизация
words = text.split()
# Нормализация слов до начальной формы (с использованием морфологического анализатора)
normalized_words = []
for word in words:
try:
normalized_words.append(morph.parse(word)[0].normal_form)
except Exception as e:
# Если слово не удалось обработать, добавляем его как есть
logger.error("Normalisation error '%s': %s", word, e, extra={"chat_id": chat_id})
normalized_words.append(word)
return normalized_words
def extract_emojis(text, chat_id):
chat_id = chat_id
try:
return ''.join(c for c in text if emoji.is_emoji(c))
except Exception as e:
logger.error("Extracting emojis error: %s", e, extra={"chat_id": chat_id})
return ''
def has_mixed_layout(text, chat_id):
chat_id = chat_id
"""
Проверяет, содержит ли текст слова, написанные на смешанной раскладке.
Например: "пр1в3т", "teст", "нeт".
"""
try:
cyrillic_letters = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
latin_letters = "abcdefghijklmnopqrstuvwxyz"
words = text.split()
mixed_words = [] # Список для слов со смешанной раскладкой
for word in words:
has_cyrillic = any(char in cyrillic_letters for char in word.lower())
has_latin = any(char in latin_letters for char in word.lower())
if has_cyrillic and has_latin:
mixed_words.append(word) # Добавляем слово в список
if len(mixed_words) > 1:
logger.info("Words with mixed layout: %s", ", ".join(mixed_words), extra={"chat_id": chat_id})
return True # Найдено больше одного слова
return False
except Exception as e:
logger.error("Checking error: %s", e, extra={"chat_id": chat_id})
return False
# Проверка на арабские символы в имени
def is_arabic_name(name: str) -> bool:
"""Проверяет, содержит ли имя арабские символы."""
arabic_regex = re.compile("[\u0600-\u06FF]") # Диапазон арабских символов в Unicode
return bool(arabic_regex.search(name))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment