修复字符偏移2

This commit is contained in:
sansen
2026-08-07 18:12:19 +08:00
parent 29d14ab817
commit 5c8a62c974
+17 -3
View File
@@ -251,8 +251,8 @@ _patterns_dynasty = _build_pattern(with_dynasty=True)
# === 主函数 ===
def extract_era_years(text):
# 去除标记用的方括号/尖括号(用户标注用,非原文内容)
text = text.replace('[', '').replace(']', '').replace('', '').replace('', '')
# 标注符号([]、【】)不参与匹配,但保留在文本中——位置偏移以原始文本为准
# (含换行/空格/标注),仅在收尾时把标注符号从"原文"字段剔除
original_text = text
simplified_text = normalize_chars(cc.convert(text))
results = []
@@ -382,10 +382,18 @@ def extract_era_years(text):
if not (1000 <= year_num <= 2100):
continue
# 公元年后紧跟的干支(如"公元一九六〇年庚子"):无年号可锚定时,
# 干支就是年份的干支,并入同一日期单位并校验
# 干支就是年份的干支,紧邻时并入同一日期单位——保证 位置[start:end]==原文,
# 前端可按范围整体替换;隔标注符号时(【公元一九六〇年】庚子)干支只摘入字段校验
ganzhi = simplified_text[end:end + 2]
if ganzhi in _ganzhi_to_offset:
end += 2
else:
j = end
while j < len(simplified_text) and simplified_text[j] in '[]【】':
j += 1
ganzhi = simplified_text[j:j + 2]
if ganzhi not in _ganzhi_to_offset:
ganzhi = None
covered.update(range(start, end))
raw_fan = original_text[start:end]
era_type = "公元纪年(中华人民共和国)" if year_num >= 1949 else "公元纪年(近代/其他)"
@@ -638,6 +646,12 @@ def extract_era_years(text):
if result.get("公元") is not None:
result.setdefault("干支", gregorian_to_ganzhi(result["公元"]))
# === 收尾:原文剔除标注符号;位置保持原始文本偏移(含换行/空格/标注) ===
for result in results:
start, end = result["位置"]["起始"], result["位置"]["结束"]
result["原文"] = ''.join(ch for ch in original_text[start:end] if ch not in '[]【】')
result["原文(简体)"] = ''.join(ch for ch in simplified_text[start:end] if ch not in '[]【】')
return results