修复: OCR md文档预检 + 日志显示完整文本

1. 分割前 md 预检:在时间戳分割前用 _is_markdown_document 检查整行,
   避免分割打断 md 链接/标题语法导致碎片漏过_BqDgv_过滤
2. 强化 _is_markdown_document:新增 .md) 文件引用模式
   (如 gin.md) 分割后残缺链接)+ 内联 # # 标题标记
3. 调试日志不再截断:normalize/clean 显示前120字符+长度,
   split parts 显示前60字符,定位问题不靠猜
This commit is contained in:
youpaishidifu
2026-07-26 20:04:54 +08:00
parent 2ccb677abf
commit fd077e343c
21 changed files with 13 additions and 3 deletions
+13 -3
View File
@@ -726,19 +726,23 @@ class MessageMonitor:
for i, rl in enumerate(ocr_lines):
before = rl
rl = self._normalize_ocr_text(rl)
logger.debug(f"[ocr] stage[{i}] normalize: {before[:50]!r} -> {rl[:50]!r}")
logger.debug(f"[ocr] stage[{i}] normalize: len={len(before)} -> {rl[:120]!r}")
# 先清理 & 碎片(OCR 把时间戳右边缘的 : 读成 &)
# 必须在时间戳分割前做,否则 "13:5&07" 无法被时间戳正则捕获
rl = rl.replace('&', '')
# 把全角 :统一成半角 :,让后续正则统一匹配
rl = rl.replace(':', ':')
logger.debug(f"[ocr] stage[{i}] clean: {rl[:80]!r}")
logger.debug(f"[ocr] stage[{i}] clean: len={len(rl)} -> {rl[:120]!r}")
# 分割"msg1 14:24 msg2 13:27 msg3" → ["msg1", "msg2", "msg3"]
# 使用更宽松的 \d{1,2}(允许单数字),因为 & 移除后 "5&07"→"507"
# 打破的时间戳如 "13:5 07" 也尽量捕获
rl = re.sub(r'\s+', ' ', rl) # 多重空格压为一个
# ⭐ 分割前 md 预检:rl 中 md 语法完整(链接、标题等),分割后碎片会丢失语法
if self._is_markdown_document(rl):
logger.debug(f"[ocr] stage[{i}] markdown document detected pre-split, skip line")
continue
parts = re.split(r'(\d{1,2}:\d{1,2}(?::\d{1,2})?)', rl)
logger.debug(f"[ocr] stage[{i}] split -> {len(parts)} parts: {[p[:30] for p in parts if p.strip()]}")
logger.debug(f"[ocr] stage[{i}] split -> {len(parts)} parts: {[p[:60] for p in parts if p.strip()]}")
buf = ''
for part in parts:
if re.match(r'^\d{1,2}:\d{1,2}', part):
@@ -1125,6 +1129,9 @@ class MessageMonitor:
# 包含 markdown 链接 [text](url)
if re.search(r'\[.+?\]\(.+?\)', text):
return True
# 包含 .md 文件引用(如 "gin.md)" 分割后断开的链接)
if re.search(r'\S+\.md\)', text):
return True
# 行首是 - 或 * 列表项(标准 md 列表)
if re.match(r'^[\-\*]\s', text):
return True
@@ -1135,6 +1142,9 @@ class MessageMonitor:
pipes = text.count('|')
if pipes >= 3:
return True
# 内联 # # 标题标记(如 "# # 必装依赖" → 分割后 `# #` 或 `# #`)
if re.search(r'#\s*#', text):
return True
return False
def _paste_and_send(self, platform: str, text: str) -> bool: