fix:修复Akshare拉取股票存在空格和字母全角的不一致问题 (#2271)

Co-authored-by: zhulinsen <42829555+ZhuLinsen@users.noreply.github.com>
This commit is contained in:
Gach-Coder
2026-08-30 20:46:21 +08:00
committed by GitHub
parent a69a9097c1
commit 2ab6f147f3
3 changed files with 173 additions and 13 deletions

View File

@@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
- [新功能] 新增 ResearchArtifact 结构化研究产物契约,在 `AnalysisReport.structured_report` 中承载 Thesis、Evidence、Invalidation Conditions、Next Actions 和 Data Quality并提供从现有报告生成结构化产物的后端 helper 与 Web 类型。
- [修复] 同步 ResearchArtifact 与 `AnalysisReport.structured_report` 到静态 OpenAPI避免公开 API 规格与运行时契约漂移。
- [修复] Linux/Docker 分享图补齐 Noto CJK 字体与中韩文字体栈,避免 PNG 只显示数字和英文、中文或韩文内容消失。
- [修复] 股票名称归一AkShare 部分名称带无意义内嵌空格(“五 粮 液”、“万 科A”)与全角宽度拼写(“京东方A” 的全角 A),统一经 `_normalize_stock_name()` 做 NFKC 宽度归一 + 去空白(原 `_compact_stock_name` 仅去空白):本地映射初值、`_build_name_map_from_df()` 构建与 `extend_AkShare()` 合并、磁盘缓存加载三个入库口(含归一后为空的条目守卫)与 `resolver_name_to_code_list()` / `is_known_stock_name()` / `resolve_name_to_code()` 三个查询入口同源归一;消除空格/全角拼写与本地无空格半角拼写比较不相等造成的假性改名别名,源形态输入(带空格/全角)与常规拼写同样可解析,覆盖 `/analyze` API、按名称导入与 Bot 文本解析等全部调用路径;全角拼写此前与分词管道 NFKC 归一后的半角输入“京东方A”永不相等——全名精确匹配落空且会被更短库内名误切出错误实体“京东”归一后半角/全角输入产出一致、展示名统一为归一拼写;磁盘缓存中的历史未归一数据(带空格/全角)经合并与加载入口自动归一,无需迁移。
- [新功能] Web Chat 意图识别层新增分词模块:`web_intent_tokenizer` 六步管道(多股票全名实体扫描 → 标点/空白切分 → 代码形提取 → 市场关键词 → 无歧义关键词 → 残存 gap 多策略 DFS 匹配)把用户消息切分为携带语义标签的 Token 序列;配套 `web_intent_types` 数据字典Token 结构、Market 枚举、21 个语义 tag、clean/extend 双词池与正则机器)。核心原则"宁可不做,不可做错"Step 1~5 只做精确匹配Step 6 要求整段 TAG 全覆盖(交叉验证)才产出,未覆盖片段保持空 tag 交下游 LLM 兜底;代码形 token 辨认为 `stock_code`(附 code/name/market 三元组)/ `wrong_{market}_code` / `unknown_{market}_code` 三态token 层代码拼写统一 canonical 归一a=6 位裸数字、hk=HK+5 位、us=大写 ticker。意图枚举与意图识别结果随后续 `web_intent_resolver` PR 引入。新增 183 个分词单元测试。
<!-- 新条目格式:- [类型] 描述(类型取值:新功能/改进/修复/文档/测试/chore-->
<!-- 每条独立一行追加到本段末尾,无需分类标题,合并时冲突最小 -->