from typing import Dict, List, Any import logic def preprocess_text(text: str, lang: str) -> List[Dict[str, Any]]: """ Разбирает текст на предложения и токены. Сохраняет: - исходный текст токена (text) - пробел после токена (whitespace) - лемму (lemma) - флаг значимости (is_significant) """ if not text or not text.strip(): return [] doc = logic.get_doc(text, lang) result: List[Dict[str, Any]] = [] for idx, sent in enumerate(doc.sents): tokens: List[Dict[str, Any]] = [] lemmas_clean: List[str] = [] for t in sent: lemma = t.lemma_.lower().strip() if t.lemma_ else t.text.lower().strip() is_significant = bool(logic.is_valid_token(t)) token_data = { "text": t.text, "whitespace": t.whitespace_, "lemma": lemma, "is_significant": is_significant, "is_punct": bool(t.is_punct), "is_space": bool(t.is_space), } tokens.append(token_data) if is_significant and lemma: lemmas_clean.append(lemma) result.append( { "index": idx, "raw_text": sent.text, "tokens": tokens, "lemmas_clean": lemmas_clean, } ) return result