sansen
|
6078beb4c3
|
Merge remote-tracking branch 'origin/main'
|
2026-09-23 17:43:36 +08:00 |
|
 sansenandClaude Code
|
4e68372518
|
日志改为摘要 + 有界预览:单次请求日志 6940KB → 2.8KB
/convert/start 原先 logger.info 直接 dump 整份结果(json.dumps(indent=2)):实测
1MB 输入 → 20188 条 → 6.9MB 日志,是原文的 15%,indent 还要再乘 1.4。转几份族谱
日志文件就会被撑爆。
改为:
- 一行摘要:输入字数、结果条数、类型分布、耗时(格式与 batch 接口的日志保持一致)
- 前 LOG_PREVIEW_ITEMS(=10) 条结果预览,体积有硬上界
- 新增 _result_summary() helper
类型分布一行能看出解析形态(如 {'干支纪年': 15624, '古代纪年': 147, ...}),
排查"整批变成未匹配"这类回归比翻全量结果还快。明细请用接口返回值。
验证:单次 1MB 请求日志 2.8KB(降 2428x);/convert/start、/convert/batch、
403 鉴权、空文本四条路径均正常;pytest 260 passed。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-23 17:42:42 +08:00 |
|
 sansenandClaude Code
|
b264073f2b
|
大交替串加首字符预筛:convert_text 提速 3.05x,输出零差异
CPython 的 re 不对大交替串 (?:A|B|...) 做首字符预筛——460 个年号的交替串在每个
位置都要把全部分支逐个试完才移向下一位。实测这类扫描占 convert_text 总耗时的 82%
(sample_2.txt 1.03M 字符:扫描 7.05 / 总计 8.54 µs/字符),而其中多数模式只命中
0~134 处。
改法:给每个"以年号或朝代名开头"的模式前面加一个零宽前瞻 (?=[首字集合])。前瞻不
消耗字符,只在当前位置断言下一个字符属于集合。预筛字符集从与模式**同一份源数据**
推导(_dynasty_names / _dynasty_prefix / KNOWN_ERAS_ALL),CSV 加新年号时自动同步。
三种预筛:_GATE_DYNASTY(朝代组必选)/ _GATE_DYNASTY_OPT(_dynasty_opt 可空)/
_GATE_ERA(朝代组为空)。
结果为什么不变(结构性保证,非经验之谈):前瞻只拒绝「原模式根本不可能开始匹配」的
位置 → 匹配集合完全相同 → 捕获组相同 → 后续执行序列一致 → 输出逐字段一致。
不加预筛者(前提不满足):公元段(前缀整个可选)、裸干支段(以干支对开头)、
民国段(以字面量 民 开头,re 自带前缀优化)。
顺带把 2b/3/3b 段的 4 个正则从 extract_era_years 内提到模块级:只编译一次,且差分
测试能取到它们。
验证:
- 全字段快照比对:sample.txt 1766 / sample_2.txt 20188 / test/sample.txt 14 /
test/sample_crosscheck.txt 11,全部 19 个字段逐条一致,零差异
- pytest 260 passed(新增 TestFirstCharGate 3 条)、summary.py 96/96
- 速度:sample_2.txt 8.53s → 2.80s(3.05x)、sample.txt 0.64s → 0.21s(2.99x)
- 3.8.10 下编译通过(部署目标)
- 变异测试:手动砍掉预筛里一个首字符后,差分测试立即失败并指出漏掉的 "万历二十三年"
—— 证明这道护栏真的能挡住坏的预筛
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-23 17:14:13 +08:00 |
|
sansenhoshi
|
4f8621bc20
|
Merge pull request '重命名 parser.py → era_parser.py:适配 Python 3.8.10 部署' (#1) from fix/py38-parser-rename into main
Reviewed-on: #1
|
2026-09-23 16:58:51 +08:00 |
|
 sansenandClaude Code
|
f4613a8da2
|
重命名 parser.py → era_parser.py:适配 Python 3.8.10 部署
`parser` 在 Python 3.8/3.9 是标准库内置模块(已弃用的旧语法解析器)。
BuiltinImporter 排在 sys.meta_path 第一位,优先于任何 sys.path 条目——
即使 sys.path[0] 指向项目根,`from parser import convert_text` 也会拿到内置
模块并抛 ImportError: cannot import name 'convert_text' from 'parser'
(unknown location)。该模块 3.9 弃用、3.10 才移除,故 3.8/3.9 部署环境都会中招。
- client_app.py: from parser import * → from era_parser import *
- era_data.py: 文档注释同步
- 纯重命名,无内容改动(git 识别为 100% similarity)
test/ 下的 extract.py / summary.py / test_parser.py 也已同步改导入,但 test/
被 .gitignore 忽略,不入库。CLAUDE.md / AGENTS.md 同样已更新(含「不要改回
parser.py」的警告),亦被忽略。
验证:pytest 257 passed;summary.py 96/96;语料回归 sample.txt 1766 条、
sample_2.txt 20188 条,与改名前完全一致。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-23 16:56:45 +08:00 |
|
sansen
|
dc399ec8ed
|
误匹配治理:裸年份改白名单、公元数字加边界、年数上界与民国窗口校验
|
2026-09-21 14:57:31 +08:00 |
|
sansen
|
7c5f322288
|
年份可省年字:无干支也识别(民国二十六/万历三十六),并挡住月/日/都/子等误匹配
|
2026-09-21 14:44:31 +08:00 |
|
sansen
|
705d93d20e
|
支持省略年字:数字后紧跟干支时按年份解析(民国二十五丙子)
|
2026-09-21 14:37:14 +08:00 |
|
sansen
|
2a6ce68e59
|
返回字段全量化:所有结果都带同一套键,无内容给空值
|
2026-09-21 14:30:47 +08:00 |
|
sansen
|
1a65c070d6
|
公元中文去掉年单位,与年数中文一致
|
2026-09-21 13:48:55 +08:00 |
|
sansen
|
9ba113ebb6
|
年数中文只返回数字写法,不带年单位
|
2026-09-21 12:03:55 +08:00 |
|
sansen
|
d82e857841
|
响应体新增年数中文:廿/卅/卌 缩写、空位补〇、首位1作元
|
2026-09-20 17:24:56 +08:00 |
|
sansen
|
2f3830bd5d
|
增加批量接口,完善日期解析
|
2026-08-14 17:06:10 +08:00 |
|
sansen
|
86e7ef2971
|
多维度日期处理
|
2026-08-14 15:45:07 +08:00 |
|
sansen
|
8b7bb37996
|
因为特殊字符问题导致位置偏移,改用UTF16返回数据
|
2026-08-07 18:31:56 +08:00 |
|
sansen
|
5c8a62c974
|
修复字符偏移2
|
2026-08-07 18:12:19 +08:00 |
|
sansen
|
29d14ab817
|
修复字符偏移
|
2026-08-07 18:02:57 +08:00 |
|
sansen
|
117eab4ad5
|
修复转换后文字漏缺问题
|
2026-08-07 17:56:01 +08:00 |
|
sansen
|
a850c72ab5
|
兼容性增强
资源数据补全
依赖更新
|
2026-08-07 16:12:59 +08:00 |
|
sansen
|
a8d6e6f870
|
软件依赖文件
|
2026-07-23 17:24:36 +08:00 |
|
sansen
|
7b790ef609
|
日志问题修改
|
2026-07-23 17:17:53 +08:00 |
|
sansen
|
5564a0ce77
|
修整部分问题,归纳年号别名到单独文件
|
2026-07-23 17:14:26 +08:00 |
|
sansenhoshi
|
2a1db6624b
|
Initial commit
|
2026-07-16 11:08:40 +08:00 |
|