From d1cd550c1e147857c4a353f3bbf1484cbfb1b4d3 Mon Sep 17 00:00:00 2001 From: Shuming Liu Date: Sat, 11 Apr 2026 14:19:54 +0800 Subject: [PATCH] fixed some contitions --- server/file_association.py | 44 ++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/server/file_association.py b/server/file_association.py index 2fa0c4b..3f0344f 100644 --- a/server/file_association.py +++ b/server/file_association.py @@ -243,24 +243,54 @@ def read_docx_content(doc_path: Path) -> List[str]: # 检查当前起始位置是否是 6 行一组模式 def is_six_row_group(lines: list, start_idx: int) -> bool: """检查从 start_idx 开始是否是 6 行一组""" - if start_idx + 1 < len(lines): + if start_idx + 5 < len(lines): return is_url_line(lines[start_idx + 1]) and \ - is_datetime_line(lines[start_idx + 2]) + is_datetime_line(lines[start_idx + 2]) and \ + is_url_line(lines[start_idx + 4]) and \ + is_datetime_line(lines[start_idx + 5]) + return False + + # 检查当前起始位置是否是 5 行一组模式 + def is_five_row_group(lines: list, start_idx: int) -> bool: + """检查从 start_idx 开始是否是 5 行一组""" + if start_idx + 4 < len(lines): + return is_url_line(lines[start_idx + 1]) and \ + is_datetime_line(lines[start_idx + 2]) and \ + is_url_line(lines[start_idx + 4]) return False # 按组处理,每组独立判断 offset - # 规则:如果第二行是网址且第三行是日期/时间,则当前 6 行为一组;否则丢弃第一行,继续判断 + # 规则:优先检查 6 行一组,如果是则合并 6 行;否则检查 5 行一组,如果是则合并 5 行并补充时间;否则丢弃第一行,继续判断 result = [] i = 0 - while i + 5 <= len(lines): - # 检查当前位置开始是否是 6 行一组模式 - if is_six_row_group(lines, i): + while i + 4 <= len(lines): + if i + 5 < len(lines) and is_six_row_group(lines, i): # 是 6 行一组,合并这 6 行 combined = '\t'.join(lines[i:i+6]) + # 检查并补充缺失的时间信息 + parts = combined.split('\t') + if len(parts) >= 3 and not is_datetime_line(parts[2]): + parts[2] = '1970-1-1' + if len(parts) >= 6 and not is_datetime_line(parts[5]): + parts[5] = '1970-1-1' + combined = '\t'.join(parts) result.append(combined) i += 6 + elif is_five_row_group(lines, i): + # 是 5 行一组,合并这 5 行并补充时间2 + combined = '\t'.join(lines[i:i+5]) + # 检查并补充缺失的时间信息 + parts = combined.split('\t') + if len(parts) >= 3 and not is_datetime_line(parts[2]): + parts[2] = '1970-1-1' + # 为第二组补充时间 + if len(parts) >= 5: + parts.append('1970-1-1') + combined = '\t'.join(parts) + result.append(combined) + i += 5 else: - # 不是 6 行一组,丢弃当前行(相当于 offset+1) + # 不是有效组,丢弃当前行(相当于 offset+1) i += 1 # 处理剩余行(不足 6 行的) while i < len(lines):