import re from typing import Any _PATTERN = re.compile(r"\b(?:кандидат|доктор)\s+[\w\s-]{0,80}?\s+наук\b|\bph\.?\s*d\.?\b", re.IGNORECASE) def academic_degrees(data: dict[str, Any] | None) -> list[str]: degrees = [] for section in (data or {}).get("sections") or []: if not isinstance(section, dict) or not re.search(r"уч[её]н.*степен|academic degree", str(section.get("title") or ""), re.IGNORECASE): continue values = [ *(entry.get("text") for entry in section.get("year_entries") or [] if isinstance(entry, dict)), *(section.get("paragraphs") or []), *(section.get("items") or []), section.get("raw_text"), ] for value in values: text = str(value or "").strip() if text and _PATTERN.search(text) and text not in degrees: degrees.append(text) return degrees