Spaces:
Runtime error
Runtime error
| """ | |
| Модуль содержит класс для представления структуры документа. | |
| """ | |
| from dataclasses import dataclass, field | |
| from typing import Any, Callable | |
| from .parsed_formula import ParsedFormula | |
| from .parsed_image import ParsedImage | |
| from .parsed_meta import ParsedMeta | |
| from .parsed_structure import ParsedStructure | |
| from .parsed_table import ParsedTable | |
| from .parsed_text_block import ParsedTextBlock | |
| class ParsedDocument(ParsedStructure): | |
| """ | |
| Документ, полученный в результате парсинга. | |
| """ | |
| name: str = "" | |
| type: str = "" | |
| meta: ParsedMeta = field(default_factory=ParsedMeta) | |
| paragraphs: list[ParsedTextBlock] = field(default_factory=list) | |
| tables: list[ParsedTable] = field(default_factory=list) | |
| images: list[ParsedImage] = field(default_factory=list) | |
| formulas: list[ParsedFormula] = field(default_factory=list) | |
| def to_string(self) -> str: | |
| """ | |
| Преобразует документ в строковое представление. | |
| Returns: | |
| str: Строковое представление документа. | |
| """ | |
| result = [f"Документ: {self.name} (тип: {self.type})"] | |
| if self.paragraphs: | |
| result.append("\nПараграфы:") | |
| for p in self.paragraphs: | |
| result.append(p.to_string()) | |
| if self.tables: | |
| result.append("\nТаблицы:") | |
| for t in self.tables: | |
| result.append(t.to_string()) | |
| if self.images: | |
| result.append("\nИзображения:") | |
| for i in self.images: | |
| result.append(i.to_string()) | |
| if self.formulas: | |
| result.append("\nФормулы:") | |
| for f in self.formulas: | |
| result.append(f.to_string()) | |
| return "\n".join(result) | |
| def apply(self, func: Callable[[str], str]) -> None: | |
| """ | |
| Применяет функцию ко всем строковым элементам документа. | |
| Args: | |
| func (Callable[[str], str]): Функция для применения к текстовым элементам. | |
| """ | |
| self.name = func(self.name) | |
| self.type = func(self.type) | |
| # Применяем к параграфам | |
| for p in self.paragraphs: | |
| p.apply(func) | |
| # Применяем к таблицам | |
| for t in self.tables: | |
| t.apply(func) | |
| # Применяем к изображениям | |
| for i in self.images: | |
| i.apply(func) | |
| # Применяем к формулам | |
| for f in self.formulas: | |
| f.apply(func) | |
| def to_dict(self) -> dict[str, Any]: | |
| """ | |
| Преобразует документ в словарь. | |
| Returns: | |
| dict[str, Any]: Словарное представление документа. | |
| """ | |
| # Преобразуем тип в строку, если это объект FileType | |
| type_str = str(self.type) if not isinstance(self.type, str) else self.type | |
| result = { | |
| 'name': self.name, | |
| 'type': type_str, | |
| 'meta': self.meta.to_dict(), | |
| 'paragraphs': [p.to_dict() for p in self.paragraphs], | |
| 'tables': [t.to_dict() for t in self.tables], | |
| 'images': [i.to_dict() for i in self.images], | |
| 'formulas': [f.to_dict() for f in self.formulas] | |
| } | |
| return result |