Spaces:
Sleeping
Sleeping
""" | |
Модуль содержит класс для представления структуры документа. | |
""" | |
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 |