41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# 扫描 ONEBOT 手册 PDF: 定位每个系列的章节页范围 + 参数/尺寸关键词页
|
|
# 用法: python tools\scan-manual-pages.py
|
|
import fitz, os, re, sys
|
|
|
|
pdf = r"OnebotCatalog\ONEBOT - 直线气缸 - 中文.pdf"
|
|
doc = fitz.open(pdf)
|
|
DIGITS = {0xF6B1 + i: str(i) for i in range(10)}
|
|
|
|
def dec(text):
|
|
return "".join(DIGITS.get(ord(ch), ch) for ch in text)
|
|
|
|
# 系列代码 → 显示名 (来自 build-onebot-catalog.ps1)
|
|
SERIES = ["KC", "KCB", "KSB", "KCS", "KS", "KSU", "M", "MS", "MSC", "MAL", "MALC"]
|
|
KEYWORDS = ["订购", "规格", "参数", "外形尺寸", "符号", "特性", "理论出力", "重量", "结构"]
|
|
|
|
print("总页数:", doc.page_count)
|
|
pages = []
|
|
for i in range(doc.page_count):
|
|
t = dec(doc[i].get_text())
|
|
pages.append(t)
|
|
|
|
# 1) 每页出现的系列码标题 (页首大字号? 简化: 整页文本匹配)
|
|
hits = {}
|
|
for i, t in enumerate(pages):
|
|
found = set()
|
|
for s in SERIES:
|
|
# 系列标题一般单独成行, 如 "KC 系列" / "KC系列"
|
|
if re.search(r"(?m)^\s*" + s + r"\s*系列", t) or re.search(r"(?m)^\s*" + s + r"系列", t):
|
|
found.add(s)
|
|
if found:
|
|
hits[i + 1] = sorted(found)
|
|
kw = [k for k in KEYWORDS if k in t]
|
|
print(f"p{i+1:3d} 系列: {found} 关键词: {kw[:4]}")
|
|
|
|
print("\n--- 每页系列线索 (含页码的系列码出现) ---")
|
|
for i, t in enumerate(pages):
|
|
for s in SERIES:
|
|
if re.search(r"(?m)^\s*" + s + r"\s*$", t): # 整页只有系列码的目录页可能
|
|
print(f"p{i+1:3d} 独立行: {s}")
|