diff --git a/site/parser.py b/site/parser.py index a22154b..d49c66f 100644 --- a/site/parser.py +++ b/site/parser.py @@ -154,7 +154,7 @@ def _parse_pdf(file_bytes: bytes) -> dict: tables = page.extract_tables() if tables: for tbl in tables: - if tbl and _table_has_content(tbl, min_fill_ratio=0.3): + if tbl and _table_has_content(tbl): result["elements"].append({ "type": "table", "rows": tbl, @@ -168,18 +168,22 @@ def _parse_pdf(file_bytes: bytes) -> dict: def _table_has_content(tbl: list, min_fill_ratio: float = 0.0) -> bool: """ - Проверить что таблица содержит осмысленные данные. + Проверить что таблица содержит осмысленные ТАБЛИЧНЫЕ данные. - Фильтры: - - Хотя бы одна непустая ячейка - - Не менее min_fill_ratio ячеек заполнены (по умолчанию 0 — без фильтра) + Отбрасываем: + - Полностью пустые + - Одна строка (обычно это текст, не таблица) + - Менее 40% ячеек заполнены """ if not tbl or not tbl[0]: return False + # Одна строка — не таблица, а текст + if len(tbl) <= 1: + return False + total = 0 filled = 0 - all_text = "" for row in tbl: if not row: @@ -189,15 +193,13 @@ def _table_has_content(tbl: list, min_fill_ratio: float = 0.0) -> bool: cell_str = str(cell).strip() if cell else "" if cell_str: filled += 1 - all_text += " " + cell_str if filled == 0: return False - # Фильтр по доле заполненных ячеек - if min_fill_ratio > 0 and total > 0: - if filled / total < min_fill_ratio: - return False + # Не менее 40% ячеек должны быть заполнены + if total > 0 and filled / total < 0.4: + return False return True