File size: 1,492 Bytes
694e586
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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