31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
"""节点:页面分类 —— 依据文本层字符数与图片覆盖占比决定解析路线。"""
|
|
import config
|
|
|
|
|
|
def classify(state):
|
|
page_texts = state["page_texts"]
|
|
page_coverages = state["page_coverages"]
|
|
page_has_imgs = state.get("page_has_imgs") or [False] * len(page_texts)
|
|
total = state["total_pages"]
|
|
page_types = []
|
|
for i in range(total):
|
|
text = (page_texts[i] or "").strip()
|
|
n = len(text)
|
|
cov = page_coverages[i] if i < len(page_coverages) else 0.0
|
|
has_img = page_has_imgs[i] if i < len(page_has_imgs) else False
|
|
if n < 5 and not has_img:
|
|
t = "blank" # 无文字无图片 → 空白页
|
|
elif n < config.TEXT_PAGE_MIN_CHARS:
|
|
t = "scanned" # 几乎没有可复制文本(但含整页/大图)→ 影印页
|
|
elif cov >= config.MIXED_IMG_COVERAGE:
|
|
t = "mixed" # 有文本但图片占比高 → 视觉页
|
|
else:
|
|
t = "text" # 以文本层为准
|
|
page_types.append(t)
|
|
counts = {t: page_types.count(t) for t in set(page_types)}
|
|
return {
|
|
"page_types": page_types,
|
|
"status": "running",
|
|
"logs": [f"页面分类:{counts}"],
|
|
}
|