24 lines
937 B
Python
24 lines
937 B
Python
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
|