core/utils/extract_text.py

61 lines
1.6 KiB
Python
Raw Normal View History

2025-04-27 09:53:49 +00:00
"""
Модуль для обработки HTML-фрагментов
"""
2025-05-16 06:23:48 +00:00
import trafilatura
def extract_text(html: str) -> str:
"""
Извлекает текст из HTML-фрагмента.
Args:
html: HTML-фрагмент
Returns:
str: Текст из HTML-фрагмента
"""
return trafilatura.extract(
wrap_html_fragment(html),
include_comments=False,
include_tables=False,
include_images=False,
include_formatting=False,
)
2025-04-27 09:53:49 +00:00
def wrap_html_fragment(fragment: str) -> str:
"""
Оборачивает HTML-фрагмент в полную HTML-структуру для корректной обработки.
2025-05-16 06:23:48 +00:00
2025-04-27 09:53:49 +00:00
Args:
fragment: HTML-фрагмент для обработки
2025-05-16 06:23:48 +00:00
2025-04-27 09:53:49 +00:00
Returns:
str: Полный HTML-документ
2025-05-16 06:23:48 +00:00
2025-04-27 09:53:49 +00:00
Example:
>>> wrap_html_fragment("<p>Текст параграфа</p>")
'<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><p>Текст параграфа</p></body></html>'
"""
if not fragment or not fragment.strip():
return fragment
2025-05-16 06:23:48 +00:00
2025-04-27 09:53:49 +00:00
# Проверяем, является ли контент полным HTML-документом
2025-05-16 06:23:48 +00:00
is_full_html = fragment.strip().startswith("<!DOCTYPE") or fragment.strip().startswith("<html")
2025-04-27 09:53:49 +00:00
# Если это фрагмент, оборачиваем его в полный HTML-документ
if not is_full_html:
return f"""<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
{fragment}
</body>
</html>"""
2025-05-16 06:23:48 +00:00
return fragment