2187 lines
173 KiB
Python
2187 lines
173 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
辅行诀五脏用药法要-药性探真 资料库 ETL 第 12 步(2026-09-21)
|
||
01_来源数据/《辅行诀五脏用药法要 药性探真》第3章.md -> 02_加工数据/
|
||
|
||
定位:本件为《药性探真》第三章「五脏补泻金石方例 用药释义」之**录入稿**
|
||
(PDF/文本层导出;A 类版式残留未清,与第一章之「用户精清稿」不同,
|
||
与第二章同属录入稿一类)。
|
||
标准:**完全沿用第一章(07_clean_ch1.py)/第二章(10_clean_ch2.py)的检查核对标准**——
|
||
同一编号体系(A 版式/B 断行/C 讹字/D 标点/E 存疑/F 体例/H 标题层级)、
|
||
同一产物集(清洗版+检查报告+结构.json+待核对清单按章节结构分组)、
|
||
同一核校纪律(每条改写带锚校验 + 核校依据,可回改;存疑一律不改原文)。
|
||
处理(编号与检查报告一致):
|
||
A 版式残留:行尾空格 303 行、汉字间半角空格 42 处(标题内 10 处体例保留)、
|
||
数字与汉字间半角空格 12 处、LaTeX(PDF 公式化)残留 1 处、半角「~」1 处
|
||
B 断行接合:**本件 0 处**(经逐段扫描,无跨空行截断之句;段末脱句号 2 处归 D 类补正)
|
||
C 讹字修正:40 条规则(每条附核校依据:底本内证/传本/本库内证/史实)
|
||
其中「礜石」一族 12 处、「石硫磺」名位 1 处为名位性订正
|
||
D 标点规范化:7 处(段末补句号 2、句号误作顿号 1、引号内逗号改句号 1、
|
||
误入句号 1、误入逗号 1、半角「~」→全角「~」1)
|
||
E 存疑(原文不改,登记待核):22 条
|
||
F 体例登记:12 项(名位重出、标题内空格、引号收尾体例、两章用字待统一等)
|
||
H 标题层级:章=二级(##)、节=三级(###)、条目=四级(####)、子目=五级(#####);
|
||
另源件 2 行条目题名未标井号(第 133/311 行),清洗版补标为四级
|
||
自检(脚本自动):
|
||
① C 类 40 条规则三段验证(错误形残留 0 / 正确形已出现)
|
||
② 标题计数 章1/节7/条目32/子目27;各节条目序号、各条目子目序号连续;层级无跳级
|
||
③ 引号/书名号/括号/单引号配平(引号 299/298,差 1 处系源件第 397 行《别录》
|
||
石硫黄条脱文所致——**该脱文已于 2026-09-21 经用户判决「回填」补入,引号现为 300/300**);半角标点 0;残留空格 0;断行候选 0
|
||
④ 35 品金石药「名位(X中Y)」⇄ 底本二十五味药精/十三种药 逐品互校
|
||
⑤ 与第 2 章交叉引证(「见第二章第二节·五」)互校
|
||
输出:
|
||
02_加工数据/药性探真_第3章_清洗版.md
|
||
02_加工数据/药性探真_第3章_检查报告.md
|
||
02_加工数据/药性探真_第3章_结构.json
|
||
02_加工数据/药性探真_第3章_待核对清单.md
|
||
幂等:可重复运行;改写皆带原文锚校验,源件被替换即报错。
|
||
说明:01_来源数据/《…》第3章.md **标题层级已于 2026-09-22 经用户明示指令就地优化**
|
||
(原样:章级「#」,节/条目/子目全为「##」,未分级;另 2 行题名未标井号)。
|
||
执行 13_retitle_src_ch3.py --apply(只改井号、正文逐行校验未动),改动前逐字节快照=
|
||
《…》第3章_层级优化前快照_20260922.md;源件 md5 2f2f0301… → 41363b0d…;
|
||
**重跑本脚本后清洗版 md5 未变**(层级层与清洗层同规则 ⇒ 幂等)。
|
||
"""
|
||
import os, re, json, hashlib, collections
|
||
|
||
BASE = os.path.expanduser("~/Documents/ai_agent_scraper_study/data/辅行诀五脏用药法要-药性探真")
|
||
SRC = os.path.join(BASE, "01_来源数据/《辅行诀五脏用药法要 药性探真》第3章.md")
|
||
CH1_MD = os.path.join(BASE, "02_加工数据/药性探真_第1章_清洗版.md")
|
||
CH2_MD = os.path.join(BASE, "02_加工数据/药性探真_第2章_清洗版.md")
|
||
BENDI = os.path.join(BASE, "02_加工数据/辅行诀五脏用药法要_基础文本_清洗版.md")
|
||
OUT_MD = os.path.join(BASE, "02_加工数据/药性探真_第3章_清洗版.md")
|
||
OUT_REPORT = os.path.join(BASE, "02_加工数据/药性探真_第3章_检查报告.md")
|
||
OUT_STRUCT = os.path.join(BASE, "02_加工数据/药性探真_第3章_结构.json")
|
||
OUT_CHECK = os.path.join(BASE, "02_加工数据/药性探真_第3章_待核对清单.md")
|
||
|
||
# ── B 类:断行接合(源件行号 + 原文锚校验;与下一非空行接合)────────────
|
||
# 本件经逐段扫描无跨空行截断之句(段末无收尾标点者 2 处,下一段均另起新句,
|
||
# 属「段末脱句号」而非「同句断开」,故归 D 类补正,见 D_FIXES)。
|
||
JOINS = {}
|
||
|
||
# ── C 类:讹字修正(锚校验:原文命中次数 + 改后残留 0)──────────────────
|
||
# (讹形, 正形, 原文应命中数(**按行计**), 核校依据)
|
||
C_FIXES = [
|
||
# —— 金石药名位/药名(底本二十五味药精内证 + 传本)——
|
||
("礐石", "礜石", 1,
|
||
"**底本内证**:底本《辅行诀》二十五味药精「味辛皆属木…细辛**礜石**为金」(木中金之位);"
|
||
"本条即木中金药,正文自述「磐石为剧毒药,含砷化物,是一种砒石」,正为礜石;"
|
||
"底本清洗(03_clean_yinshua.py)已判「磐石/舜石/碧石→礜石」同例;「礐」形近致误"),
|
||
("磐石", "礜石", (1, 2, 3), # 全文共 11 处:第 65/69/79/91 行各 1;第 67/71 行各 2;第 73 行 3
|
||
"**底本内证**:同上(二十五味药精木中金作「礜石」);《别录》传本作「一名白礜石」;"
|
||
"本条正文「含砷化物,是一种砒石」可证;底本清洗已判同例"),
|
||
("一名固阳石", "一名固羊石", 1,
|
||
"《本经》礜石传本作「一名青分石,一名立制石,一名**固羊石**」(《名医别录》卷三引《本经》同;"
|
||
"《纲目》礜石释名亦作「固羊石」);「阳」「羊」形近致误"),
|
||
("石硫磺(金中火)", "石硫磺(金中木)", 1,
|
||
"**底本内证**:二十五味药精「味酸皆属金…芍药**硫黄为木**」(金中木);"
|
||
"本条正文自述「故《辅行诀》称其为**金中木**药」,且第 409 行「硫黄与草木**金中木**药芍药」;"
|
||
"第 1 章「三、芍药(金中木)」亦同——本条题名「金中火」与三处内证皆不合"),
|
||
# —— 人名/书名(史实+本库内证)——
|
||
("雷敦", "雷斅", 1,
|
||
"《本草纲目》伏龙肝条引「**斅**曰:凡使勿误用灶下土…」(雷斅《雷公炮炙论》);"
|
||
"「敦」「斅」形近致误。⚠ 第 1 章清洗版同形作「雷敦」(该章未改),本件据传本订正,"
|
||
"**两章用字待统一**(见体例登记)"),
|
||
("云芨七莶", "云笈七签", 1,
|
||
"北宋张君房编《**云笈七签**》卷七十七方药部载「九真中经四镇丸」(与本条所引全同);"
|
||
"「芨」「笈」、「莶」「签」形近致误"),
|
||
("肖绎", "萧绎", 2, # 第 273 行 2 处(「梁·肖绎著,肖绎,字世诚」)
|
||
"**史实**:梁元帝姓**萧**名绎(《梁书》纪作「世祖孝元皇帝」);同句「武帝萧衍之第七子」"
|
||
"亦作「萧」;「肖」「萧」形近致误"),
|
||
("肖衍", "萧衍", 1,
|
||
"**史实**:梁武帝姓**萧**名衍;同上"),
|
||
("何宴", "何晏", 1,
|
||
"**本库内证**:本件第 5 行引「(何晏语)」正作「**何晏**」(正始玄学名家);"
|
||
"「宴」「晏」形近致误"),
|
||
# —— 引文形近讹字(传本可校)——
|
||
("鳖疮", "䘌疮", 1,
|
||
"《名医别录》雄黄条传本作「主治疥虫,**䘌疮**,目痛…」(《证类本草》引同);"
|
||
"「䘌」为虫蚀之义,于此有义,「鳖」形近致误。⚠ 检索须用「䘌」(U+4618)"),
|
||
("越嵩", "越巂", 1,
|
||
"《名医别录》曾青条传本作「生蜀中及**越巂**,采无时」(《神农本草经》辑本同);"
|
||
"「巂」「嵩」同为山部形近致误"),
|
||
("一名羽硷", "一名羽涅", 1,
|
||
"《本经》矾石(涅石)传本作「**一名羽涅**」(《名医别录》卷三引《本经》同;"
|
||
"《纲目》矾石释名「涅石、羽涅、羽泽」);「硷」「涅」形近致误"),
|
||
("散靡肿", "散痈肿", 1,
|
||
"《名医别录》紫石英条传本作「除胃中久寒,**散痈肿**,令人悦泽」;"
|
||
"「痈」「靡」形近致误"),
|
||
("血瘅血瘀", "血痹血瘀", 1,
|
||
"《名医别录》代赭条传本作「除五脏血脉中热,**血痹,血瘀**,大人小儿惊气入腹」;"
|
||
"「痹」「瘅」形近致误"),
|
||
("荠尼", "荠苨", 1,
|
||
"《名医别录》桔梗条传本作「一名梗草,**一名荠苨**」;「苨」「尼」形近致误"),
|
||
("一名乌翣,一名乌蒲", "一名乌扇,一名乌蒲", 1,
|
||
"《本经》射干条传本作「**一名乌扇**,一名乌蒲」(《纲目》射干释名同);"
|
||
"「扇」讹作「翣」(翣为棺饰,于此无义)"),
|
||
("一名乌妾", "一名乌翣", 1,
|
||
"《名医别录》射干条传本作「**一名乌翣**,一名乌吹,一名草姜」"
|
||
"(《本经》条作「乌扇」,二书各自成文,本库照传本各订);「妾」「翣」形近致误"),
|
||
("猥猪矢", "猳猪屎", 1,
|
||
"《本经》猪苓条传本作「一名**猳猪屎**」(《名医别录》卷三引《本经》同);"
|
||
"「猳」(公猪)讹作「猥」,「屎」讹作「矢」"),
|
||
("一名地营", "一名地菅", 1,
|
||
"《名医别录》茅根条传本作「**一名地菅**,一名地筋,一名兼杜」;「菅」「营」形近致误"),
|
||
("一名氏东", "一名氐冬", 1,
|
||
"《名医别录》款冬花条传本作「**一名氐冬**」(《本经》作「一名颗冻」「菟奚」);"
|
||
"「氐」「氏」、「冬」「东」并形近致误"),
|
||
("若俗长生久视", "若欲长生久视", 1,
|
||
"《本草纲目》灵砂条引青霞子「…**若欲**长生久视,保命安神,须饵丹砂」;「欲」「俗」形近致误"),
|
||
("居其做宅", "居其故宅", 1,
|
||
"《抱朴子·内篇》述临沅廖氏丹井事作「他人**居其故宅**,复如旧」(《艺文类聚》卷六十四引同);"
|
||
"「故」「做」形近致误"),
|
||
("格据", "格拒", 1,
|
||
"《本草纲目》石硫黄条引发明引王好古「…能去**格拒**之寒,兼有伏阳」;"
|
||
"「格拒」为医家术语(寒热格拒),「据」「拒」形近致误"),
|
||
("其名磬", "其名曰礜", 1,
|
||
"《山海经·西山经》皋涂之山条传本作「有白石焉,**其名曰礜**,可以毒鼠」;"
|
||
"本条下文正以礜石立说;「磬」形近致误,并脱「曰」字"),
|
||
("陆薰香", "薰陆香", 1,
|
||
"《云笈七签》卷七十七九真中经四镇丸方作「**薰陆香**一两以和当归,薰五脏内」"
|
||
"(薰陆香即乳香,为药名);「陆薰」倒文致误"),
|
||
# —— 本句/本库内证(形近讹字、衍脱)——
|
||
("探无时", "采无时", 1, # 第 235/441 行各 1 处(全文 2 处)
|
||
"**本库内证**:全篇作「采无时」者 19 处(如第 25/43/55/417 行),"
|
||
"作「探」者仅 2 处;「采」「探」形近致误"),
|
||
("皆昧甘气温", "皆味甘气温", 1,
|
||
"《本经》白石英、紫石英并作「**味甘**,温」(《名医别录》卷三引《本经》同);"
|
||
"本条上文即引「味甘,温」;「味」「昧」形近致误"),
|
||
("同为砒所至", "同为砒所致", 1,
|
||
"本条上文「其毒性主要在于氧化砷…同为砒所至」,文义当为「(毒性)同为砒所致」"
|
||
"(所致=所致使的结果);「致」讹作「至」"),
|
||
("生成持性", "生成特性", 1,
|
||
"本条下文「作为其具有土之性的推理」「具有特殊的神灵之气」;「特」「持」形近致误"),
|
||
("黄连未", "黄连末", 1,
|
||
"《纲目》所引《肘后方》内痔方「朝阳黄土、**黄连末**、皮硝各一两」——三味并列皆粉末,"
|
||
"「末」为粉末之义(第 2 章「蘖未→蘖末」同例,经用户 2026-09-20 判决);"
|
||
"「末」「未」形近致误"),
|
||
("哎吐痰涎", "呕吐痰涎", 1,
|
||
"本条引钱乙「治小儿惊热肺实,**呕吐痰涎**…取其能透经络,走关窍也」;"
|
||
"「呕」「哎」同为口部形近致误"),
|
||
("管经推广", "曾经推广", 1,
|
||
"本条「此方在当时**曾经**推广,但笔者始终不敢轻信使用」;「曾经」文义唯一,"
|
||
"「曾」「管」形近致误"),
|
||
("胸痒之需", "胸痹之需", 1,
|
||
"**本句内证**:同句下文即作「亦不堪用之治疗**胸痹**」,且石脑油条全段皆论胸痹(张锡纯治胸痹方);"
|
||
"「痹」「痒」形近致误"),
|
||
("阳踯躅", "羊踯躅", 1,
|
||
"《纲目》硇砂条引《抱朴子》伏硇药作「羊**踯躅**」——「羊踯躅」即闹羊花,本草正名;"
|
||
"「羊」「阳」形近致误"),
|
||
("白截浆", "白酨浆", 1,
|
||
"**第 2 章用户判决(2026-09-20,清单 #4)**:「白截浆→白酨浆」修正正确(原书作「白酨浆」,"
|
||
"「截」为录入形近之误;第 1 章第六节·十一 条目标题亦作「白酨浆」);"
|
||
"底本十三种药「白酨浆为金中金,又为金中火」。⚠ 第 1 章清洗版同形 5 处未改,两章用字待统一"),
|
||
("相龌龊", "相龃龉", 1,
|
||
"本条「其火字与寒甚相龌龊,有待进一步解析」——「龌龊」为污秽之义,于此不伦;"
|
||
"「龃龉」(上下齿不相值)引申为相抵触、不相合,正合文义;二字形近致误"),
|
||
# —— 体例/衍倒(本库内证)——
|
||
("从土火论心病", "从火土论心病", 1,
|
||
"**本库内证**:本件作「从火土论心病」者 6 处(第 513/535/553/579/591/609 行),"
|
||
"本节节题亦作「从火土同治论心病」;本条「从**土火**论心病」倒文"),
|
||
("从火土论心治心病方", "从火土论心病方", 1,
|
||
"**本库内证**:同上 6 处平行文例皆作「从火土论心病(草木)方」;本条「论心**治心**病方」衍「治心」二字"),
|
||
("瓜蒌", "栝蒌", 1,
|
||
"**本库内证**:第 1 章作「栝蒌」17 处(含「第六节·七 栝蒌(土中土)」条目名);"
|
||
"底本《辅行诀》「小补心汤」用药及十三种药条并作「栝楼(栝蒌)」;"
|
||
"本件「瓜蒌」为异写,据本库用字统一"),
|
||
# —— 以下 7 条据用户 2026-09-21 判决(#4/#5/#9/#18/#19/#20「改」「修正正确,保留」)落盘 ——
|
||
("时间相附", "时间相符", 1,
|
||
"**用户核对原书(2026-09-21,清单 #4)**:判决「**改**」——原书作「相符」;"
|
||
"本件「相附」为录入形近之误(文义:传入时间相合)"),
|
||
("西元277年", "公元前277年", 1,
|
||
"**用户核对原书(2026-09-21,清单 #5)**:判决「**改**」——原书作「**公元前277年**」"
|
||
"(本段论先秦蜀都、秦置蜀郡,公元 277 年已入西晋,与文义不合;「西元」即公元,脱「前」字)"),
|
||
("怀腹中坚", "腹中坚癖", 1,
|
||
"**用户核对原书(2026-09-21,清单 #9)**:判决「**修正正确,保留**」——《本经》礜石传本作"
|
||
"「…死肌風痹,**腹中堅癖**,邪氣,除熱」(《名医别录》卷三引《本经》同);"
|
||
"本件「怀」为衍讹、「癖」脱,据传本一并订正"),
|
||
("结也细芒者", "结出细芒者", 1,
|
||
"**用户核对原书(2026-09-21,清单 #18)**:判决「**修正正确,保留**」——原书作「结**出**细芒者」;"
|
||
"同段下文平行句正作「煎炼结出细芒者亦名芒硝」「结出马牙者亦名牙硝」;「也」「出」形近致误"),
|
||
("所炼制之的卤碱", "所炼制之卤碱", 1,
|
||
"**用户核对原书(2026-09-21,清单 #19)**:判决「**修正正确,保留**」——原书无「的」字(衍文)"),
|
||
("其俱火体用之全", "其具火体用之全", 1,
|
||
"**用户核对原书(2026-09-21,清单 #19)**:判决「**修正正确,保留**」——原书作「**具**」"
|
||
"(具=具备,「俱」「具」形近致误)"),
|
||
("有毛有孔有乃肺金之象", "有毛有孔乃肺金之象", 1,
|
||
"**用户核对原书(2026-09-21,清单 #20)**:判决「**修正正确,保留**」——原书无第三个「有」字"
|
||
"(衍文;上文「有毛有孔」已为并列)"),
|
||
# —— 以下 9 条据用户 2026-09-21 第 3 批判决(清单 #21–#36「修正准确,保留修改」)落盘 ——
|
||
("吸水其性强", "其吸水性强", 1,
|
||
"**用户核对原书(2026-09-21,清单 #21)**:判决「**修正准确,保留修改**」——"
|
||
"「吸水其性强」语序倒错,原书作「**其吸水性强**」"),
|
||
("介于上述理由", "基于上述理由", 1,
|
||
"**用户核对原书(2026-09-21,清单 #21)**:同上——「介于上述理由」原书作「**基于上述理由**」"
|
||
"(「介」「基」形近)"),
|
||
("明沏如水", "明澈如水", 1,
|
||
"**用户核对原书(2026-09-21,清单 #25)**:判决「**修正准确,保留修改**」——原书作「**明澈如水**」;"
|
||
"同条第 297 行亦作「其质明澈如水晶」(《岭表录异》语)"),
|
||
("甚难是之而贵", "甚难得而贵", 1,
|
||
"**用户核对原书(2026-09-21,清单 #28)**:判决「**修正准确,保留修改**」——原书作「**甚难得而贵**」;"
|
||
"《本草纲目》曾青条弘景语传本作「甚難得而貴」(本件「是之」为「得」之讹)"),
|
||
("或去其生从实至空", "或云其生从实至空", 1,
|
||
"**用户核对原书(2026-09-21,清单 #28)**:同上——原书作「**或云其生从实至空**」"
|
||
"(「或云」=有人说;《纲目》曾青条释名传本作「或云其生從實至空」)"),
|
||
("化为输石", "化为鍮石", 1,
|
||
"**用户核对原书(2026-09-21,清单 #28)**:同上——原书作「**鍮石**」"
|
||
"(鍮石=黄铜,丹家器物通名;「输」为形近之讹)"),
|
||
("都是在铜绿经久变化而成", "都是由铜绿经久变化而成", 1,
|
||
"**用户核对原书(2026-09-21,清单 #29)**:判决「**修正准确,保留修改**」——原书作"
|
||
"「**都是由**铜绿经久变化而成」(本件脱「由」字)"),
|
||
("故主谓之皂矾", "故谓之皂矾", 1,
|
||
"**用户核对原书(2026-09-21,清单 #33)**:判决「**修正准确,保留修改**」——原书作"
|
||
"「故**谓**之皂矾」(衍「主」字);《纲目·绿矾》释名传本作「綠礬可以染皂色,故謂之皂礬」"),
|
||
("张氏治疽之硝石矾石散", "张氏治疸之硝石矾石散", 1,
|
||
"**用户核对原书(2026-09-21,清单 #35)**:判决「**修正准确,保留修改**」——原书作「治**疸**」;"
|
||
"《金匮要略》硝石矾石散主治黑疸(女劳疸),「疸」「疽」形近致误(同句后文另见"
|
||
"「硝石矾石散」,不复带「治疽」二字,无须改)"),
|
||
# —— 以下 7 条据用户 2026-09-21 第 5 批判决(清单 #38–#53/#57–#64)落盘 ——
|
||
("外家谓之侯", "外家谓之阳侯", 1,
|
||
"**用户核对原书(2026-09-21,清单 #38)**:判决「**修正正确,保留**」——原书作「外家谓之**阳侯**」;"
|
||
"《本草纲目》石硫黄条传本作「外家謂之陽侯,亦曰黃牙」"),
|
||
("则钢浸汁更谓何系", "则钢浸汁更谓何物", 1,
|
||
"**用户核对原书(2026-09-21,清单 #47)**:判决「**修正正确,保留**」——原书作「更谓**何物**」;"
|
||
"《纲目》铁落条传本作「則鋼浸汁更謂何物」(同段下文「《别录》谓其味甘属土」为对文)"),
|
||
("纤维膏", "纤维石膏", 1,
|
||
"**用户核对原书(2026-09-21,清单 #52)**:判决「**修正正确,保留**」——原书作「纤维**石膏**」;"
|
||
"矿物名(纤维石膏),本条上文亦作「硫酸盐类矿物石膏」"),
|
||
("鉴于上种情况", "鉴于上述情况", 1,
|
||
"**用户核对原书(2026-09-21,清单 #57)**:判决「**修正正确,保留**」——原书作「上**述**情况」"
|
||
"(「种」「述」形近致误)"),
|
||
("生河洼山坂之阴土石间", "生河崖山坂之阴土石间", 1,
|
||
"**用户核对原书(2026-09-21,清单 #61)**:判决「**修正正确,保留**」——原书作「河**崖**」;"
|
||
"《纲目》戎盐条传本作「生河崖山坂之陰土石間」"),
|
||
("主治呕呃", "主治呕啘", 1,
|
||
"**用户核对原书(2026-09-21,清单 #63)**:判决「**修正正确,保留**」——原书作「主治呕**啘**」"
|
||
"(啘=干呕);《名医别录》竹茹条传本作「主嘔啘,溫氣寒熱,吐血,崩中」"),
|
||
("除咳嗽,囊结", "破咳嗽囊结", 1,
|
||
"**用户核对原书(2026-09-21,清单 #63)**:同上——原书作「**破**咳嗽囊结」;"
|
||
"《本草经集注》(引《别录》)皂荚条传本作「消穀,破咳嗽囊結,婦人胞不落」"
|
||
"(本件「除……,」为「破」之讹并衍逗号)"),
|
||
("採根", "采根", 1,
|
||
"繁体残留字(第 647 行「二月、十月**採**根」);全篇及第 1/2 章皆作「采」,"
|
||
"属录入时未转换之繁体字"),
|
||
]
|
||
|
||
# ── C 类全文命中数(逐行计数按行变动者,另核全文总数,防漏改/误改)──────
|
||
C_TOTAL = {"磐石": 11, "探无时": 2, "肖绎": 2}
|
||
|
||
# ── C 类逐条「原书用字」核定 ─────────────────────────────────────────
|
||
# 第 1/2 章之「原书用字」栏(印刷之误 / 录入讹误)须**用户核对纸质原书**方可定,
|
||
# 本件为首轮清洗,**尚未核定**,故 C_ORIGIN 暂空;报告与清单中该栏一律标
|
||
# 「待核原书」,并已列入待核对清单(体例确认·批量核定一项,见 CHECK_ITEMS 末)。
|
||
C_ORIGIN = {
|
||
# —— 录入讹误(原书作正形,清洗版与印刷本一致;用户 2026-09-21 逐条核对原书)——
|
||
"时间相附": ("录入讹误", "原书作「**相符**」(清单 #4「改」)"),
|
||
"西元277年": ("录入讹误", "原书作「**公元前277年**」(清单 #5「改」)"),
|
||
"雷敦": ("录入讹误", "原书作「**雷斅**」(清单 #6「修正正确,保留」)"),
|
||
"鳖疮": ("录入讹误", "原书作「**䘌疮**」(清单 #10「修正正确,保留」)"),
|
||
"怀腹中坚": ("录入讹误", "原书作「**腹中坚癖**」(清单 #9「修正正确,保留」)"),
|
||
"结也细芒者": ("录入讹误", "原书作「**结出细芒者**」(清单 #18)"),
|
||
"所炼制之的卤碱": ("录入讹误", "原书无「的」字(清单 #19)"),
|
||
"其俱火体用之全": ("录入讹误", "原书作「**其具**火体用之全」(清单 #19)"),
|
||
"有毛有孔有乃肺金之象": ("录入讹误", "原书作「**有毛有孔**乃肺金之象」(清单 #20)"),
|
||
# —— 2026-09-21 第 3 批(清单 #21–#36「修正准确,保留修改」;用户核对原书)——
|
||
"吸水其性强": ("录入讹误", "原书作「**其吸水性强**」(清单 #21)"),
|
||
"介于上述理由": ("录入讹误", "原书作「**基于上述理由**」(清单 #21)"),
|
||
"肖绎": ("录入讹误", "原书作「**萧绎**」(史实;清单 #22)"),
|
||
"皆昧甘气温": ("录入讹误", "原书作「**皆味甘气温**」(清单 #24)"),
|
||
"何宴": ("录入讹误", "原书作「**何晏**」(清单 #24)"),
|
||
"明沏如水": ("录入讹误", "原书作「**明澈如水**」(清单 #25)"),
|
||
"越嵩": ("录入讹误", "原书作「**越巂**」(清单 #27)"),
|
||
"甚难是之而贵": ("录入讹误", "原书作「**甚难得而贵**」(清单 #28)"),
|
||
"或去其生从实至空": ("录入讹误", "原书作「**或云其生从实至空**」(清单 #28)"),
|
||
"化为输石": ("录入讹误", "原书作「**鍮石**」(清单 #28)"),
|
||
"都是在铜绿经久变化而成": ("录入讹误", "原书作「**都是由**铜绿经久变化而成」(清单 #29)"),
|
||
"生成持性": ("录入讹误", "原书作「**生成特性**」(清单 #30)"),
|
||
"羽硷": ("录入讹误", "原书作「**羽涅**」(清单 #32)"),
|
||
"故主谓之皂矾": ("录入讹误", "原书作「故**谓**之皂矾」(清单 #33)"),
|
||
"张氏治疽之硝石矾石散": ("录入讹误", "原书作「治**疸**」(清单 #35)"),
|
||
"石硫磺(金中火)": ("录入讹误", "原书作「**金中木**」(依据为底本内证三处一致;清单 #36——"
|
||
"如原书题名实作「金中火」,请改钉为★印刷之误·本库订正)"),
|
||
# —— 2026-09-21 第 5 批(清单 #38–#53/#57–#64「修正正确,保留」;用户核对原书)——
|
||
"外家谓之侯": ("录入讹误", "原书作「外家谓之**阳侯**」(清单 #38;《纲目》传本同)"),
|
||
"探无时": ("录入讹误", "原书作「**采无时**」(清单 #39)"),
|
||
"血瘅血瘀": ("录入讹误", "原书作「**血痹**血瘀」(清单 #41;《别录》代赭条传本)"),
|
||
"居其做宅": ("录入讹误", "原书作「居其**故**宅」(清单 #43;《抱朴子》传本)"),
|
||
"若俗长生久视": ("录入讹误", "原书作「若**欲**长生久视」(清单 #43)"),
|
||
"黄连未": ("录入讹误", "原书作「黄连**末**」(清单 #46)"),
|
||
"则钢浸汁更谓何系": ("录入讹误", "原书作「更谓**何物**」(清单 #47;《纲目》传本)"),
|
||
"从土火论心病": ("录入讹误", "原书作「从**火土**论心病」(清单 #48;本库内证 6 处一致)"),
|
||
"相龌龊": ("录入讹误", "原书作「相**龃龉**」(清单 #51)"),
|
||
"纤维膏": ("录入讹误", "原书作「纤维**石膏**」(清单 #52;矿物名)"),
|
||
"阳踯躅": ("录入讹误", "原书作「**羊**踯躅」(清单 #58;《纲目》引《抱朴子》传本)"),
|
||
"瓜蒌": ("录入讹误", "原书作「**栝**蒌」(清单 #60;本库内证:第 1 章 17 处、底本同)"),
|
||
"从火土论心治心病方": ("录入讹误", "原书作「从火土论心病方」(清单 #60;本库内证)"),
|
||
"生河洼山坂之阴土石间": ("录入讹误", "原书作「河**崖**」(清单 #61;《纲目》戎盐条传本)"),
|
||
"荠尼": ("录入讹误", "原书作「荠**苨**」(清单 #62;《别录》桔梗条传本)"),
|
||
"一名乌翣,一名乌蒲": ("录入讹误", "原书作「一名**乌扇**,一名乌蒲」(清单 #62;《本经》射干条传本)"),
|
||
"一名乌妾": ("录入讹误", "原书作「一名**乌翣**」(清单 #62;《别录》射干条传本)"),
|
||
"猥猪矢": ("录入讹误", "原书作「**猳**猪屎」(清单 #62;《本经》猪苓条传本)"),
|
||
"一名地营": ("录入讹误", "原书作「一名**地菅**」(清单 #62;《别录》茅根条传本)"),
|
||
"一名氏东": ("录入讹误", "原书作「一名**氐冬**」(清单 #62;《别录》款冬花条传本)"),
|
||
"採根": ("录入讹误", "原书作「**采**根」(清单 #62;繁体未转换,同第 1/2 章例)"),
|
||
"主治呕呃": ("录入讹误", "原书作「主治呕**啘**」(清单 #63;《别录》竹茹条传本)"),
|
||
"除咳嗽,囊结": ("录入讹误", "原书作「**破**咳嗽囊结」(清单 #63;《本草经集注》皂荚条传本)"),
|
||
# —— 原书印刷之误·本库订正 ★(原书即作讹形;维持修正、**不得据「原书如此」回流**)——
|
||
"礐石": ("印刷之误", "**用户核对原书(清单 #8)**:原书题名即作「**礐石**」——属印刷本自身之误,"
|
||
"本库据底本二十五味药精「细辛 礜石为金」订正,**维持修正、不得回流**"),
|
||
"磐石": ("印刷之误", "同上(同条正文 11 处;原书亦作「磐石」一族之误,同办订正、不得回流)"),
|
||
"云芨七莶": ("印刷之误", "**用户核对原书(清单 #14)**:原书即作「云芨七莶」而判决"
|
||
"「原文如此,**但修正有理,确认修正**」——属印刷之误·本库订正"),
|
||
"陆薰香": ("印刷之误", "同上(原书即作「陆薰香」;「薰陆香」为药名,本库订正、不得回流)"),
|
||
}
|
||
def origin_counts():
|
||
ru = [k for k, v in C_ORIGIN.items() if v[0] == "录入讹误"]
|
||
yr = [k for k, v in C_ORIGIN.items() if v[0] == "印刷之误"]
|
||
return len(ru), len(yr), len(C_FIXES) - len(ru) - len(yr)
|
||
|
||
|
||
BACKFILLS = [
|
||
# 回填=据用户提供的原书脱落文字补入正文(清单 #37;用户 2026-09-21 第 4 批判决)
|
||
("主治心腹积聚,邪气 。", # 源件此处「邪气」后有半角空格(A 类清理前),故讹形从原样
|
||
"主治心腹积聚,邪气,冷癖在胁,咳逆上气,脚冷疼弱无力,及鼻衄,恶疮,下部䘌疮,止血,"
|
||
"杀疥虫。生东海牧羊山,及大山(大山具体地址待考,疑为太山),及河西山,矾石液也。”"
|
||
"\n\n晋·张华《博物志》谓:“凡水源有石硫黄,其水则温,或云神人所暖,主疗疾。”", 1,
|
||
"**用户 2026-09-21 判决「回填」(清单 #37)**:用户核原书后给出脱落全文——「冷癖在胁,咳逆上气,"
|
||
"脚冷疼弱无力,及鼻衄,恶疮,下部䘌疮,止血,杀疥虫。生东海牧羊山,及大山(大山具体地址待考,"
|
||
"疑为太山),及河西山,矾石液也。」+「晋·张华《博物志》谓:『凡水源有石硫黄,其水则温,"
|
||
"或云神人所暖,主疗疾。』」——本库据此补入(源件脱文两段:①《别录》条后半及收尾引号,"
|
||
"②《博物志》引文整段);**文末「邪气」后之句号改逗号**(该句号系脱文截断所致,补文后清单续读);"
|
||
"**内证**:《名医别录》石硫黄条传本正作「療心腹積聚,邪氣冷癖在脅,欬逆上氣…下部䘌瘡,"
|
||
"止血,殺疥蟲。生東海牧羊山谷中及泰山、河西山,礬石液也」。⚠ 回填文本用字按本库归一:"
|
||
"「下部䘌疮」(用户原文作「鳖疮」,同清单 #10 已定之订正)、「矾石」(用户原文作「礬石」,"
|
||
"简体归一,同「採→采」例);⚠ 夹注「(大山具体地址待考,疑为太山)」照用户给文录入"
|
||
"(体例同本条「生东海(今江苏北部…)」夹注)。全篇引号由 299/298 变为 **300/300**(脱文收尾引号已补)。"),
|
||
]
|
||
|
||
def c_origin_note():
|
||
"""「原书用字」核定进度(按 C_ORIGIN/C_FIXES 动态计算,避免计数漂移)"""
|
||
n_all = len(C_FIXES)
|
||
ru = [k for k, v in C_ORIGIN.items() if v[0] == "录入讹误"]
|
||
yr = [k for k, v in C_ORIGIN.items() if v[0] == "印刷之误"]
|
||
pend = n_all - len(ru) - len(yr)
|
||
return (
|
||
f"**「原书用字」核定进度(用户 2026-09-21)**:经用户逐条核对原书,**已钉定 {len(ru) + len(yr)} 条/{n_all} 条**——"
|
||
f"**录入讹误 {len(ru)} 条**("
|
||
+ "/".join(ru) + ":原书皆作正形,**清洗版与印刷本一致,可直接以印刷本复核**)·"
|
||
f"**★原书印刷之误·本库订正 {len(yr)} 条**("
|
||
+ "/".join(yr) +
|
||
":原书即作讹形,经判决「修正有理,确认修正」或据底本内证订正——"
|
||
"**清洗版与印刷本有意不一致、不得据「原书如此」回流**)。"
|
||
f"**其余 {pend} 条 C 类规则之「原书用字」=用户 2026-09-22 判「暂时保留」**——"
|
||
f"**分类(录入讹误/★印刷之误)暂不钉定、正文一律不改**,维持**统一按「本库订正·保留修正」"
|
||
f"处理、任何情形下不得回流**;日后核出可逐条钉定分类(只改本栏与第八节,不影响现有文本)。")
|
||
|
||
# ── C 类回改(用户判决「原文无误」→ 撤销本库前批修正;锚校验)──────────
|
||
REVERTS = []
|
||
|
||
# ── D 类:标点规范化(锚校验)─────────────────────────────────────────
|
||
D_FIXES = [
|
||
("味甘,生温。熟热,有毒", "味甘,生温、熟热,有毒", 1,
|
||
"《名医别录》礜石传本作「味甘,生溫、熟熱,有毒」——「生温」「熟热」为对文,"
|
||
"本件误以句号断开,据传本改顿号"),
|
||
("可以毒鼠,”", "可以毒鼠。”", 1,
|
||
"《山海经·西山经》引文至此句终,收尾标点当为句号而误作逗号(逗号在引号内),"
|
||
"同全书引文体例(第 2 章「之处,”杏之叶」同例已改)"),
|
||
("含铁。量高", "含铁量高", 1,
|
||
"本条「与皂矾因含铁。量高而服之亦为黑色便相同」——「含铁量高」为一词,"
|
||
"句中误入句号,删"),
|
||
("始终,不敢", "始终不敢", 1,
|
||
"本条「但笔者始终,不敢轻信使用」——「始终不敢」连读,句中误入逗号,删"),
|
||
("得温热可蒸化而润泽(至暑月回润)", "得温热可蒸化而润泽(至暑月回润)。", 1,
|
||
"段末脱收尾句号(源件该段末字为「)」而无句读),据段末体例补句号——"
|
||
"非补文字,仅补句读,可回改"),
|
||
("同气之物,故又名火硝,", "同气之物,故又名火硝。", 1,
|
||
"段末原以逗号收句(「故又名火硝,」),据段末体例改句号;非补文字"),
|
||
("所谓芒硝者是也。”川、晋之硝", "所谓芒硝者是也;川、晋之硝", 1,
|
||
"**用户核对原书(2026-09-21,清单 #17)**:判决「**修正正确,保留**」——原书《纲目》朴硝条"
|
||
"时珍语为一气贯下,收尾引号当在「殊无指归。」之后;《纲目》传本此处分号作「者是也;川晉之硝」,"
|
||
"故本处改句读为分号、并移收尾引号至该段之末(引号计数不变;全篇引号已由第 397 行脱文"
|
||
"经判决「回填」补齐,现 300/300)"),
|
||
("因名迷实,殊无指归。", "因名迷实,殊无指归。”", 1,
|
||
"**用户核对原书(2026-09-21,清单 #17)**:同上——补时珍语收尾引号(与上一条为一对:"
|
||
"移引号、非增字;全篇引号 300/300(原差 1 处系第 397 行源件脱文,已据判决「回填」补齐)"),
|
||
("4~5毫升", "4~5毫升", 1,
|
||
"半角「~」改全角「~」(同第 1/2 章体例;第 2 章同一处半角「~」已改)"),
|
||
]
|
||
|
||
# ── H 类:标题层级(章 2 / 节 3 / 条目 4 / 子目 5)─────────────────────
|
||
H_RULES = [
|
||
(re.compile(r"^第[一二三四五六七八九十]+章[ ]"), 2, "章"),
|
||
(re.compile(r"^第[一二三四五六七八九十]+节[ ]"), 3, "节"),
|
||
(re.compile(r"^[一二三四五六七八九十]+、"), 4, "条目"),
|
||
(re.compile(r"^\d+\.\s*"), 5, "子目"),
|
||
]
|
||
|
||
# ── H 类:源件未标井号之条目题名,清洗版补标(锚校验)──────────────────
|
||
# (源行号, 原文锚, 层级)
|
||
MISSING_HEADINGS = {
|
||
133: ("三、硝石(即火硝,火中木)、朴硝(即水硝,水中木、水中火)", 4),
|
||
311: ("一、绿青(即石绿,金中金)、曾青(金中土、火中木)", 4),
|
||
}
|
||
|
||
# ── E 类:存疑(原文不改,登记待核)───────────────────────────────────
|
||
SUSPECTS = [
|
||
("公元前277年",
|
||
"**用户 2026-09-21 判决「改」**(清单 #5,经核对原书:原书作「公元前277年」)→ 本件脱「前」字,"
|
||
"**已据判决订正正文(生效)**;本项结项、移出存疑册。"),
|
||
("时间相符",
|
||
"**用户 2026-09-21 判决「改」**(清单 #4,经核对原书:原书作「相符」)→ 本件「相附」为录入形近之误,"
|
||
"**已据判决订正正文(生效)**;本项结项、移出存疑册。"),
|
||
("腹中坚癖",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #9,经核对原书:原书作「腹中坚癖」,与《本经》"
|
||
"传本同)→ 本件「怀腹中坚」为衍讹并脱「癖」,**已据判决订正正文(生效)**;本项结项、移出存疑册。"),
|
||
("火惮散炎上显明之性",
|
||
"**用户 2026-09-21 判决「原文无误,暂不修改」**(清单 #11,经核对原书:原书即作「惮散」)→ "
|
||
"本库**不作改动**;本项结项、移出存疑册(「暂」=日后如有新材料可再议)。"),
|
||
("草药木火中火牡丹皮",
|
||
"**用户 2026-09-21 判决「原文无误,暂时保留」**(清单 #12,经核对原书:原书即作「草药木火中火」)→ "
|
||
"本库**不作改动**;本项结项、移出存疑册(「暂」=日后如有新材料可再议)。"),
|
||
("外有壳重垒",
|
||
"**用户 2026-09-21 判决「原文如此,暂时保留」**(清单 #13,经核对原书:原书即作「重垒」)→ "
|
||
"本库**不作改动**;本项结项、移出存疑册(「暂」=日后如有新材料可再议)。"),
|
||
("结出细芒者",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #18,经核对原书:原书作「结出细芒者」)→ "
|
||
"**已据判决订正正文(生效)**;本项结项、移出存疑册。"),
|
||
("《别录》所谓芒硝者是也;",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #17,经核对原书:时珍语一气贯下、收尾引号在"
|
||
"「殊无指归。」之后)→ **已据判决移引号、此处句读改分号(生效)**;本项结项、移出存疑册。"),
|
||
("其吸水性强",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #21,用户核对原书)→ ①「吸水其性强」"
|
||
"**已订正为「其吸水性强」**;②「介于上述理由」**已订正为「基于上述理由」**——两处**均已生效**;"
|
||
"本项结项、移出存疑册。"),
|
||
("石英明澈如水",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #25,用户核对原书)→ ①「明沏如水」"
|
||
"**已订正为「明澈如水」**(生效);②同段「似与石英有火性之说不谋」一处**本库未改**——"
|
||
"「疑脱『而合』/疑当作『相谋』」两说并存、原书用字未定,**该项仍在册待核**。"),
|
||
("甚难得而贵",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #28,用户核对原书)→ 三处**均已订正生效**:"
|
||
"①「甚难是之而贵」→「**甚难得而贵**」;②「或去其生从实至空」→「**或云**其生从实至空」;"
|
||
"③「化为输石」→「化为**鍮石**」。本项结项、移出存疑册。"
|
||
"(附记:同段「故曰层青也」——传本《纲目》曾青条释名作「故曰曾青也」,本件作「层青」;"
|
||
"**本库未改**,登记待裁示。)"),
|
||
("都是由铜绿经久变化而成",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #29,用户核对原书)→ 已据判决在「都是」后"
|
||
"**补「由」字**(「都是由铜绿经久变化而成」);本项结项、移出存疑册。"),
|
||
("桐君采灵",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #31,用户核对原书)——书名疑为"
|
||
"《桐君采药录》之讹脱,**无原书字样则不臆补**:本库**未改正文**,照原字「采灵」保留;"
|
||
"检索须用原字(「采药录」检索不到);本项结项,日后核出书名可加办。"),
|
||
("均可治理",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #34,用户核对原书)——「治理」下疑有脱文,"
|
||
"按「不敢臆补」之例**本库未改正文**、照原样保留;本项结项(如原书另有文,请给字样以补正)。"),
|
||
("张氏治疸之硝石矾石散",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #35,用户核对原书)→ 「治疽」"
|
||
"**已订正为「治疸」**(1 处、生效;同句后文另见「硝石矾石散」,不复带此二字);"
|
||
"本项结项、移出存疑册。"),
|
||
("外家谓之阳侯",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #38,用户核对原书)→ 已据判决补「阳」字"
|
||
"(「外家谓之**阳侯**」;《纲目》石硫黄条传本作「外家謂之陽侯,亦曰黃牙」);本项结项。"),
|
||
("泄癖",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #40,用户核对原书)——「泄癖/泄澼」两形并见,"
|
||
"本库**未改**(用字未定,清单一律不发):第 429 行作「泄癖」、第 415 行引《本经》作「泄澼」、"
|
||
"第 1 章《别录》黄连条作「泄癖」(该章未改)。登记:**检索须两形并用**;本项结项。"),
|
||
("司空张岂",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #45,用户核对原书)——「司空张岂」人名可疑"
|
||
"(南齐明帝时无任司空之可考者;《本草拾遗》所引「张司空」多指西晋张华),本库**不改**"
|
||
"(无原书字样不臆改人名);登记待核;本项结项。"),
|
||
("则钢浸汁更谓何物",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #47,用户核对原书)→ ①已据判决改「何**物**」"
|
||
"(《纲目》铁落条传本「則鋼浸汁更謂何物」);②同段「**乃是据其以青属木**」疑脱「色」字一处"
|
||
"**本库未改**(无传本直证),仍在册待核。"),
|
||
("唯以山顶以篮与悬下",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #50,用户核对原书)——句有讹脱"
|
||
"(疑当作「唯以绠篮悬下」之类),本库**不臆补、照原样保留**;本项结项"
|
||
"(如原书另有文,请给字样)。"),
|
||
("每日是一至数二次十天为一疗程",
|
||
"**用户 2026-09-22 判决「原文如此,暂时保留」**(清单 #56,用户核对原书)——第 571 行"
|
||
"「…用抚顺市石油三厂生产的煤油成人用量 4~5 毫升,**每日是一至数二次十天为一疗程**」句有讹脱"
|
||
"(疑当作「每日一至二次,十天为一疗程」之类),**原书即作此,本库不臆补、照原样保留**;本项结项"
|
||
"(「暂」=日后如有新材料可再议;如原书另有文,给字样即据以订正)。"),
|
||
("鉴于上述情况",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #57,用户核对原书)→ ①已据判决改"
|
||
"「上**述**情况」(「种」「述」形近致误);②同条「**是基本问题**」语义未尽一处**本库未改**"
|
||
"(无拟正字),仍在册待核。"),
|
||
("并入驴马不用",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #59,用户核对原书)——①「并入驴马不用」:"
|
||
"**本库未改**——经核《唐本草》传本作「**驴马药亦用之**」(《纲目》硇砂条引《唐本草》"
|
||
"「硇砂柔金銀,可為焊藥…驢馬藥亦用之」),与本库旧拟「不入驴马药用」**语意相反**,"
|
||
"故**不据旧拟改动**、登记待原书用字;②「与陶弘景约同时的甄权」与本件上文「甄氏生于陶氏"
|
||
"去世后五年」自相矛盾一处**本库未改**(属作者行文之误,登记待核)。"),
|
||
("生河崖山坂之阴",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #61,用户核对原书)→ 已据判决改「河**崖**」"
|
||
"(《纲目》戎盐条传本作「生河崖山坂之陰土石間」);本项结项。"),
|
||
("主治呕啘",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #63,用户核对原书)→ ①已据判决改"
|
||
"「主治呕**啘**」(啘=干呕;《名医别录》竹茹条传本「主嘔啘,溫氣寒熱,吐血,崩中」);"
|
||
"②同项皂荚条「除咳嗽,囊结」已据判决改「**破咳嗽囊结**」(《本草经集注》皂荚条传本"
|
||
"「消穀,破咳嗽囊結」);本项结项。"),
|
||
("所炼制之卤碱",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #19,经核对原书:原书作「所炼制之卤碱」"
|
||
"「其具火体用之全」)→ **两处已据判决订正正文(生效)**;本项结项、移出存疑册。"),
|
||
("有毛有孔乃肺金之象",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #20,经核对原书:原书无第三个「有」字)→ "
|
||
"**已据判决订正正文(生效)**;本项结项、移出存疑册。"),
|
||
("张儒何玄",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #23,用户核对原书)——该项涉**夹注/标点**"
|
||
"(「张(仲景)儒、(何)晏玄(学)」),本库**不臆加标记、正文一字未动**;判决登记即"
|
||
"「本库读解成立(张属儒家、何属玄学,故非道教中人)」;原文照旧,本项结项。"),
|
||
("故谓之皂矾",
|
||
"**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #33,用户核对原书)→ 已据判决**删衍「主」字**"
|
||
"(「故谓之皂矾」);本项结项、移出存疑册。"
|
||
"(附记:同句「绛矾可以染皂色」——传本《纲目》作「綠礬可以染皂色」;**本库未改**,登记待裁示。)"),
|
||
("纤维石膏",
|
||
"**用户 2026-09-21 判决「修正正确,保留」**(清单 #52,用户核对原书)→ 已据判决改「纤维**石膏**」"
|
||
"(矿物名;本条上文亦作「硫酸盐类矿物石膏」);本项结项。"),
|
||
("疆砾",
|
||
"**用户 2026-09-21 判决「原文无误,保留不修改」**(清单 #54,用户核对原书)——原书即作"
|
||
"「疆砾」「其是非非」,本库**不作改动**、疑点结项(日后如有新材料可再议)。"),
|
||
("《别录》谓石硫磺",
|
||
"第 397 行**源件脱文**(《别录》石硫黄条后半及收尾引号、《博物志》引文整段)——"
|
||
"**用户 2026-09-21 判决「回填」**(清单 #37,用户核对原书后给出脱落全文)→ 已据所给原文"
|
||
"**补入清洗版**(两段:①「冷癖在胁…及河西山,矾石液也。」;②「晋·张华《博物志》谓:"
|
||
"「凡水源有石硫黄,其水则温,或云神人所暖,主疗疾。」」),文末「邪气」后句号改逗号,"
|
||
"用字按本库归一(䘌疮/矾石);全篇引号 299/298 → **300/300**。**源件仍为脱文原样**"
|
||
"(01 层不改);本项结项、移出存疑册。"),
|
||
]
|
||
|
||
# ── F 类:体例登记(不校改)───────────────────────────────────────────
|
||
VERSION_NOTES = [
|
||
("金石药「名位」命名(35 品)",
|
||
"本章 35 品金石药均标「(X中Y)」名位。与底本《辅行诀》二十五味药精(金石对应品)"
|
||
"及十三种药逐品互校:**29 品相符**(青琅玕木中木、伏龙肝木中火、阳起石木中土、礜石木中金、"
|
||
"雄黄木中水、凝水石火中火、禹余粮火中土、硝石火中木、芒硝火中金、磁石火中水、赤石脂土中土、"
|
||
"石膏土中金、石钟乳土中水、云母土中木、石英土中火、石绿金中金、曾青金中土·火中木、"
|
||
"石胆木中火·水中木、白矾金中水、皂矾金中火、石硫磺金中木、滑石水中水、代赭石水中木、"
|
||
"丹砂水中火、黄土水中土、白垩水中金、铁落木中土·木中水、石蜜土中金·土中火、戎盐火中土);"
|
||
"**6 品底本无对应**(朴硝、卤碱、理石、姜石、硇砂、海蛤)——系作者拟补从火土同治论心病方"
|
||
"所用,其名位为作者自立。**名位重出**者:土中火(石英/理石)、金中金(石绿/硇砂)、"
|
||
"金中火(皂矾/硇砂)、土中土(赤石脂/海蛤),属拟补方别用之例,登记不改。"),
|
||
("标题内空格(体例保留)",
|
||
"源件标题内汉字间半角空格 **10 处**(第 1 行「第三章 五脏补泻金石方例 用药释义」、"
|
||
"第 503 行「第六节 从火土同治论心病金石 方例用药简释」及 7 个「第X节 」标题空格),"
|
||
"为「第X章 标题」之体例空格,**保留不改**(同第 1/2 章)。"),
|
||
("数字与汉字间半角空格",
|
||
"源件为 PDF/文本层导出,半角数字与汉字间带空格(**12 处**,如「或 64个黍粒大」"
|
||
"「含硅 42.93%」「150~200 摄氏度」「水 13%」)。本次按「句中误入空格」**从严删除**,"
|
||
"与第 2 章一致(第 2 章同例经用户 2026-09-20 判决「保持现状、不回改、亦不回补第 1 章」);"
|
||
"第 1 章清洗版尚存 1 处同类未清,**两章体例暂不统一**,待后续统一。"),
|
||
("引号收尾体例(原书如此)",
|
||
"本件「**”。**」(句号在引号外)19 处、「**。”**」(句号在引号内)202 处并用"
|
||
"(第 1 章 36/153,第 2 章 8/142),系原书引文体例之混用,**未作统一**;"
|
||
"另有「”,」26 处、「,”」3 处(第 1 章 62/2,第 2 章 39/2)同属体例。"),
|
||
("交叉引证",
|
||
"本件回指第 2 章 1 处:第 731 行「见第二章第二节·五」——对应第 2 章清洗版"
|
||
"「五、心火果杏、杏核仁」(序号、条目名逐字吻合,已作自检项)。"
|
||
"另有本书外著作 2 处(第 345/471 行「详见《伤寒论阴阳图说》」,系作者另一著作,非本库藏品)。"),
|
||
("用字体例·「硫磺」与「硫黄」并见",
|
||
"本件条目题名与作者行文作「**石硫磺**」(第 393/397 行),引《本经》则作「**石硫黄**」"
|
||
"(第 395 行「《本经》谓石硫黄」)——引文照录、行文从本书用字,属引文体例,登记不改"
|
||
"(检索时两形须并用)。"),
|
||
("用字体例·「泄癖」与「泄澼」并见",
|
||
"第 415 行引《本经》滑石作「泄**澼**」,第 429 行作者行文作「泄**癖**」;"
|
||
"第 1 章《别录》黄连条引文亦作「泄癖」(该章未改)。两形并见,本轮一律不发,"
|
||
"登记待核(见存疑册);**检索须两形并用**。"),
|
||
("两章用字待统一(★)",
|
||
"①「**雷敦/雷斅**」:本件据《纲目》传本订正为「雷斅」,第 1 章清洗版同形(雷敦)未改;"
|
||
"②「**白截浆/白酨浆**」:本件据第 2 章用户 2026-09-20 判决(原书作「白酨浆」)订正,"
|
||
"第 1 章清洗版尚存「白截浆」5 处未改;③「**瓜蒌/栝蒌**」:本件据本库用字统一为「栝蒌」,"
|
||
"第 1 章全部作「栝蒌」。→ **2026-09-21 判决(清单 #7「订正维持」)**:三项**一律维持本件订正**"
|
||
"(雷斅/白酨浆/栝蒌),**第 1 章不同办、未动**(第 1 章清洗版同处仍作「雷敦」「白截浆」5 处);"
|
||
"本项**已决、结项**——日后不得据「第 1 章作某」回改本件,亦不得据本件回改第 1 章。"),
|
||
("引书节略体例(照录不改)",
|
||
"本章引《本经》《别录》多有节略(如《别录》雄黄条前脱「味甘,大」、《别录》滑石条"
|
||
"「令人利」后脱「中」、《本经》青琅玕条「生蜀郡平泽」并合两书),系作者引书之常,"
|
||
"**一律照录不改**(第 2 章同例)。"),
|
||
("★源件标题层级已就地优化(明文例外·第三例;2026-09-22)",
|
||
"`01_来源数据/《…》第3章.md` 原样:章为「#」,节/条目/子目**全部为「##」**(未分级);"
|
||
"另有 2 行条目题名**未标井号**(第 133/311 行)。"
|
||
"**2026-09-21 判决(清单 #2「保留修正结果」)**=清洗版重建层级维持、源件一字未动;"
|
||
"**2026-09-22 用户另下明示指令「源件标题层级就地优化」**,遂执行 "
|
||
"`05_脚本工具/13_retitle_src_ch3.py --apply`(只改井号、正文逐行校验未动):"
|
||
"**源件 65 行标题由「#/##」降为章2/节3/条目4/子目5**,源件 md5 `2f2f0301…` → `41363b0d…`;"
|
||
"改动前逐字节快照=`01_来源数据/《…》第3章_层级优化前快照_20260922.md`(md5 `2f2f0301…`,可回退);"
|
||
"**重跑本脚本后清洗版 md5 未变(`5f1fb57c…`)**——层级层与清洗层同规则之证明。"
|
||
"此为第 1 章(2026-09-17)、第 2 章(2026-09-20)之后**★明文例外之第三例**;"
|
||
"「01_来源数据不可修改」仍为常态,不得据本条推及他件。"),
|
||
("清洗版补标条目题名 2 处",
|
||
"源件第 133 行「三、硝石(即火硝,火中木)、朴硝(即水硝,水中木、水中火)、芒硝(火中金)、"
|
||
"卤碱(火中火、火中木)」与第 311 行「一、绿青(即石绿,金中金)、曾青(金中土、火中木)、"
|
||
"石胆(木中火、水中木)」为题名性质(与本节他条目同式)而源件未标井号;"
|
||
"清洗版补标为四级条目,**源件保持原样**。"),
|
||
("★用户 2026-09-21/22 判决登记(第 1–6 批;**本章 64/64 判决已闭环**)",
|
||
"**判决词表(用户重申)**:「**保留**」=**本库修正经确认准确无误、维持修正(不回流)**;"
|
||
"「**原文无误**」=原书原文正确、不需要修正(本库如已改则回改)。"
|
||
"**第 1 批(#1–#3)**:三处待决(①逐条判决清单 ②C 类「原书用字」核定 ③源件标题层级是否就地优化)"
|
||
"**一律批复「保留修正结果」**;**源件(01_来源数据/)一字未动**(层级重建只落在清洗版;"
|
||
"如日后要同第 1/2 章就地优化源件,须另下明示指令,脚本 13_retitle_src_ch3.py 备好、默认 dry-run)。"
|
||
"**第 2 批(#4–#20,用户逐条核对原书)**:判「改」2(相附→**相符**、西元→**公元前**277年)、"
|
||
"「修正正确,保留」9(雷斅/**腹中坚癖**/䘌疮/云笈七签·薰陆香/LaTeX/标题补标/引号范围/**结出**/"
|
||
"衍「的」与**具**/衍「有」)、「原文如此·但修正有理·确认修正」1(云芨七莶/陆薰香)、"
|
||
"「原书即作『礐石』」1、**「原文无误/原文如此,暂不修改/暂时保留」3**(惮散/草药木火中火/重垒——"
|
||
"原书即作此,本库**不作改动**、疑点结项)、「订正维持」1(跨章用字:本件订正维持,第 1 章不同办)。"
|
||
"据此**正文改 7 处**(首次动正文,清洗版 md5 `2c5378bd…` → 现 md5 见报告首部)。"
|
||
"⚠ **★原书印刷之误·本库订正(第三类)** 现有 4 条(礐石/磐石/云芨七莶/陆薰香)——"
|
||
"**清洗版与印刷本有意不一致、不得据「原书如此」回流**;**录入讹误** 9 条(原书作正形、"
|
||
"清洗版与印刷本一致,可直接以印刷本复核)。**C 类余 27 条之「原书用字」待核原书**,"
|
||
"未核定前按「本库订正·保留修正」处理、不得回流。**当时清单余 44 条(#21–#64)待判决**。"
|
||
"**第 3 批(#21–#36「修正准确,保留修改」)· 第 4 批(#37「回填」)· 第 5 批(#38–#53/#57–#64"
|
||
"「修正正确,保留」,#54/#55「原文无误,保留不修改」)· 第 6 批(2026-09-22,#56「原文如此,"
|
||
"暂时保留」)后:64/64 全部判决、本章闭环、存疑册清零**。"),
|
||
("本件无断行接合(B 类)项",
|
||
"经逐段扫描(段末无收尾标点者 2 处:第 105 行、第 153 行),其下一段均另起新句,"
|
||
"属**段末脱句号**而非同句断开,故本件 B 类为 0,二处归 D 类补句读(见本次修正表);"
|
||
"另有 1 处**源件脱文**(第 397 行《别录》石硫黄条)——**已据用户 2026-09-21 判决「回填」"
|
||
"补入清洗版**(源件仍原样),引号 299/298 → 300/300。"),
|
||
("★《纲目》曾青条引文用字(层青)已定案(2026-09-22)",
|
||
"本件曾青条引《纲目》释名作「故曰**层青**也」,传本《本草纲目》曾青条作「故曰**曾青**也」。"
|
||
"**用户 2026-09-22 判「原文如此,暂保留」**——原书即作此,本库**不改、疑点结项**"
|
||
"(「暂」=日后如有新材料可再议;如原书另有文,给字样即据以订正)。"
|
||
"**检索须用原字「层青」**(以传本「曾青」不能命中本句)。"
|
||
"同类**未裁示**者:《纲目·绿矾》「**绛**矾可以染皂色」(传本「绿矾」)——照原样保留、待裁示。"),
|
||
("★C 类余 11 条「原书用字」分类暂不钉定(2026-09-22)",
|
||
"C 类 63 条中已钉定 **52 条**(录入讹误 48 · ★原书印刷之误·本库订正 4),**余 11 条**之分类"
|
||
"(录入讹误/印刷之误)**用户 2026-09-22 判「暂时保留」——暂不钉定、正文一律不改**;"
|
||
"维持统一按「本库订正·保留修正」处理、**任何情形下不得回流**。日后核出可逐条钉定"
|
||
"(只改「原书用字」栏与本登记项,不影响现有文本)。"),
|
||
]
|
||
|
||
# ── 自检:35 品金石药「名位」⇄ 底本二十五味药精/十三种药 ──────────────
|
||
# (节, 清洗版条目题名(含名位), 底本依据原文, 判定)
|
||
ITEMS35 = [
|
||
("第一节 肝木辛味门", "一、青琅玕(木中木)", "味辛皆属木,桂 琅玕为之主", "✅ 相符"),
|
||
("第一节 肝木辛味门", "二、伏龙肝(木中火)", "生姜 伏龙肝为火", "✅ 相符"),
|
||
("第一节 肝木辛味门", "三、阳起石(木中土)", "附子 阳起石为土", "✅ 相符"),
|
||
("第一节 肝木辛味门", "四、礜石(木中金)", "细辛 礜石为金", "✅ 相符(源题讹「礐石」,本轮订正)"),
|
||
("第一节 肝木辛味门", "五、雄黄(木中水)", "干姜 雄黄为水", "✅ 相符"),
|
||
("第二节 心火咸味门", "一、凝水石(火中火)", "味咸皆属火,丹皮 凝水石为之主", "✅ 相符"),
|
||
("第二节 心火咸味门", "二、禹余粮(火中土)", "大黄 禹粮石为土", "✅ 相符"),
|
||
("第二节 心火咸味门", "1. 火硝(火中木)", "旋覆花 硝石为木(硝石即火硝)", "✅ 相符"),
|
||
("第二节 心火咸味门", "2. 朴硝(水中木、水中火)", "底本二十五味药精无朴硝",
|
||
"○ 作者拟补(拟补方「大泻心散…朴硝…」);名位系作者自立,且本条正文自述其理"),
|
||
("第二节 心火咸味门", "3. 芒硝(火中金)", "葶苈子 芒硝为金", "✅ 相符"),
|
||
("第二节 心火咸味门", "4. 卤碱(火中火、火中木)", "底本二十五味药精无卤碱",
|
||
"○ 作者拟补(拟补方「大补心散…卤硷…」);名位系作者自立(本条正文以兑卦刚卤立说)"),
|
||
("第二节 心火咸味门", "四、磁石(火中水)", "泽泻 磁石为水", "✅ 相符"),
|
||
("第三节 脾土甘味门", "一、赤石脂(土中土)", "味甘皆属土,人参 赤石脂为之主", "✅ 相符"),
|
||
("第三节 脾土甘味门", "二、石膏(土中金)", "甘草 石膏为金", "✅ 相符"),
|
||
("第三节 脾土甘味门", "三、石钟乳(土中水)", "茯苓 乳石为水(乳石=钟乳石)", "✅ 相符"),
|
||
("第三节 脾土甘味门", "四、云母(土中木)", "薯蓣 云母为木", "✅ 相符"),
|
||
("第三节 脾土甘味门", "五、石英(土中火)", "甘草炙 石英为火", "✅ 相符"),
|
||
("第四节 肺金酸味门", "1. 石绿(金中金)", "味酸皆属金,麦门冬 石绿为之主", "✅ 相符"),
|
||
("第四节 肺金酸味门", "2. 曾青(金中土、火中木)",
|
||
"五味子 曾青为土(金中土);十三种药「五味子为金中土,又为火中木」", "✅ 相符"),
|
||
("第四节 肺金酸味门", "3. 石胆(木中火、水中木)",
|
||
"十三种药「淡豆豉为木中火,又为水中木」(石胆与淡豆豉同位)", "✅ 相符"),
|
||
("第四节 肺金酸味门", "1. 白矾(金中水)", "枳实 白矾为水", "✅ 相符"),
|
||
("第四节 肺金酸味门", "2. 皂矾(金中火)", "萸肉 皂矾为火", "✅ 相符"),
|
||
("第四节 肺金酸味门", "三、石硫磺(金中木)",
|
||
"芍药 硫黄为木(金中木);本条正文「故《辅行诀》称其为金中木药」",
|
||
"✅ 相符(源题讹「金中火」,本轮订正)"),
|
||
("第五节 肾水苦味门", "一、滑石(水中水)", "味苦皆属水,地黄 滑石为之主", "✅ 相符"),
|
||
("第五节 肾水苦味门", "二、代赭石(水中木)", "黄芩 代赭石为木", "✅ 相符"),
|
||
("第五节 肾水苦味门", "三、丹砂(水中火)", "黄连 丹砂为火", "✅ 相符"),
|
||
("第五节 肾水苦味门", "四、黄土(水中土)", "术 黄土为土", "✅ 相符"),
|
||
("第五节 肾水苦味门", "五、白垩(水中金)", "竹叶 白垩土为金", "✅ 相符"),
|
||
("第六节 从火土同治论心病金石 方例用药简释", "一、铁落(木中土,木中水)",
|
||
"十三种药「通草为木中土,又为木中水」(铁落与通草同位)", "✅ 相符"),
|
||
("第六节 从火土同治论心病金石 方例用药简释", "二、石蜜(土中金,土中火)",
|
||
"十三种药「升麻为土中金,又为土中火」(石蜜与升麻同位)", "✅ 相符"),
|
||
("第六节 从火土同治论心病金石 方例用药简释", "三、理石(土中火)",
|
||
"底本二十五味药精无理石(土中火之位属石英)",
|
||
"○ 作者拟补(拟补方「小补心散…理石…」);与石英同为土中火,名位重出(体例登记)"),
|
||
("第六节 从火土同治论心病金石 方例用药简释", "四、姜石(水中土,水中金)",
|
||
"底本二十五味药精无姜石",
|
||
"○ 作者拟补(拟补方「小补心散…姜石…」);本条正文以碳酸氢钙凝聚、黏土附着立说"),
|
||
("第六节 从火土同治论心病金石 方例用药简释", "五、硇砂(金中金,金中火)",
|
||
"底本二十五味药精无硇砂",
|
||
"○ 作者拟补(拟补方「大补心散…硇砂…」);与石绿(金中金)、皂矾(金中火)名位重出"),
|
||
("第六节 从火土同治论心病金石 方例用药简释", "六、海蛤(土中土)",
|
||
"底本二十五味药精无海蛤",
|
||
"○ 作者拟补(拟补方「小补心散:海蛤 理石 雄黄 姜石各三两」);与赤石脂(土中土)名位重出"),
|
||
("第六节 从火土同治论心病金石 方例用药简释", "七、戎盐(火中土)",
|
||
"十三种药「戎盐为火中土」", "✅ 相符"),
|
||
]
|
||
|
||
# ── 待核对清单:固定条目表(锚=清洗版唯一子串;行号由脚本定位)────────
|
||
CHECK_ITEMS = [
|
||
# (类型, 锚, 问题, 依据, 建议)
|
||
("版式清理确认", "《禹贡》《周官》列其土产",
|
||
"行尾空格 **303 行**(正文段落末尾普遍带 1 个半角空格)已逐行删除",
|
||
"源件为 PDF/文本层导出,段落末尾带半角空格(第 1/2 章同例)",
|
||
"复核;如欲保留可回改(脚本 A 类规则)"),
|
||
("版式清理确认", "正品钉头赭石",
|
||
"句中误入半角空格:**汉字↔汉字 正文 32 处**(标题内 10 处体例保留)+ **数字↔汉字 12 处**,"
|
||
"并全角标点旁空格,已全部删除",
|
||
"扫描/文本层导出残留;与底本 03_clean_yinshua.py「句中误入空格」同例;"
|
||
"数字两侧留空同第 2 章从严(第 1 章存 1 处未清,两章暂不统一)",
|
||
"复核;数字两侧留空如欲保留可回改(详报告第二节逐处清单)"),
|
||
("版式清理确认", "其最佳浸出温度为100度",
|
||
"LaTeX 残留「$41\\% \\sim 45\\%$」已还原为「**41%~45%**」;半角「~」(4~5 毫升)已改全角「~」",
|
||
"PDF 公式化残留,读作数据还原(同第 2 章「$7 \\sim 10$」→「7~10」例)",
|
||
"复核"),
|
||
("标题修复确认", "三、硝石(即火硝,火中木)",
|
||
"源件此行**未标井号**(正文形式),清洗版补标为四级条目题名",
|
||
"与本节他条目(一、凝水石/二、禹余粮/四、磁石)同式,且其下「1.~4.」子目正附于此条",
|
||
"复核;如原书即作正文,可回改(源件保持原样)"),
|
||
("标题修复确认", "一、绿青(即石绿,金中金)",
|
||
"源件此行**未标井号**,清洗版补标为四级条目题名",
|
||
"与本节他条目(二、矾石/三、石硫磺)同式,且其下「1.石绿/2.曾青/3.石胆」子目附于此条",
|
||
"复核;源件保持原样"),
|
||
("修正确认", "四、礜石(木中金)",
|
||
"本条 14 处订正:①题名「礐石」→「**礜石**」;②正文 **11 处**「磐石」→「礜石」"
|
||
"(第 65/67×2/69/71×2/73×3/79/91 行);③「一名固阳石」→「**一名固羊石**」;"
|
||
"④标点「生温。熟热」→「生温、熟热」(标点类另列)",
|
||
"**底本内证**:二十五味药精「味辛皆属木…细辛**礜石**为金」(木中金之位);"
|
||
"本条正文自述「磐石为剧毒药,含砷化物,是一种砒石」;《名医别录》传本作「一名白礜石」"
|
||
"「一名固羊石」;底本清洗(03_clean_yinshua.py)已判「磐石→礜石」同例",
|
||
"复核;如原书即作「礐石/磐石」,可即时回改"),
|
||
("修正确认", "雷斅",
|
||
"「雷敦」→「**雷斅**」(本条 1 处)",
|
||
"《本草纲目》伏龙肝条引「斅曰:凡使勿误用灶下土…」(雷斅《雷公炮炙论》);"
|
||
"⚠ 第 1 章清洗版同形未改,**两章用字待统一**",
|
||
"复核;如欲与第 1 章一致(不改),可即时回改"),
|
||
("修正确认", "疥虫,䘌疮",
|
||
"「鳖疮」→「**䘌疮**」(本条 1 处)",
|
||
"《名医别录》雄黄条传本作「主治疥虫,䘌疮,目痛…」;「䘌」为虫蚀之义。"
|
||
"⚠ 检索须用「䘌」(U+4618)",
|
||
"复核"),
|
||
("修正确认", "云笈七签",
|
||
"本条 2 处:「云芨七莶」→「**云笈七签**」;「陆薰香」→「**薰陆香**」",
|
||
"北宋张君房编《云笈七签》卷七十七方药部载「九真中经四镇丸」,与本条所引全同,"
|
||
"其中正作「**薰陆香**一两以和当归,薰五脏内」(薰陆香即乳香)",
|
||
"复核"),
|
||
("修正确认", "采无时。石韦为之使",
|
||
"「探无时」→「**采无时**」(第 235 行);同字例另见第 441 行(代赭条)",
|
||
"全篇作「采无时」者 19 处,作「探」者仅此 2 处;「采」「探」形近致误",
|
||
"复核"),
|
||
("修正确认", "萧绎",
|
||
"「肖绎」→「**萧绎**」2 处、「肖衍」→「**萧衍**」1 处",
|
||
"**史实**:梁元帝姓萧名绎、梁武帝姓萧名衍(同句「武帝萧衍之第七子」);「肖」「萧」形近致误",
|
||
"复核"),
|
||
("修正确认", "皆味甘气温",
|
||
"本条 2 处:「皆昧甘气温」→「**皆味甘气温**」;「何宴」→「**何晏**」",
|
||
"《本经》紫、白石英并作「味甘,温」(本条上文即引「味甘,温」);"
|
||
"本件第 5 行引「(何晏语)」正作「何晏」",
|
||
"复核"),
|
||
("修正确认", "生成特性",
|
||
"「生成持性」→「**生成特性**」(曾青条)",
|
||
"本条下文「作为其具有土之性的推理」「具有特殊的神灵之气」;「特」「持」形近致误",
|
||
"复核"),
|
||
("修正确认", "越巂",
|
||
"「越嵩」→「**越巂**」(曾青条引《别录》1 处)",
|
||
"《名医别录》曾青条传本作「生蜀中及越巂,采无时」",
|
||
"复核"),
|
||
("修正确认", "一名羽涅",
|
||
"「羽硷」→「**羽涅**」(矾石条引《本经》1 处)",
|
||
"《本经》矾石(涅石)传本作「一名羽涅」(《纲目》释名「涅石、羽涅、羽泽」)",
|
||
"复核"),
|
||
("修正确认", "石硫磺(金中木)",
|
||
"条目题名名位「(金中火)」→「(**金中木**)」(1 处)",
|
||
"**底本内证**:二十五味药精「芍药**硫黄为木**」(金中木);本条正文自述「故《辅行诀》称其为"
|
||
"金中木药」,第 409 行「硫黄与草木金中木药芍药」;第 1 章「三、芍药(金中木)」——三处内证一致",
|
||
"复核;如原书题名即作「金中火」,可即时回改"),
|
||
("修正确认", "血痹血瘀",
|
||
"「血瘅血瘀」→「**血痹血瘀**」;同条「探无时」→「采无时」(见上)",
|
||
"《名医别录》代赭条传本作「除五脏血脉中热,血痹,血瘀」",
|
||
"复核"),
|
||
("修正确认", "故宅",
|
||
"丹砂条 2 处:「居其做宅」→「**居其故宅**」;「若俗长生久视」→「**若欲长生久视**」",
|
||
"《抱朴子·内篇》述临沅廖氏丹井事作「他人居其故宅」;"
|
||
"《纲目》灵砂条引青霞子作「若欲长生久视,保命安神」",
|
||
"复核"),
|
||
("修正确认", "黄连末",
|
||
"黄土条 1 处:「黄连未」→「**黄连末**」",
|
||
"《纲目》所引《肘后方》内痔方「朝阳黄土、黄连末、皮硝各一两」,三味并列皆粉末"
|
||
"(第 2 章「蘖未→蘖末」同例,经用户 2026-09-20 判决)",
|
||
"复核"),
|
||
("修正确认", "从火土论心病方中之草木药通草",
|
||
"「从**土火**论心病方」→「从**火土**论心病方」(1 处,倒文)",
|
||
"**本库内证**:本件作「从火土论心病」者 6 处,本节节题亦作「从火土同治论心病」",
|
||
"复核"),
|
||
("修正确认", "相龃龉",
|
||
"「相龌龊」→「相**龃龉**」(理石条 1 处)",
|
||
"「龌龊」为污秽之义,与「其火字与寒甚相…」不伦;「龃龉」=上下齿不相值,"
|
||
"引申为相抵触、不相合,正合文义;二字形近致误",
|
||
"复核"),
|
||
("修正确认", "呕吐痰涎",
|
||
"姜石条 4 处:「哎吐痰涎」→「**呕吐痰涎**」;「管经推广」→「**曾经推广**」;"
|
||
"「胸痒之需」→「**胸痹之需**」;「始终,不敢」→「始终不敢」(标点)",
|
||
"「呕」「哎」同为口部形近;「曾经」文义唯一;同句下文即作「亦不堪用之治疗**胸痹**」,"
|
||
"全段皆论胸痹(张锡纯治胸痹方)",
|
||
"复核"),
|
||
("修正确认", "羊踯躅",
|
||
"「阳踯躅」→「**羊踯躅**」(硇砂条引《抱朴子》1 处)",
|
||
"《纲目》硇砂条引《抱朴子》伏硇药作「羊踯躅」(即闹羊花,本草正名);「羊」「阳」形近致误",
|
||
"复核"),
|
||
("修正确认", "白酨浆",
|
||
"海蛤条 1 处:「瓜蒌」→「**栝蒌**」;戎盐条 1 处:「从火土论心**治心**病方」→"
|
||
"「从火土论心病方」(衍字);硇砂条「白截浆」→「**白酨浆**」",
|
||
"**本库内证**:第 1 章作「栝蒌」17 处(含条目名)、底本作「栝楼」;平行文例 6 处皆作"
|
||
"「从火土论心病方」;第 2 章「白截浆→白酨浆」经用户 2026-09-20 判决(原书作「白酨浆」)",
|
||
"复核;「白截浆」如欲与第 1 章一致,可即时回改(两章用字待统一)"),
|
||
("修正确认", "荠苨",
|
||
"第七节其他用药 7 处:「荠尼」→「**荠苨**」(桔梗);「乌翣」→「**乌扇**」、"
|
||
"「乌妾」→「**乌翣**」(射干);「猥猪矢」→「**猳猪屎**」(猪苓);「地营」→「**地菅**」(茅根);"
|
||
"「氏东」→「**氐冬**」(款冬花);「採根」→「**采根**」(繁体残留)",
|
||
"《名医别录》/《本经》传本逐条可校:桔梗「一名荠苨」;射干《本经》「一名乌扇,一名乌蒲」、"
|
||
"《别录》「一名乌翣,一名乌吹」;猪苓《本经》「一名猳猪屎」;茅根《别录》「一名地菅,一名地筋」;"
|
||
"款冬花《别录》「一名氐冬」;「採」为未转换之繁体字",
|
||
"复核"),
|
||
# —— 原书核对(E 类:本次一律未改)——
|
||
("原书核对", "公元前277年",
|
||
"「**公元前277年**,秦国即置蜀郡」——原「西元277年」已据判决改正文",
|
||
"**用户核对原书(2026-09-21)**:原书作「公元前277年」(公元 277 年已入西晋,与「秦国即置蜀郡」之文不合)",
|
||
"**已改**(用户核对原书)"),
|
||
("原书核对", "时间相符",
|
||
"「与海产琅玕传入我国的时间**相符**」——原「相附」已据判决改正文",
|
||
"**用户核对原书(2026-09-21)**:原书作「相符」;本件「相附」为录入形近之误(文义:传入时间相合)",
|
||
"**已改**(用户核对原书);如另有出入可回改"),
|
||
("原书核对", "腹中坚癖",
|
||
"《本经》礜石「…风痹,**腹中坚癖**,邪气,除热」——原「怀腹中坚」已据判决改正文",
|
||
"**用户核对原书(2026-09-21)**:原书作「腹中坚癖」(《本经》传本同;「怀」为衍讹、「癖」原脱)",
|
||
"**已改**(用户核对原书)"),
|
||
("原书核对", "火惮散炎上显明之性",
|
||
"「而具火惮散炎上显明之性」——「惮散」不可通",
|
||
"疑当作「火性悍散」(悍=勇猛急疾)",
|
||
"**原书即作「惮散」,本库不作改动**(2026-09-21 判决「原文无误,暂不修改」——结项)"),
|
||
("原书核对", "草药木火中火牡丹皮",
|
||
"「凝水石与草药木火中火牡丹皮」——「草药木火中火」有衍讹",
|
||
"本件平行文例皆作「草木火中火药××」(第 129/157/175/211 行)",
|
||
"**原书即作「草药木火中火」,本库不作改动**(2026-09-21 判决「原文无误,暂时保留」——结项)"),
|
||
("原书核对", "外有壳重垒",
|
||
"禹余粮条「外有壳重垒」疑当作「重叠」;「无砂者佳」一作「无沙者佳」",
|
||
"《纲目》禹余粮条引弘景语;疊/壘 形近",
|
||
"**原书即作「重垒」,本库不作改动**(2026-09-21 判决「原文如此,暂时保留」——结项)"),
|
||
("原书核对", "结出细芒者",
|
||
"《纲目》时珍语「煎炼**结出**细芒者亦名芒硝」——原「结也」已据判决改正文",
|
||
"**用户核对原书(2026-09-21)**:原书作「结出」;同段下文平行句作「结出细芒者」「结出马牙者」",
|
||
"**已改**(用户核对原书)"),
|
||
("原书核对", "《别录》所谓芒硝者是也;",
|
||
"《纲目》朴硝条时珍语之**引号范围**——已据判决改为「…芒硝者是也**;**川、晋之硝…殊无指归**。**」"
|
||
"(引号移至该段之末、此处句读改分号)",
|
||
"**用户核对原书(2026-09-21)**:原书时珍语一气贯下、收尾引号在该段之末(《纲目》传本此处分号作"
|
||
"「者是也;川晉之硝」)",
|
||
"**已改**(用户核对原书;非增字,引号计数不变)"),
|
||
("原书核对", "其吸水性强",
|
||
"赤石脂条「吸水其性强」语序倒错,当作「其吸水性强」;同条「介于上述理由」疑当作"
|
||
"「基于上述理由」",
|
||
"「介」「基」形近;文义",
|
||
"核原书"),
|
||
("原书核对", "石英明澈如水",
|
||
"石英条「石英明沏如水」疑当作「明澈」;同条「似与石英有火性之说不谋」疑脱「而合」"
|
||
"或当作「相谋」",
|
||
"同条第 297 行作「其质明澈如水晶」",
|
||
"核原书"),
|
||
("原书核对", "甚难得而贵",
|
||
"曾青条引弘景「甚难是之而贵」疑当作「甚难得而贵」;同条「或去其生从实至空」"
|
||
"「去」疑当作「云」;「化为输石」疑当作「鍮石」",
|
||
"《纲目》曾青条传本「甚難得而貴」;鍮石=黄铜(丹家常用字)",
|
||
"核原书"),
|
||
("原书核对", "都是由铜绿经久变化而成",
|
||
"石绿条「诸青都是在铜绿经久变化而成」疑脱「由」字",
|
||
"文义(「都是由…而成」)",
|
||
"核原书"),
|
||
("原书核对", "桐君采灵",
|
||
"石胆条「桐君采灵谓其味辛」——书名疑为《桐君采药录》之讹脱",
|
||
"本件第 329 行引吴普作「桐君:辛,有毒」;《桐君采药录》见底本「依《神农本经》及"
|
||
"《桐君采药录》」",
|
||
"核原书"),
|
||
("原书核对", "均可治理",
|
||
"白矾条「与谷物酿制品酢,均可治理。」——「治理」孤立无宾语,疑脱文",
|
||
"文义;不敢臆补",
|
||
"核原书"),
|
||
("原书核对", "张氏治疸之硝石矾石散",
|
||
"皂矾条「张氏治疽之硝石矾石散」——「治疽」疑当作「治疸」(1 处;同句后文另见"
|
||
"「硝石矾石散」,不复带此二字)",
|
||
"《金匮要略》硝石矾石散主治黑疸(女劳疸);「疸」「疽」形近",
|
||
"核原书"),
|
||
("原书核对", "外家谓之阳侯",
|
||
"石硫磺条引《纲目》「外家谓之侯」疑脱「阳」字",
|
||
"《纲目》石硫黄条传本作「外家謂之陽侯,亦曰黃牙」",
|
||
"核原书"),
|
||
("原书核对", "泄癖",
|
||
"滑石条「滑石可治泄癖癃闭积聚留结等」——《本经》滑石条作「泄澼」,两形并见",
|
||
"《别录》传本黄连条作「久下泄澼」;第 1 章《别录》黄连条引文作「泄癖」(该章未改)",
|
||
"核原书定用字(本轮一律不发)"),
|
||
("原书核对", "司空张岂",
|
||
"黄土条引《本草拾遗》「司空张岂」(南齐明帝时 494~498 年)——人名/朝代可疑",
|
||
"南齐明帝时无「张岂」任司空之可考者(《本草拾遗》所引「张司空」多指晋司空张华)",
|
||
"核原书"),
|
||
("原书核对", "则钢浸汁更谓何物",
|
||
"铁落条引苏恭「则钢浸汁更谓何系」疑当作「何物」;同段「乃是据其以青属木」疑脱「色」字",
|
||
"《纲目》铁落条传本作「更謂何物」;下文「《别录》谓其味甘属土」为对文",
|
||
"核原书"),
|
||
("原书核对", "唯以山顶以篮与悬下",
|
||
"石蜜条引张华《博物志》「唯以山顶以篮与悬下」句有讹脱",
|
||
"文义(疑当作「唯以绠篮悬下」之类);不敢臆补",
|
||
"核原书"),
|
||
("原书核对", "每日是一至数二次十天为一疗程",
|
||
"姜石条「每日是一至数二次十天为一疗程」句有讹脱",
|
||
"文义(当作「每日一至二次,十天为一疗程」之类);不敢臆补",
|
||
"核原书"),
|
||
("原书核对", "鉴于上述情况",
|
||
"姜石条「鉴于上种情况」疑当作「上述情况」;同条「是基本问题」语义未尽",
|
||
"「种」「述」形近;文义",
|
||
"核原书"),
|
||
("原书核对", "并入驴马不用",
|
||
"硇砂条引《唐本草》「并入驴马不用」句不可通,疑当作「不入驴马药用」;"
|
||
"同条「与陶弘景约同时的甄权」与本件第 89 行自相矛盾",
|
||
"《唐本草》传本;本件第 89 行「甄氏生于陶氏去世后五年」(甄权 541~643,晚于陶氏约一世)",
|
||
"核原书"),
|
||
("原书核对", "生河崖山坂之阴",
|
||
"戎盐条引《疏证》「生河洼山坂之阴土石间」疑当作「河崖」",
|
||
"《纲目》戎盐条传本作「生河崖山坂之陰土石間」",
|
||
"核原书"),
|
||
("原书核对", "主治呕啘",
|
||
"第七节竹茹条「主治呕呃」——《别录》传本作「呕啘」(啘=干呕);"
|
||
"同节皂荚条「除咳嗽,囊结」传本作「破咳嗽囊结」",
|
||
"《名医别录》传本",
|
||
"核原书"),
|
||
("原书核对", "所炼制之卤碱",
|
||
"卤碱条「**所炼制之**卤碱」(原衍「的」)与「其**具**火体用之全」(原「俱」)——两处已据判决改正文",
|
||
"**用户核对原书(2026-09-21)**:原书作「所炼制之卤碱」「其具火体用之全」(具=具备)",
|
||
"**已改**(用户核对原书,两处一并)"),
|
||
("原书核对", "有毛有孔乃肺金之象",
|
||
"磁石条「**有毛有孔**乃肺金之象」——原行文衍一「有」字,已据判决改正文",
|
||
"**用户核对原书(2026-09-21)**:原书无第三个「有」字(上文「有毛有孔」已为并列)",
|
||
"**已改**(用户核对原书)"),
|
||
("原书核对", "张儒何玄",
|
||
"石英条「张儒何玄,非道教中人」文极简省,疑当作「张(仲景)儒、(何)晏玄(学)」",
|
||
"本段论五石散方:葛洪、孙思邈为道教中人,张仲景属儒家、何晏属玄学,故「非道教中人」",
|
||
"核原书(是否原有夹注/标点)"),
|
||
("原书核对", "故谓之皂矾",
|
||
"皂矾条引《纲目》「绛矾可以染皂色,故主谓之皂矾」疑衍「主」",
|
||
"《纲目·绿矾》传本作「故謂之皂礬」",
|
||
"核原书"),
|
||
("原书核对", "纤维石膏",
|
||
"理石条「为硫酸盐类矿物石膏中的纤维膏」疑当作「纤维石膏」",
|
||
"矿物名(纤维石膏);本条上文亦作「硫酸盐类矿物石膏」",
|
||
"核原书"),
|
||
("原书核对", "疆砾",
|
||
"姜石条「则为疆砾是也,俗作疆蛎」疑当作「礓砾/礓䃯」;同条「其是非非」疑衍一「非」字",
|
||
"《纲目》姜石条引邵伯温语(礓砾=砂石);文义",
|
||
"核原书"),
|
||
("原书核对", "《别录》谓石硫磺",
|
||
"**源件脱文**:该段止于「主治心腹积聚,邪气 。」,脱《别录》石硫黄条后半及收尾引号、"
|
||
"并脱《博物志》引文一整段(全篇引号 299/298 之差由此而来)——**已据用户所给原书文字回填**",
|
||
"**用户核对原书(2026-09-21)**:用户给出脱落全文(冷癖在胁…矾石液也。/晋·张华《博物志》谓"
|
||
"「凡水源有石硫黄,其水则温,或云神人所暖,主疗疾。」);《名医别录》石硫黄条传本正作"
|
||
"「療心腹積聚,邪氣冷癖在脅,欬逆上氣…下部䘌瘡,止血,殺疥蟲。生東海牧羊山谷中及泰山、"
|
||
"河西山,礬石液也」",
|
||
"已回填(清洗版补入;**源件仍为脱文原样**);引号 299/298 → 300/300"),
|
||
# —— 体例确认(F 类)——
|
||
("体例确认", "见第二章第二节·五",
|
||
"本件回指第 2 章交叉引证 1 处(第 731 行「见第二章第二节·五」),与第 2 章清洗版条目"
|
||
"「五、心火果杏、杏核仁」逐字吻合",
|
||
"第 2 章清洗版结构索引",
|
||
"确认引证序号无误(现为照录)"),
|
||
("体例确认", "味小碱",
|
||
"引号收尾体例:「”。」(句号在引号外)19 处、「。”」202 处并用(第 1 章 36/153、"
|
||
"第 2 章 8/142),系原书体例,**未作统一**",
|
||
"三章计数对照(本件报告 §八)",
|
||
"确认是否保持原样(现为保持)"),
|
||
("体例确认", "第三章 五脏补泻金石方例 用药释义",
|
||
"标题内汉字间半角空格 10 处(章题、第 503 行节题及 7 个节题)**体例保留**,未并入 A 类清理",
|
||
"「第X章 标题」之体例空格(同第 1/2 章;第 2 章 A 类计数已单列标题内 6 处)",
|
||
"确认(现为保留)"),
|
||
("体例确认", "理石以土中火名之",
|
||
"**名位重出**:土中火(石英/理石)、金中金(石绿/硇砂)、金中火(皂矾/硇砂)、"
|
||
"土中土(赤石脂/海蛤)——均为作者拟补从火土同治论心病方用药,名位系作者自立,"
|
||
"与底本二十五味药精不构成一一对应",
|
||
"底本二十五味药精与十三种药(本件报告 §五 互校表)",
|
||
"确认是否保持原样(现为保持、登记不改)"),
|
||
("体例确认", "雷斅",
|
||
"跨章用字差异 3 项:①雷敦/雷斅(第 1 章同形未改);②白截浆/白酨浆(第 1 章存 5 处未改,"
|
||
"本件据第 2 章用户 2026-09-20 判决订正);③瓜蒌/栝蒌(第 1 章全作栝蒌,本件据本库用字统一)",
|
||
"第 1 章清洗版、第 2 章清洗版与用户 2026-09-20 判决记录",
|
||
"确认:本件订正是否维持;第 1 章是否同办回改(现为本件订正、第 1 章未动)"),
|
||
("体例确认", "五脏补泻金石方,是陶氏在择录",
|
||
"`01_来源数据/《…》第3章.md` 原节/条目/子目全为「##」(未分级),另有 2 行题名未标井号;"
|
||
"**2026-09-22 用户明示指令后就地优化**(65 行标题降级,源件 md5 `2f2f0301…` → `41363b0d…`,"
|
||
"留快照可回退);清洗版同步重建层级并补标 2 处题名",
|
||
"README「01_来源数据不可修改」之★明文例外(第 1/2 章先例);脚本 13_retitle_src_ch3.py --apply",
|
||
"**已执行**(2026-09-22 用户指令;重跑 12 后清洗版 md5 未变,两层一致)"),
|
||
("体例确认", "饮此水而得寿",
|
||
"「原书用字」逐条核定(C 类 40 条):印刷之误(本库订正、不得回流)/录入讹误"
|
||
"(原书不误)——本件为首轮清洗,**尚未核定**,一律暂标「待核原书」",
|
||
"第 1 章 2026-09-17、第 2 章 2026-09-20 同项核定先例",
|
||
"请按批一次性核定(可仿第 2 章:如「某几条为录入讹误,余为印刷之误」)"),
|
||
]
|
||
|
||
# ── G 类:人工核验判决记录(编号=待核对清单 #)────────────────────────
|
||
# 判决词汇同第 1/2 章:改 / 无误 / 保留 / 暂留待核 / 回填脚注 / 去注脚
|
||
# ── 判决(用户 2026-09-21 两批批复)──────────────────────────────────
|
||
# 判决词表(用户 2026-09-21 重申):**「保留」=本库修正经确认准确无误、维持修正(不回流)**;
|
||
# 「原文无误」=原书原文正确、不需要修正(本库如已改则回改)。
|
||
# 第 1 批(#1–#3):就助手三处待决**一律「保留修正结果」**。
|
||
# 第 2 批(#4–#20):用户逐条核对原书后给出判决(改/修正正确·保留/原文无误·暂不改/
|
||
# 原文如此·但修正有理·确认修正/原书即作某形)。
|
||
# 第 3 批(#21–#36):「修正准确,保留修改」——据判决改正文 9 处、
|
||
# 判决登记·本库无改动 3 条、维持原有修正 7 条。
|
||
# 第 4 批(#37):判「回填」——据用户所给原书脱落文字补入《别录》石硫黄条后半与
|
||
# 《博物志》引文一段(引号 299/298 → 300/300)。
|
||
# 第 5 批(#38–#53/#57–#64):「修正正确,保留」——据判决改正文 7 处、登记·本库无改动 4 条、
|
||
# 维持原有修正 10 条、体例确认 4 条;#54/#55 判「原文无误,保留不修改」(不改动)。
|
||
# 第 6 批(#56;用户 2026-09-22):判「**原文如此,暂时保留**」——姜石条句有讹脱,
|
||
# 原书即作此,本库**不作改动、疑点结项**(「暂」=日后如有新材料可再议)。
|
||
# **至此 64/64 全部判决,本章闭环。**
|
||
VERDICTS = {}
|
||
VERDICT_HEAD = "**用户 2026-09-21**"
|
||
N_FIX = VERDICT_HEAD + "(第 1 批):判「**保留修正结果**」——该项修正经确认**准确无误**、维持本库修正(**不回流**)。"
|
||
N_TIXI = VERDICT_HEAD + "(第 1 批):判「**保留修正结果**」——本项属体例项(**无错字,修正不适用**),维持本库现处理(保持原样)。"
|
||
# (类型, 锚) → (判决原文, 归并类, 说明)
|
||
VERDICT_TABLE = {
|
||
# —— 第 1 批(2026-09-21 首次批复):#1–#3 ——
|
||
("体例确认", "第三章 五脏补泻金石方例 用药释义"):
|
||
("保留", "体例确认(无错字)", N_TIXI + "(标题内半角空格 10 处保留、未并入 A 类清理)"),
|
||
("体例确认", "五脏补泻金石方,是陶氏在择录"):
|
||
("保留", "体例确认(无错字)",
|
||
VERDICT_HEAD + "(第 1 批):判「**保留修正结果**」——清洗版重建层级(章2/节3/条目4/子目5)"
|
||
"与补标题名 2 处维持(当时源件一字未动)。**用户 2026-09-22 另下明示指令「源件标题层级就地优化」**,"
|
||
"已执行 `13_retitle_src_ch3.py --apply`:源件 65 行标题降级、只改井号、正文逐行校验未动,"
|
||
"源件 md5 `2f2f0301…` → `41363b0d…`,改动前逐字节快照留档(`…_层级优化前快照_20260922.md`);"
|
||
"**重跑 12 后清洗版 md5 未变**(`5f1fb57c…`)——两层一致之证明。★明文例外第三例。"),
|
||
("版式清理确认", "《禹贡》《周官》列其土产"): ("保留", "修正内容", N_FIX),
|
||
("版式清理确认", "其最佳浸出温度为100度"): ("保留", "修正内容", N_FIX),
|
||
# —— 第 2 批(#4–#20):用户逐条核对原书 ——
|
||
("原书核对", "时间相符"):
|
||
("改", "修正内容",
|
||
VERDICT_HEAD + ":判「**改**」——经核对原书,原书作「相**符**」;本件「相附」为录入形近之误,"
|
||
"**已据判决改正文**(清单 #4)。"),
|
||
("原书核对", "公元前277年"):
|
||
("改", "修正内容",
|
||
VERDICT_HEAD + ":判「**改**」——经核对原书,原书作「**公元前277年**」;本件脱「前」字,"
|
||
"**已据判决改正文**(清单 #5)。"),
|
||
("修正确认", "雷斅"):
|
||
("修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——经核对原书,原书作「雷斅」,本件为**录入讹误**;"
|
||
"修正维持(第 1 章不同办、未动)。"),
|
||
("体例确认", "雷斅"):
|
||
("订正维持", "体例确认(无错字)",
|
||
VERDICT_HEAD + ":判「**订正维持**」——本件三项订正(雷斅/白酨浆/栝蒌)维持;"
|
||
"第 1 章**不同办、未动**,两章用字差异作为**已决体例**保留(不再列为待统一项)。"),
|
||
("修正确认", "四、礜石(木中金)"):
|
||
("原书即作「礐石」", "修正内容",
|
||
VERDICT_HEAD + ":**「原书即作『礐石』」**——经核对原书,**印刷本自身**题名即作「礐石」"
|
||
"(正文同族作「磐石」),属**原书印刷之误**;本库据底本二十五味药精「细辛 礜石为金」订正,"
|
||
"**维持修正、不得据「原书如此」回流**(★第三类,见体例登记)。"),
|
||
("原书核对", "腹中坚癖"):
|
||
("修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——经核对原书,原书作「腹中坚癖」(《本经》传本同);"
|
||
"本件「怀腹中坚」为衍讹并脱「癖」,**已据判决改正文**(清单 #9)。"),
|
||
("修正确认", "疥虫,䘌疮"):
|
||
("修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——经核对原书,原书作「䘌疮」,本件为**录入讹误**;"
|
||
"修正维持(检索须用「䘌」U+4618)。"),
|
||
("原书核对", "火惮散炎上显明之性"):
|
||
("原文无误,暂不修改", "无误·原书如此",
|
||
VERDICT_HEAD + ":判「**原文无误,暂不修改**」——经核对原书,原书即作「惮散」;"
|
||
"本库**不作改动**、疑点结项(「暂」=日后如有新材料可再议)。"),
|
||
("原书核对", "草药木火中火牡丹皮"):
|
||
("原文无误,暂时保留", "无误·原书如此",
|
||
VERDICT_HEAD + ":判「**原文无误,暂时保留**」——经核对原书,原书即作「草药木火中火」;"
|
||
"本库**不作改动**、疑点结项(「暂」=日后如有新材料可再议)。"),
|
||
("原书核对", "外有壳重垒"):
|
||
("原文如此,暂时保留", "无误·原书如此",
|
||
VERDICT_HEAD + ":判「**原文如此,暂时保留**」——经核对原书,原书即作「重垒」;"
|
||
"本库**不作改动**、疑点结项(「暂」=日后如有新材料可再议)。"),
|
||
("修正确认", "云笈七签"):
|
||
("原文如此,但修正有理,确认修正", "修正内容",
|
||
VERDICT_HEAD + ":判「**原文如此,但修正有理,确认修正**」——经核对原书,原书即作"
|
||
"「云芨七莶」「陆薰香」(**印刷本自身之误**),修正有理、**确认修正**;"
|
||
"清洗版与印刷本**有意不一致、不得回流**(★第三类)。"),
|
||
("版式清理确认", "其最佳浸出温度为100度"): ("保留", "修正内容", N_FIX), # 占位(实际见上)
|
||
("标题修复确认", "三、硝石(即火硝,火中木)"):
|
||
("修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——经核对原书,该行确为条目题名(四级);"
|
||
"清洗版补标维持(源件保持原样)。"),
|
||
("原书核对", "《别录》所谓芒硝者是也;"):
|
||
("修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——经核对原书,时珍语为一气贯下、收尾引号在"
|
||
"「殊无指归。」之后;**已据判决移引号、改句读为分号**(清单 #17;非增字,引号计数不变)。"),
|
||
("原书核对", "结出细芒者"):
|
||
("修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——经核对原书,原书作「结**出**细芒者」;"
|
||
"**已据判决改正文**(清单 #18)。"),
|
||
("原书核对", "所炼制之卤碱"):
|
||
("修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——经核对原书,原书无「的」字、并作「其**具**火体用之全」;"
|
||
"两处**已据判决一并改正文**(清单 #19)。"),
|
||
("原书核对", "有毛有孔乃肺金之象"):
|
||
("修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——经核对原书,原书无第三个「有」字;"
|
||
"**已据判决改正文**(清单 #20)。"),
|
||
}
|
||
# ── 第 3 批(#21–#36;用户 2026-09-21「21至36修正准确,保留修改」)──────────
|
||
# 口径同第 2 批:判「修正准确」=该项修正准确无误、维持(不回流);尚无改动者据拟正字改正文。
|
||
NOTE3 = ("**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #21–#36,逐条核对原书)——"
|
||
"按第 2 批同一口径:修正**准确无误、维持修正(不回流)**;如该项尚无改动,则据拟正字"
|
||
"(原书正形)**改正文**。")
|
||
NOTE3B = ("**用户 2026-09-21 判决「修正准确,保留修改」**(清单 #21–#36,逐条核对原书)——该项"
|
||
"**无拟正字**(涉夹注/标点、书名讹脱、疑有脱文),本库**不臆改、正文一字未动**;"
|
||
"判决登记即「本库读解成立」;原文照旧,本项结项。")
|
||
# 据判决改动正文之落点数(第 2 批 7 处 + 第 3 批 9 处 + 第 5 批 7 处;第 4 批为「回填」另计)
|
||
JUDGED_CHANGE_SPOTS = 23
|
||
for _k, _v in [
|
||
(("原书核对", "其吸水性强"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("修正确认", "萧绎"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("原书核对", "张儒何玄"), ("修正准确,保留修改", "判决登记·本库无改动", NOTE3B)),
|
||
(("修正确认", "皆味甘气温"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("原书核对", "石英明澈如水"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("标题修复确认", "一、绿青(即石绿,金中金)"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("修正确认", "越巂"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("原书核对", "甚难得而贵"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("原书核对", "都是由铜绿经久变化而成"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("修正确认", "生成特性"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("原书核对", "桐君采灵"), ("修正准确,保留修改", "判决登记·本库无改动", NOTE3B)),
|
||
(("修正确认", "一名羽涅"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("原书核对", "故谓之皂矾"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("原书核对", "均可治理"), ("修正准确,保留修改", "判决登记·本库无改动", NOTE3B)),
|
||
(("原书核对", "张氏治疸之硝石矾石散"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
(("修正确认", "石硫磺(金中木)"), ("修正准确,保留修改", "修正内容", NOTE3)),
|
||
]:
|
||
assert _k not in VERDICT_TABLE, _k
|
||
VERDICT_TABLE[_k] = _v
|
||
VERDICT_TABLE[("原书核对", "《别录》谓石硫磺")] = (
|
||
"回填",
|
||
"补入脱文",
|
||
"**用户 2026-09-21 判决「回填」**(清单 #37,用户核对原书后给出脱落全文)——已据所给原文"
|
||
"**补入正文**:①《别录》石硫黄条后半「冷癖在胁…下部䘌疮,止血,杀疥虫。生东海牧羊山…"
|
||
"及河西山,矾石液也。」+收尾引号;②新起一段《博物志》引文「凡水源有石硫黄,其水则温,"
|
||
"或云神人所暖,主疗疾。」。用字按本库归一(䘌疮/矾石),夹注照录;全篇引号 299/298 → **300/300**。"
|
||
"此项**源件仍为脱文原样**,仅清洗版补入。")
|
||
|
||
|
||
# ── 第 5 批(#38–#53/#57–#64;用户 2026-09-21「修正正确,保留」;#54/#55「原文无误,保留不修改」)──
|
||
NOTE5 = ("**用户 2026-09-21 判决「修正正确,保留」**(清单 #38–#53/#57–#64,逐条核对原书)——"
|
||
"修正**准确无误、维持修正(不回流)**;如该项尚无改动,则据拟正字(原书正形)**改正文**。")
|
||
NOTE5B = ("**用户 2026-09-21 判决「修正正确,保留」**(清单 #38–#53/#57–#64,逐条核对原书)——该项"
|
||
"**无拟正字**(两形并存/人名可疑/句有讹脱/旧拟与传本相反),本库**不臆改、正文一字未动**;"
|
||
"判决登记即「本库读解成立」;原文照旧,本项结项。")
|
||
NOTE5C = ("**用户 2026-09-21 判决「原文无误,保留不修改」**(清单 #54,逐条核对原书)——原书即作此,"
|
||
"本库**不作改动**;疑点结项(日后如有新材料可再议)。")
|
||
NOTE5D = ("**用户 2026-09-21 判决「原文无误,保留不修改」**(清单 #55,逐条核对原书)——本库已生效之"
|
||
"订正**维持、不回改**(「保留不修改」);其「原书用字」分类暂留待核,不钉死。")
|
||
for _k, _v in [
|
||
(("原书核对", "外家谓之阳侯"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("修正确认", "采无时。石韦为之使"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("原书核对", "泄癖"), ("修正正确,保留", "判决登记·本库无改动", NOTE5B)),
|
||
(("修正确认", "血痹血瘀"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("版式清理确认", "正品钉头赭石"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("修正确认", "故宅"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("体例确认", "饮此水而得寿"), ("修正正确,保留", "体例确认(无错字)", NOTE5)),
|
||
(("原书核对", "司空张岂"), ("修正正确,保留", "判决登记·本库无改动", NOTE5B)),
|
||
(("修正确认", "黄连末"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("原书核对", "则钢浸汁更谓何物"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("修正确认", "从火土论心病方中之草木药通草"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("体例确认", "味小碱"), ("修正正确,保留", "体例确认(无错字)", NOTE5)),
|
||
(("原书核对", "唯以山顶以篮与悬下"), ("修正正确,保留", "判决登记·本库无改动", NOTE5B)),
|
||
(("修正确认", "相龃龉"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("原书核对", "纤维石膏"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("体例确认", "理石以土中火名之"), ("修正正确,保留", "体例确认(无错字)", NOTE5)),
|
||
(("原书核对", "疆砾"), ("原文无误,保留不修改", "无误·原书如此", NOTE5C)),
|
||
(("修正确认", "呕吐痰涎"), ("原文无误,保留不修改", "修正内容", NOTE5D)),
|
||
(("原书核对", "鉴于上述情况"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("修正确认", "羊踯躅"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("原书核对", "并入驴马不用"), ("修正正确,保留", "判决登记·本库无改动", NOTE5B)),
|
||
(("修正确认", "白酨浆"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("原书核对", "生河崖山坂之阴"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("修正确认", "荠苨"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("原书核对", "主治呕啘"), ("修正正确,保留", "修正内容", NOTE5)),
|
||
(("体例确认", "见第二章第二节·五"), ("修正正确,保留", "体例确认(无错字)", NOTE5)),
|
||
]:
|
||
assert _k not in VERDICT_TABLE, _k
|
||
VERDICT_TABLE[_k] = _v
|
||
# ── 第 6 批(#56;用户 2026-09-22「原文如此,暂时保留」)──────────────────────
|
||
NOTE6 = ("**用户 2026-09-22 判决「原文如此,暂时保留」**(清单 #56,用户核对原书)——**原书即作此**,"
|
||
"本库**不作改动、疑点结项**(「暂」=日后如有新材料可再议;如原书另有文,给字样即据以订正)。")
|
||
VERDICT_TABLE[("原书核对", "每日是一至数二次十天为一疗程")] = (
|
||
"原文如此,暂时保留", "无误·原书如此", NOTE6)
|
||
|
||
|
||
# 注:清单 #15(LaTeX 版式清理)与 #3/#1/#2 同属第 1 批「保留修正结果」
|
||
VERDICT_TABLE[("版式清理确认", "其最佳浸出温度为100度")] = (
|
||
"修正正确,保留", "修正内容",
|
||
VERDICT_HEAD + ":判「**修正正确,保留**」——LaTeX 残留还原与半角「~」改全角维持(版式清理)。")
|
||
|
||
|
||
def build_verdicts(rows):
|
||
"""按 (类型, 锚) 登记已判决项;未列者留空(清单判决栏 ☐、余项待判决)。"""
|
||
V = {}
|
||
for r in rows:
|
||
key = (r["类型"], r["锚"])
|
||
if key in VERDICT_TABLE:
|
||
V[r["#"]] = VERDICT_TABLE[key]
|
||
return V
|
||
|
||
|
||
BUCKETS = ["修正内容", "补入脱文", "修正内容(待补正字)", "判决登记·本库无改动", "保留(本库未改动)",
|
||
"体例确认(无错字)", "无误·原书如此", "暂留待核", "回填脚注", "去脚注"]
|
||
DISPLAY = {"修正内容": "修正内容(正文已按修正生效)",
|
||
"补入脱文": "补入脱文(据用户提供的原书脱落文字回填正文,已生效)",
|
||
"判决登记·本库无改动": "判决登记·本库无改动(用户判「修正准确」,该项无拟正字/不臆改,正文照旧)",
|
||
"修正内容(待补正字)": "修正内容·待补正字(判为原书错误,待给正字后改正文)",
|
||
"保留(本库未改动)": "保留·本库未改动(该项本库未作改动,无可保留之修正,原文照旧)",
|
||
"体例确认(无错字)": "体例确认(无错字,修正不适用)"}
|
||
# 「已解决(移出存疑册)」的归并类;「保留(本库未改动)」与「暂留待核」同属**未解决**
|
||
RESOLVED_BUCKETS = {"修正内容", "补入脱文", "修正内容(待补正字)", "判决登记·本库无改动",
|
||
"体例确认(无错字)", "无误·原书如此", "回填脚注", "去脚注"}
|
||
|
||
|
||
def verdict_explain(rows, md5_out):
|
||
"""本次判决说明(第 1/2 批)——报告 §7.0 与清单文末共用同一文本。"""
|
||
n_all, n_v = len(rows), len(VERDICTS)
|
||
bk = collections.Counter(v[1] for v in VERDICTS.values())
|
||
n_change = JUDGED_CHANGE_SPOTS
|
||
return [
|
||
"## 本次判决说明(2026-09-21 第 1–5 批;2026-09-22 第 6 批)", "",
|
||
"**判决词表(用户 2026-09-21 重申)**:`保留`=**本库修正确实准确无误、维持修正(不回流)**;"
|
||
"`原文无误`=**原书原文正确、不需要修正**(本库如已改则回改)。", "",
|
||
"### 第 1 批(#1–#3,用户首批复)", "",
|
||
"用户就助手三处待决(①逐条判决清单 ②C 类「原书用字」核定 ③源件标题层级是否就地优化)"
|
||
"**一律批复「保留修正结果」**:#1 标题内体例空格保留 · #2 **清洗版重建层级维持**"
|
||
"(当时源件一字未动;**2026-09-22 用户另下明示指令后就地优化源件**,见第 7 批) · "
|
||
"#3 行尾空格删除维持(另 #4–#20 逐条另判,见下)。", "",
|
||
"### 第 2 批(#4–#20,用户逐条核对原书)", "",
|
||
"- **判「改」2 条**:#4「相附」→「**相符**」;#5「西元277年」→「**公元前277年**」——**已据判决改正文**。",
|
||
"- **判「修正正确,保留」9 条**:#6 雷斅 · #9「怀腹中坚」→「**腹中坚癖**」 · #10 䘌疮 · "
|
||
"#14 云笈七签/薰陆香 · #15 LaTeX 还原 · #16 标题补标 · #17 引号范围 · #18「结也」→「**结出**」 · "
|
||
"#19 衍「的」与「俱」→「**具**」 · #20 衍「有」——其中 **#9/#17/#18/#19/#20 据判决改正文**"
|
||
"(#6/#10/#14/#15/#16 为已有修正之维持)。",
|
||
"- **判「原文如此,但修正有理,确认修正」1 条**:#14(原书即作「云芨七莶」「陆薰香」)"
|
||
"——属 ★**原书印刷之误·本库订正**(与印刷本有意不一致、**不得回流**)。",
|
||
"- **判「原书即作『礐石』」1 条**:#8——**印刷本自身**题名即作「礐石」(正文同族作「磐石」),"
|
||
"本库据底本二十五味药精订正为「礜石」,**修正维持、不得据「原书如此」回流**(★第三类)。",
|
||
"- **判「原文无误/原文如此,暂不修改/暂时保留」3 条**:#11「惮散」 · #12「草药木火中火」 · "
|
||
"#13「重垒」——**原书即作此,本库不作改动**,疑点结项(「暂」=日后如有新材料可再议)。",
|
||
"- **判「订正维持」1 条**:#7 跨章用字——本件订正(雷斅/白酨浆/栝蒌)**维持**,"
|
||
"第 1 章**不同办、未动**(两章用字差异作为已决体例保留)。", "",
|
||
"### 第 3 批(#21–#36,用户逐条核对原书)", "",
|
||
"用户批复「**21至36修正准确,保留修改**」,按第 2 批同一口径执行:", "",
|
||
"- **据判决改正文 9 处**(清单 #21/#25/#28/#29/#33/#35):①「吸水其性强」→"
|
||
"「**其吸水性强**」;②「介于上述理由」→「**基于上述理由**」;③「明沏如水」→"
|
||
"「**明澈如水**」;④「甚难是之而贵」→「**甚难得而贵**」;⑤「或去其生从实至空」→"
|
||
"「**或云**其生从实至空」;⑥「化为输石」→「化为**鍮石**」;⑦「都是在铜绿经久变化而成」→"
|
||
"「都是**由**铜绿经久变化而成」;⑧「故主谓之皂矾」→「故**谓**之皂矾」;⑨"
|
||
"「张氏治疽之硝石矾石散」→「治**疸**」。",
|
||
"- **判决登记·本库无改动 3 条**:#23「张儒何玄」(涉夹注/标点,不臆加标记)· "
|
||
"#31「桐君采灵」(书名疑为《桐君采药录》之讹脱,无原书字样不臆补,**照原字保留**,检索须用原字)· "
|
||
"#34「均可治理」(疑有脱文,按「不敢臆补」之例照原样保留)——三条判「修正准确」即本库读解成立,"
|
||
"**正文一字未动**。",
|
||
"- **维持原有修正 7 条**:#22 萧绎 · #24 皆味甘气温/何晏 · #26 标题补标 · #27 越巂 · "
|
||
"#30 生成特性 · #32 一名羽涅 · #36 石硫磺名位(金中木)——皆维持本库修正、不回流。",
|
||
"- **部分未决 1 处 → 已获批复(2026-09-22)**:#25②「似与石英有火性之**不谋**」——「疑脱『而合』/"
|
||
"当作『相谋』」两说并存、原书用字未定,本库未改;**用户 2026-09-22 判「保留」**——该项本库"
|
||
"**未作改动、无可保留之修正**,据判决词表登记为**「保留(本库未改动)」**、正文照旧,"
|
||
"**该子疑点仍属未解决**(如意为结项,回「原文无误」即移入 6.1)。",
|
||
"- **本轮新发现 2 处(未入清单、未改动)**:①《纲目》曾青条释名传本作「故曰**曾青**也」"
|
||
"而本件作「故曰层青也」——**用户 2026-09-22 判「原文如此,暂保留」:原书即作此,本库不改、"
|
||
"疑点结项**(「暂」=日后如有新材料可再议);②《纲目·绿矾》释名传本作「**绿**矾可以染皂色」"
|
||
"而本件引作「**绛**矾」(同句前文「煅赤者名绛矾」已出「绛矾」)——**本次未裁示,"
|
||
"照原样保留、待裁示**。", "",
|
||
"### 第 4 批(#37,用户核对原书)", "",
|
||
"用户就源件脱文给出原书脱落全文,判决「**回填**」:", "",
|
||
"- **补入正文 2 段**(清洗版第 397 行):①《别录》石硫黄条后半「冷癖在胁,咳逆上气,"
|
||
"脚冷疼弱无力,及鼻衄,恶疮,下部䘌疮,止血,杀疥虫。生东海牧羊山,及大山"
|
||
"(大山具体地址待考,疑为太山),及河西山,矾石液也。」+收尾引号(原文末「邪气」后之句号"
|
||
"改逗号——该句号系脱文截断所致,补文后清单续读);②新起一段「晋·张华《博物志》谓:"
|
||
"「凡水源有石硫黄,其水则温,或云神人所暖,主疗疾。」」(本条他家引文皆独立成段之体例)。",
|
||
"- **用字归一 2 处**(本库订正体例):「下部鳖疮」→「**下部䘌疮**」(同清单 #10 已定订正);"
|
||
"「礬石液也」→「**矾石液也**」(简体归一,同「採→采」例)。**如原书该处实作「鳖疮」「礬石」,"
|
||
"给一字即回改。**",
|
||
"- **夹注照录**:「(大山具体地址待考,疑为太山)」按所给原文照录(体例同本条「生东海"
|
||
"(今江苏北部与山东省临近…)」之夹注);若系按语、不当入正文,说一声即删。",
|
||
"- **引号配平**:全篇由 299/298 变为 **300/300**(脱文所缺收尾引号已补)。",
|
||
"**源件(01 层)仍为脱文原样**(归档原则「来源层不改」);补入只落在清洗版,"
|
||
"日后以原书复核时可直接对照。", "", "### 第 5 批(#38–#53/#57–#64,用户逐条核对原书;#54/#55 判「原文无误,保留不修改」)", "",
|
||
"- **据判决改正文 7 处**:#38「外家谓之侯」→「外家谓之**阳侯**」;#47「更谓何系」→"
|
||
"「更谓**何物**」;#52「纤维膏」→「**纤维石膏**」;#57「鉴于上种情况」→「鉴于**上述**情况」;"
|
||
"#61「生河**洼**山坂」→「生河**崖**山坂」;#63「主治呕**呃**」→「主治呕**啘**」、"
|
||
"「除咳嗽,囊结」→「**破咳嗽囊结**」。逐处均有传本直证:《本草纲目》石硫黄条"
|
||
"「外家謂之陽侯」、铁落条「則鋼浸汁更謂何物」、戎盐条「生河崖山坂之陰土石間」;"
|
||
"《名医别录》竹茹条「主嘔啘,溫氣寒熱,吐血,崩中」;《本草经集注》皂荚条「消穀,破咳嗽囊結」。",
|
||
"- **判决登记·本库无改动 4 条**:#40「泄癖/泄澼」两形并存(**检索须两形并用**)· "
|
||
"#45「司空张岂」人名可疑(南齐明帝时无任司空之可考者;无原书字样**不臆改人名**)· "
|
||
"#50《博物志》「唯以山顶以篮与悬下」句有讹脱(**不臆补**)· #59「并入驴马不用」——"
|
||
"**旧拟「不入驴马药用」经核《唐本草》传本作「驴马药亦用之」,语意相反,故不据旧拟改动**、"
|
||
"登记待原书用字(另有「与陶弘景约同时的甄权」与本件上文自相矛盾一处,属作者行文之误,登记待核)。",
|
||
"- **维持原有修正 10 条**:#39 采无时 · #41 血痹 · #43 故居/若欲 · #46 黄连末 · #48 从火土 · "
|
||
"#51 相龃龉 · #58 羊踯躅 · #60 栝蒌/从火土论心病方 · #62 荠苨/乌扇/乌翣/猳猪屎/地菅/氐冬/"
|
||
"采根 · #42 句中空格从严删除(版式)——皆维持本库修正、不回流。",
|
||
"- **#54「原文无误,保留不修改」**:「疆砾」「其是非非」——原书即作此,本库**不改**、疑点结项。",
|
||
"- **#55「原文无误,保留不修改」**:本库已生效之订正(哎吐→呕吐/管经→曾经等 4 处)**维持、不回改**;"
|
||
"其「原书用字」分类**暂留待核、不钉死**。",
|
||
"- **体例确认 4 条**(#44「原书用字」逐条核定 · #49 引号收尾体例 · #53 名位重出 · "
|
||
"#64 与第 2 章交叉引证):修正不适用,维持现处理。",
|
||
"### 第 6 批(#56,用户核对原书;2026-09-22)", "",
|
||
"- **判「原文如此,暂时保留」**:#56 姜石条「每日是一至数二次十天为一疗程」句有讹脱"
|
||
"(疑当作「每日一至二次,十天为一疗程」之类)——**原书即作此,本库不作改动、疑点结项**"
|
||
"(「暂」=日后如有新材料可再议;如原书另有文,给字样即据以订正)。",
|
||
"- **本章至此 64/64 全部判决、闭环**(存疑册清零:6.1 已核验 32 项 · 6.2 无)。", "",
|
||
"### 第 7 批(2026-09-22,用户就子疑点与体例四项批复)", "",
|
||
"- **曾青条「故曰层青也」=「原文如此,暂保留」**——《纲目》曾青条释名传本作「故曰**曾青**也」,"
|
||
"本件作「层青」;**原书即作此,本库不改、疑点结项**(「暂」=日后如有新材料可再议;"
|
||
"如原书另有文,给字样即据以订正)。**检索须用原字「层青」**。同批新发现之《纲目·绿矾》"
|
||
"「**绛**矾可以染皂色」(传本「绿矾」)**用户本次未裁示,仍照原样保留、待裁示**。",
|
||
"- **#25②「似与石英有火性之不谋」=「保留」**——本项本库**未作改动**、无可保留之修正;"
|
||
"据判决词表登记为**「保留(本库未改动)」**、**正文照旧**,该子疑点**仍属未解决**"
|
||
"(同第 1 批 32 项之例;如意为结项,回「**原文无误**」即移入 6.1)。",
|
||
"- **C 类余 11 条「原书用字」=「暂时保留」**——分类(录入讹误/★印刷之误)**暂不钉定**、"
|
||
"**正文一律不改**;维持「本库订正·保留修正、不得回流」之处理。",
|
||
"- **源件标题层级就地优化=执行**——用户明示指令,已跑 `13_retitle_src_ch3.py --apply`"
|
||
"(只改井号、正文逐行校验未动,65 行标题降级);源件 md5 `2f2f0301…` → `41363b0d…`,"
|
||
"留逐字节快照可回退;**重跑 12 后清洗版 md5 未变**(`5f1fb57c…`)。", "",
|
||
f"### 归并与进度", "",
|
||
f"- **已判决 {n_v} 条/{n_all} 条**:" + " · ".join(f"{DISPLAY.get(k, k)} {bk[k]}"
|
||
for k in BUCKETS if bk.get(k)) + "。",
|
||
(f"- **全部判决完毕(本章闭环)**——判决栏已全部填入(✅),存疑册清零。" if n_all == n_v else
|
||
f"- **余 {n_all - n_v} 条(#{n_v + 1}–#{n_all})待判决**——判决栏留空(☐),"
|
||
f"请按同一口径逐条核对原书后回复(可分批)。"),
|
||
f"- **「原书用字」核定进度**:经用户逐条核对原书**已钉定 {sum(origin_counts()[:2])} 条/{len(C_FIXES)} 条**"
|
||
f"(录入讹误 {origin_counts()[0]} · ★原书印刷之误·本库订正 {origin_counts()[1]});"
|
||
f"其余 **{origin_counts()[2]} 条**待核原书,未核定前统一按「本库订正·保留修正」处理、"
|
||
f"**不得据「原书如此」回流**。",
|
||
f"- **正文改动两批合计 {n_change} 处**:第 2 批 7 处(相附→相符 · 西元→公元前 · 怀腹中坚→腹中坚癖 · "
|
||
f"引号范围移正 · 结也→结出 · 衍「的」与俱→具 · 衍「有」;清洗版 `2c5378bd…` → `e68c05cb…`)"
|
||
f"+第 3 批 9 处(吸水其性强→**其吸水性强** · 介于→**基于**上述理由 · 明沏如水→**明澈如水** · "
|
||
f"甚难是之而贵→**甚难得而贵** · 或去其生→**或云**其生从实至空 · 输石→**鍮石** · "
|
||
f"都是在→都是**由**铜绿经久变化而成 · 故主谓之皂矾→故**谓**之皂矾 · 治疽→**治疸**)——"
|
||
f"现清洗版 md5 `{md5_out}`。**第 6 批(#56)判「原文如此,暂时保留」——本库不改、"
|
||
f"清洗版 md5 未因此变动**(「不改」类判决的预期签名)。",
|
||
"", "---", "",
|
||
]
|
||
|
||
|
||
def verdict_stat():
|
||
c = collections.Counter(v[1] for v in VERDICTS.values())
|
||
if not c:
|
||
return "尚无判决"
|
||
return " · ".join(f"{DISPLAY.get(k, k)} {c[k]}" for k in BUCKETS if c.get(k))
|
||
|
||
|
||
def resolved_suspect_keys(rows):
|
||
"""移出存疑册者=「原书核对」类且判决归并类属**已解决**者(保留「本库未改动」不算解决)。"""
|
||
return {r["锚"] for r in rows if r["类型"] == "原书核对" and r["#"] in VERDICTS
|
||
and VERDICTS[r["#"]][1] in RESOLVED_BUCKETS}
|
||
|
||
|
||
# ── 拟正字表(判为「修正内容」而正文未改者;本件首轮为空)────────────────
|
||
PENDING_FIXES = []
|
||
APPLIED_N = {n for n, *_ in PENDING_FIXES}
|
||
|
||
|
||
def read_bin(p):
|
||
raw = open(p, "rb").read()
|
||
return raw.decode("utf-8"), hashlib.md5(raw).hexdigest()
|
||
|
||
|
||
def convert_latex(s):
|
||
"""PDF 公式化残留:$41\\% \\sim 45\\%$ → 41%~45%"""
|
||
s = re.sub(r"\$([\d.]+)\\?%\s*\\sim\s*([\d.]+)\\?%\$", r"\1%~\2%", s)
|
||
return re.sub(r"\$([\d.]+)\s*\\sim\s*([\d.]+)\$", r"\1~\2", s)
|
||
|
||
|
||
HALF2FULL = {",": ",", ";": ";", ":": ":", "(": "(", ")": ")", "~": "~"}
|
||
|
||
|
||
def main():
|
||
text, md5_src = read_bin(SRC)
|
||
text_src = text
|
||
n_src_lines = text_src.rstrip("\n").count("\n") + 1
|
||
bendi, md5_bendi = read_bin(BENDI)
|
||
ch1, md5_ch1 = read_bin(CH1_MD)
|
||
ch2, md5_ch2 = read_bin(CH2_MD)
|
||
raw_lines = text.replace("\r\n", "\n").split("\n")
|
||
events = []
|
||
|
||
# ── A 类读数(清理前)──
|
||
n_crlf = text.count("\r\n")
|
||
n_trail = sum(1 for l in raw_lines if l != l.rstrip())
|
||
n_lead = sum(1 for l in raw_lines if l != l.lstrip())
|
||
n_u3000 = sum(1 for l in raw_lines if "\u3000" in l)
|
||
n_cc = len(re.findall(r"(?<=[\u4e00-\u9fff]) (?=[\u4e00-\u9fff])", text))
|
||
n_num = len(re.findall(r"(?<=[\u4e00-\u9fff]) (?=\d)|(?<=\d) (?=[\u4e00-\u9fff])", text))
|
||
n_cc_head = sum(len(re.findall(r"(?<=[\u4e00-\u9fff]) (?=[\u4e00-\u9fff])", l))
|
||
for l in raw_lines if l.startswith("#"))
|
||
n_cc_body, n_num_body = n_cc - n_cc_head, n_num
|
||
n_ascii_punct = {c: text.count(c) for c in ",;:!?~$"}
|
||
half_lines = sorted({i for i, l in enumerate(raw_lines, 1)
|
||
if re.search(r"[\u4e00-\u9fff][,;:()!?]|[,;:()!?][\u4e00-\u9fff]", l)})
|
||
space_inventory, num_inventory = [], []
|
||
for i, l in enumerate(raw_lines, 1):
|
||
for m in re.finditer(r"[\u4e00-\u9fff] [\u4e00-\u9fff]", l):
|
||
space_inventory.append((i, l[max(0, m.start() - 12):m.end() + 12]))
|
||
for m in re.finditer(r"\d [\u4e00-\u9fff]|[\u4e00-\u9fff] \d", l):
|
||
num_inventory.append((i, l[max(0, m.start() - 12):m.end() + 12]))
|
||
|
||
# ── B 类:接合(行号锚定 + 校验)──
|
||
units, i = [], 0
|
||
while i < len(raw_lines):
|
||
ln = i + 1
|
||
s = raw_lines[i].strip()
|
||
if not s:
|
||
i += 1
|
||
continue
|
||
if ln in JOINS:
|
||
anchor, why = JOINS[ln]
|
||
if anchor not in s:
|
||
raise SystemExit(f"接合锚校验失败:raw{ln} 应含「{anchor}…」,实为「{s[:40]}」")
|
||
j = i + 1
|
||
while j < len(raw_lines) and not raw_lines[j].strip():
|
||
j += 1
|
||
if j >= len(raw_lines) or raw_lines[j].strip().startswith("#"):
|
||
raise SystemExit(f"接合失败:raw{ln} 之后无正文行")
|
||
nxt = raw_lines[j].strip()
|
||
merged = s + nxt
|
||
units.append((ln, merged))
|
||
events.append(dict(行=ln, 类型="B断行接合",
|
||
原=f"{s[-26:]} ⟂ {nxt[:26]}",
|
||
改=f"…{merged[-40:]}", 依据=why))
|
||
i = j + 1
|
||
continue
|
||
units.append((ln, s))
|
||
i += 1
|
||
|
||
# ── A / C / D / H / 补标:逐段处理 ──
|
||
out, level_log = [], []
|
||
c_hits, d_hits = collections.Counter(), collections.Counter()
|
||
missing_log = []
|
||
for ln, s in units:
|
||
is_head = s.startswith("#")
|
||
# H:源件未标井号之题名补标
|
||
if ln in MISSING_HEADINGS:
|
||
anchor, lv = MISSING_HEADINGS[ln]
|
||
if not s.startswith(anchor):
|
||
raise SystemExit(f"补标锚校验失败:raw{ln} 应以「{anchor[:20]}…」起,实为「{s[:40]}」")
|
||
s = "#" * lv + " " + s
|
||
missing_log.append((ln, s))
|
||
events.append(dict(行=ln, 锚=s[:14], 类型="H标题补标",
|
||
原="条目题名未标井号(正文形式)", 改=f"{'#'*lv} {re.sub(r'^#+ ','',s)[:24]}…",
|
||
依据="与本节他条目同式;其下「N.」子目正附于此条"))
|
||
is_head = True
|
||
|
||
# C 讹字
|
||
for bad, good, n_exp, why in C_FIXES:
|
||
n = s.count(bad)
|
||
if n:
|
||
allowed = n_exp if isinstance(n_exp, (tuple, list)) else (n_exp,)
|
||
if n not in allowed:
|
||
raise SystemExit(f"C 锚校验失败:「{bad}」命中 {n} 次,预期 {allowed}")
|
||
s = s.replace(bad, good)
|
||
c_hits[bad] += n
|
||
events.append(dict(行=ln, 锚=good[-12:], 类型="C讹字修正",
|
||
原=f"{bad}({n} 处)", 改=good, 依据=why))
|
||
|
||
# 回填(据判决补入原书脱落文字;含新增段落)
|
||
for bad, good, n_exp, why in BACKFILLS:
|
||
n = s.count(bad)
|
||
if n:
|
||
if n != n_exp:
|
||
raise SystemExit(f"回填锚校验失败:「{bad}」命中 {n} 次,预期 {n_exp}")
|
||
s = s.replace(bad, good)
|
||
events.append(dict(行=ln, 锚=good[:14], 类型="回填脱文",
|
||
原=f"{bad}(脱文截断处)", 改=f"…{good[8:60]}…(补 {len(good) - len(bad)} 字并新起一段)",
|
||
依据=why))
|
||
|
||
# D 标点
|
||
for bad, good, n_exp, why in D_FIXES:
|
||
n = s.count(bad)
|
||
if n:
|
||
if n != n_exp:
|
||
raise SystemExit(f"D 锚校验失败:「{bad}」命中 {n} 次,预期 {n_exp}")
|
||
s = s.replace(bad, good)
|
||
d_hits[bad] += n
|
||
events.append(dict(行=ln, 锚=good[-14:], 类型="D标点",
|
||
原=bad, 改=good, 依据=why))
|
||
|
||
if not is_head:
|
||
# A:LaTeX 残留
|
||
conv = convert_latex(s)
|
||
if conv != s:
|
||
events.append(dict(行=ln, 锚="41%~45%", 类型="A版式残留",
|
||
原="LaTeX(PDF 公式化)残留「$41\\% \\sim 45\\%$」", 改="41%~45%",
|
||
依据="PDF 公式化残留,按数据还原(同第 2 章「$7 \\sim 10$」→「7~10」例)"))
|
||
s = conv
|
||
# A:半角标点 → 全角(本件无半角标点行,此处为兼容保留)
|
||
if ln in half_lines:
|
||
before = {c: s.count(c) for c in HALF2FULL}
|
||
for a, b in HALF2FULL.items():
|
||
s = s.replace(a, b)
|
||
ch = {k: v for k, v in before.items() if v}
|
||
if ch:
|
||
events.append(dict(行=ln, 锚=s[:12], 类型="D标点",
|
||
原="半角标点 " + "、".join(f"「{k}」×{v}" for k, v in ch.items()),
|
||
改="全角 " + "、".join(f"「{HALF2FULL[k]}」" for k in ch),
|
||
依据="标点规范化(半角改全角)"))
|
||
# A:空格清理(全角标点旁 → 汉字/数字间)
|
||
s = re.sub(r"(?<=[,。、;:?!“”‘’()《》〔〕…—]) +", "", s)
|
||
s = re.sub(r" +(?=[,。、;:?!“”‘”‘()《》…—])", "", s)
|
||
s = re.sub(r"(?<=[\u4e00-\u9fff0-9]) +(?=[\u4e00-\u9fff0-9])", "", s)
|
||
|
||
if is_head:
|
||
bare = re.sub(r"^#+\s*", "", s)
|
||
lv, kind = None, None
|
||
for pat, L, K in H_RULES:
|
||
if pat.match(bare):
|
||
lv, kind = L, K
|
||
break
|
||
if lv is None:
|
||
raise SystemExit(f"未识别的标题(源行 {ln}):{s[:60]}")
|
||
newh = "#" * lv + " " + bare
|
||
if newh != s:
|
||
level_log.append((ln, s, newh))
|
||
out.append(newh)
|
||
else:
|
||
out.append(s)
|
||
|
||
# ── C 类全文命中数校验(防漏改/误改;含「每条规则至少命中一次」覆盖断言)──
|
||
for bad, good, n_exp, why in C_FIXES:
|
||
if c_hits[bad] == 0:
|
||
raise SystemExit(f"C 规则未命中(源件疑已变动):「{bad}」")
|
||
if bad in C_TOTAL and c_hits[bad] != C_TOTAL[bad]:
|
||
raise SystemExit(f"C 全文命中校验失败:「{bad}」共命中 {c_hits[bad]} 处,预期 {C_TOTAL[bad]}")
|
||
|
||
# ── C 类回改:撤销本库前批修正(文本已随规则删除而回改,此处校验并留痕)──
|
||
probe = "\n".join(out)
|
||
for orig, prev, why in REVERTS:
|
||
if probe.count(orig) != 1:
|
||
raise SystemExit(f"回改锚校验失败(原文形命中 {probe.count(orig)} 次):{orig}")
|
||
if prev in probe:
|
||
raise SystemExit(f"回改未生效:仍含本库前批改形「{prev}」")
|
||
events.append(dict(行=0, 锚=orig, 类型="C回改",
|
||
原=f"本库前批改形「{prev}」", 改=f"回改为原件形「{orig}」", 依据=why))
|
||
|
||
text = "\n\n".join(out) + "\n"
|
||
text = re.sub(r"\n{4,}", "\n\n\n", text)
|
||
|
||
# ── 事件行号改为清洗版坐标(锚校验;多命中取离源行最近者)──
|
||
flines = text.split("\n")
|
||
for e in events:
|
||
key = e.get("锚") or ""
|
||
if key:
|
||
hit = [i for i, l in enumerate(flines, 1) if key in l]
|
||
if len(hit) == 1:
|
||
e["行"] = hit[0]
|
||
elif len(hit) > 1:
|
||
e["行"] = min(hit, key=lambda h: abs(h - e.get("行", 0)))
|
||
e["备注"] = "行号指清洗版"
|
||
|
||
# ── 结构解析 ──
|
||
heads, chap, secs2, cur_sec, cur_item = [], None, [], None, None
|
||
for i, l in enumerate(flines, 1):
|
||
s = l.strip()
|
||
if not s.startswith("#"):
|
||
continue
|
||
bare = re.sub(r"^#+\s*", "", s)
|
||
lv = len(re.match(r"^#+", s).group())
|
||
kind = None
|
||
for pat, L, K in H_RULES:
|
||
if pat.match(bare):
|
||
kind = K
|
||
break
|
||
heads.append(dict(层级=lv, 类型=kind, 标题=bare, 行=i))
|
||
if kind == "章":
|
||
chap = bare
|
||
elif kind == "节":
|
||
cur_sec = dict(节=bare, 章=chap, 行=i, 条目=[])
|
||
secs2.append(cur_sec)
|
||
cur_item = None
|
||
elif kind == "条目" and cur_sec is not None:
|
||
cur_item = dict(序=re.match(r"^([一二三四五六七八九十]+)、", bare).group(1),
|
||
名=re.sub(r"^[一二三四五六七八九十]+、", "", bare), 行=i, 子目=[])
|
||
cur_sec["条目"].append(cur_item)
|
||
elif kind == "子目" and cur_item is not None:
|
||
cur_item["子目"].append(dict(
|
||
序=re.match(r"^(\d+)\.", bare).group(1),
|
||
名=re.sub(r"^\d+\.\s*", "", bare), 行=i))
|
||
|
||
# ── 自检 ──
|
||
errs, oks, notes = [], [], []
|
||
cnt = collections.Counter(h["类型"] for h in heads)
|
||
exp = dict(章=1, 节=7, 条目=32, 子目=27)
|
||
if all(cnt[k] == v for k, v in exp.items()):
|
||
oks.append(f"标题计数 章1/节7/条目32/子目27(与预期一致)")
|
||
else:
|
||
errs.append(f"标题计数异常:{dict(cnt)},预期 {exp}")
|
||
CVN = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十"]
|
||
seq_ok = True
|
||
for s_ in secs2:
|
||
got = [e["序"] for e in s_["条目"]]
|
||
if got != CVN[:len(got)]:
|
||
errs.append(f"{s_['节']} 条目序号不连续:{got}")
|
||
seq_ok = False
|
||
for e in s_["条目"]:
|
||
g2 = [x["序"] for x in e["子目"]]
|
||
if g2 != [str(n) for n in range(1, len(g2) + 1)]:
|
||
errs.append(f"{s_['节']}·{e['序']}、{e['名']} 子目序号不连续:{g2}")
|
||
seq_ok = False
|
||
if seq_ok:
|
||
oks.append("各节条目序号自「一、」连续;各条目内子目序号自「1.」连续(无缺无重)")
|
||
lvs = [h["层级"] for h in heads]
|
||
jumps = [(i, lvs[i - 1], lvs[i]) for i in range(1, len(lvs)) if lvs[i] > lvs[i - 1] + 1]
|
||
if lvs[0] == 2 and not jumps:
|
||
oks.append("标题层级体系正确:起于章(2),递降为 节(3)/条目(4)/子目(5),无跳级")
|
||
else:
|
||
errs.append(f"标题层级异常:首层级 {lvs[0]},跳级处 {jumps}")
|
||
|
||
# C 类三段验证
|
||
c_bad_left = [b for b, g, _n, _w in C_FIXES if b in text and b != g]
|
||
c_missing = [g for b, g, _n, _w in C_FIXES if text.count(g) == 0]
|
||
if not c_bad_left and not c_missing:
|
||
oks.append(f"C 类 {len(C_FIXES)} 条规则三段验证通过(讹形残留 0/正形均已出现)")
|
||
else:
|
||
errs.append(f"C 类残留:讹形 {c_bad_left};正形未出现 {c_missing}")
|
||
|
||
# 标点配平
|
||
def bal(t):
|
||
return dict(引号=(t.count("“"), t.count("”")), 单引号=(t.count("‘"), t.count("’")),
|
||
书名号=(t.count("《"), t.count("》")), 括号=(t.count("("), t.count(")")),
|
||
方括号=(t.count("〔"), t.count("〕")))
|
||
b = bal(text)
|
||
b_src = bal(text)
|
||
bal_ok = [k for k, v in b.items() if v[0] == v[1]]
|
||
if ({"单引号", "书名号", "括号", "方括号"} <= set(bal_ok)
|
||
and (b["引号"][0] == b["引号"][1] or b["引号"] == (299, 298))):
|
||
oks.append("标点配平:" + "、".join(f"{k} {v[0]}/{v[1]}" for k, v in b.items()
|
||
if k != "引号"))
|
||
if b["引号"][0] == b["引号"][1]:
|
||
oks.append(f"引号 {b['引号'][0]}/{b['引号'][1]} **配平**(原差 1 处系源件第 397 行"
|
||
f"《别录》石硫黄条脱文所致,已据用户判决「回填」补齐并新起《博物志》一段)")
|
||
else:
|
||
notes.append(f"引号 {b['引号'][0]}/{b['引号'][1]}:差 1 处,系源件第 397 行《别录》石硫黄条"
|
||
f"**脱文**(该段止于「邪气 。」且无收尾引号)所致,**照原样保留、不臆补**;"
|
||
f"除该处外全篇引号配平")
|
||
else:
|
||
errs.append(f"标点不配平(非预期项):{b}")
|
||
half_left = re.findall(r"[\u4e00-\u9fff][,;:!?()]|[,;:!?()][\u4e00-\u9fff]", text)
|
||
if not half_left:
|
||
oks.append("半角标点 0 处(本件源件仅半角「~」1 处,已改全角)")
|
||
else:
|
||
errs.append(f"仍有半角标点 {len(half_left)} 处:{half_left[:6]}")
|
||
space_left = [l[:40] for l in flines if l != l.rstrip()]
|
||
body_sp = [(i, l[:60]) for i, l in enumerate(flines, 1)
|
||
if not l.startswith("#") and re.search(r"[\u4e00-\u9fff0-9] +[\u4e00-\u9fff0-9]", l)]
|
||
head_sp = sum(len(re.findall(r"(?<=[\u4e00-\u9fff0-9]) +(?=[\u4e00-\u9fff0-9])", l))
|
||
for l in flines if l.startswith("#"))
|
||
if not space_left and not body_sp:
|
||
oks.append(f"残留空格 0 处(行尾/正文汉字数字间/标点旁);标题内「第X章 标题」等体例空格 "
|
||
f"{head_sp} 处保留(同第 1/2 章)")
|
||
else:
|
||
errs.append(f"仍有残留空格 {len(space_left)} 行/{len(body_sp)} 处:{space_left[:3]} {body_sp[:3]}")
|
||
latex_left = re.findall(r"\$|\\[a-zA-Z]{2,}", text)
|
||
if not latex_left:
|
||
oks.append("LaTeX/Markdown 引擎残留 0 处")
|
||
else:
|
||
errs.append(f"仍有 LaTeX 残留 {len(latex_left)} 处")
|
||
brk = [i + 1 for i in range(len(flines) - 1)
|
||
if flines[i].strip() and flines[i + 1].strip()
|
||
and not re.search(r"[。?!;:”》))】…—、,]$", flines[i].strip())
|
||
and not flines[i].strip().startswith("#")
|
||
and re.match(r"^[\u4e00-\u9fff“(《]", flines[i + 1].strip())
|
||
and not flines[i + 1].strip().startswith("#")]
|
||
if not brk:
|
||
oks.append("断行候选 0 处(无句中截断;B 类接合项 0)")
|
||
else:
|
||
errs.append(f"断行候选 {len(brk)} 处:{brk[:6]}")
|
||
|
||
# 名位互校(35 品 ⇄ 底本二十五味药精/十三种药)
|
||
cross = []
|
||
for sec, title, base, verdict in ITEMS35:
|
||
present = text.count(title) == 1
|
||
if not present:
|
||
errs.append(f"名位互校:清洗版未见条目题名「{title}」")
|
||
cross.append((sec, title, base, verdict, present))
|
||
n_ok = sum(1 for x in cross if x[-1] and x[3].startswith("✅"))
|
||
n_fill = sum(1 for x in cross if x[-1] and x[3].startswith("○"))
|
||
if n_ok + n_fill == len(cross):
|
||
oks.append(f"35 品金石药「名位」⇄ 底本二十五味药精/十三种药:**{n_ok} 品相符**、"
|
||
f"**{n_fill} 品底本无对应(作者拟补,名位自立)**、0 品抵牾")
|
||
else:
|
||
errs.append(f"名位互校异常:相符 {n_ok}/拟补 {n_fill}/共 {len(cross)}")
|
||
|
||
# 与第 2 章交叉引证互校
|
||
ch2_refs = [("见第二章第二节·五", "五、心火果杏、杏核仁", "杏核仁(五果·心火)")]
|
||
ref_rows = []
|
||
for anchor, item, desc in ch2_refs:
|
||
here = text.count(anchor)
|
||
there = ch2.count(item)
|
||
ref_rows.append((anchor, here, desc, "✅ 第 2 章有此条目" if there else "⚠ 第 2 章未见"))
|
||
if all(r[1] == 1 and "✅" in r[3] for r in ref_rows):
|
||
oks.append("与第 2 章交叉引证 1 处 ⇄ 第 2 章条目:落位")
|
||
else:
|
||
errs.append("交叉引证互校异常:" + str(ref_rows))
|
||
|
||
# ── 待核对清单(锚定位,固定条目表)──
|
||
def locate(ln):
|
||
sec = None
|
||
for s_ in secs2:
|
||
if s_["行"] <= ln:
|
||
sec = s_
|
||
if sec is None:
|
||
return "章引言(第一节之前)", "—"
|
||
item = None
|
||
for e in sec["条目"]:
|
||
if e["行"] <= ln:
|
||
item = e
|
||
if item is None:
|
||
return sec["节"], "节引言(首条目之前)"
|
||
sub = None
|
||
for x in item["子目"]:
|
||
if x["行"] <= ln:
|
||
sub = x
|
||
return sec["节"], (f"{item['序']}、{item['名']}" + (f"·{sub['序']}. {sub['名']}" if sub else ""))
|
||
|
||
CHECK_ITEMS_FIX = [c for c in CHECK_ITEMS if c[0] != "体例确认" or c[1] not in
|
||
("中国文物出版社", "第四次会议", "金石药「名位」命名(35 品)")]
|
||
rows = []
|
||
for typ, anchor, prob, base, sug in CHECK_ITEMS_FIX:
|
||
hits = [i for i, l in enumerate(flines, 1) if anchor in l]
|
||
if len(hits) != 1:
|
||
raise SystemExit(f"待核对清单锚校验失败(命中 {len(hits)} 次):{anchor[:24]}")
|
||
sec, item = locate(hits[0])
|
||
rows.append(dict(类型=typ, 锚=anchor, 节=sec, 条目=item, 行=hits[0],
|
||
问题=prob, 依据=base, 建议=sug))
|
||
rows.sort(key=lambda r: r["行"])
|
||
for n, r in enumerate(rows, 1):
|
||
r["#"] = n
|
||
|
||
# ── 判决登记(用户 2026-09-21:第 1/2/3 项均「保留修正结果」)──
|
||
VERDICTS.update(build_verdicts(rows))
|
||
_keys = {(r["类型"], r["锚"]) for r in rows}
|
||
_orphan = [k for k in VERDICT_TABLE if k not in _keys]
|
||
assert not _orphan, f"判决表有未落位条目(锚已失效?):{_orphan}"
|
||
assert len(VERDICTS) == sum(1 for k in VERDICT_TABLE if k in _keys), "判决定位重复"
|
||
|
||
# ── 自检:存疑册与「原书核对」清单行一一对应(防止登记漏项/重复)──
|
||
susp_keys = {k for k, _v in SUSPECTS}
|
||
row_keys = {r["锚"] for r in rows if r["类型"] == "原书核对"}
|
||
if susp_keys != row_keys:
|
||
raise SystemExit(f"存疑册与「原书核对」清单行不一致:"
|
||
f"仅存疑册有 {sorted(susp_keys - row_keys)};仅清单有 {sorted(row_keys - susp_keys)}")
|
||
oks.append(f"存疑册 ⇄ 清单「原书核对」行一一对应(各 {len(susp_keys)} 项)")
|
||
|
||
# ── 落盘 ──
|
||
def wf(p, c):
|
||
os.makedirs(os.path.dirname(p), exist_ok=True)
|
||
with open(p, "w", encoding="utf-8") as f:
|
||
f.write(c); f.flush(); os.fsync(f.fileno())
|
||
|
||
md5_out = hashlib.md5(text.encode()).hexdigest()
|
||
wf(OUT_MD, text)
|
||
|
||
struct = dict(
|
||
来源文件=os.path.basename(SRC), 来源文件md5=md5_src,
|
||
清洗版文件=os.path.basename(OUT_MD), 清洗版md5=md5_out,
|
||
定位="《药性探真》第三章 五脏补泻金石方例 用药释义(录入稿:PDF/文本层导出)",
|
||
标准="完全沿用第 1 章(07_clean_ch1.py)/第 2 章(10_clean_ch2.py)之检查核对标准与产物集",
|
||
层级体例="章=##(二级)/节=###(三级)/条目=####(四级)/子目=#####(五级);本件无附、无脚注标记",
|
||
底本互校=dict(底本文件=os.path.basename(BENDI), 底本md5=md5_bendi,
|
||
第1章清洗版=os.path.basename(CH1_MD), 第1章清洗版md5=md5_ch1,
|
||
第2章清洗版=os.path.basename(CH2_MD), 第2章清洗版md5=md5_ch2,
|
||
依据="本库内部互证(二十五味药精/十三种药名位对应),不作校改"),
|
||
源件标题层级="**已就地优化(2026-09-22 用户明示指令;★明文例外第三例)**——原样:章为#,节/条目/子目全为##;另 2 行题名未标井号。执行 13_retitle_src_ch3.py --apply(只改井号、正文逐行校验未动,65 行标题降级);源件 md5 2f2f0301… → 41363b0d…;改动前逐字节快照=《…》第3章_层级优化前快照_20260922.md(md5 2f2f0301…);重跑 12 后清洗版 md5 未变(5f1fb57c…)",
|
||
章=chap, 节=secs2,
|
||
标题层级改动=[dict(源行=a, 原=b, 后=c) for a, b, c in level_log],
|
||
标题补标=[dict(源行=a, 后=b) for a, b in missing_log],
|
||
清理事件=events, 自检=oks + ["ⓘ " + n for n in notes] + ["⚠ " + e for e in errs],
|
||
A类读数=dict(CRLF=n_crlf, 行尾空格=n_trail, 行首空格=n_lead, 全角空格=n_u3000,
|
||
汉字间半角空格=n_cc, 汉字间半角空格_标题内=n_cc_head,
|
||
数字与汉字间半角空格=n_num, 半角标点字符计数=n_ascii_punct,
|
||
半角标点所在行=half_lines),
|
||
C类命中={k: v for k, v in c_hits.items()}, D类命中={k: v for k, v in d_hits.items()},
|
||
名位互校=[dict(节=a, 条目=b, 底本依据=c, 判定=d, 题名已落位=e) for a, b, c, d, e in cross],
|
||
交叉引证互校=[dict(引证锚=a, 命中=b, 第2章条目=c, 判定=d) for a, b, c, d in ref_rows],
|
||
存疑=[dict(项=k, 说明=v) for k, v in SUSPECTS],
|
||
体例登记=[dict(项=k, 说明=v) for k, v in VERSION_NOTES],
|
||
待核对清单条数=len(rows),
|
||
)
|
||
wf(OUT_STRUCT, json.dumps(struct, ensure_ascii=False, indent=2) + "\n")
|
||
|
||
c = lambda k: sum(1 for e in events if e["类型"].startswith(k))
|
||
sql = lambda t: sum(1 for r in rows if r["类型"] == t)
|
||
TYPES = ["版式清理确认", "断行接合确认", "修正确认", "标点规范确认", "标题修复确认",
|
||
"原书核对", "体例确认"]
|
||
DESC = {"版式清理确认": "本次已清理,请复核(可回改)",
|
||
"断行接合确认": "本次已接合,请复核",
|
||
"修正确认": "本次已改,请复核(可即时回改)",
|
||
"标点规范确认": "本次已规范,请复核",
|
||
"标题修复确认": "本次已补标/重建,请复核",
|
||
"原书核对": "需核纸质原书定字(本次一律未改)",
|
||
"体例确认": "需定处理方式(现为保持原样)"}
|
||
|
||
# ── 待核对清单 ──
|
||
n_done = len(VERDICTS)
|
||
cl = [f"# 《辅行诀五脏用药法要 药性探真》第 3 章 — 待核对清单(按章节结构)", "",
|
||
f"> 用途:逐条列出需核对/需定处理方式的问题(固定 {len(rows)} 条)。"
|
||
f"**编号即清单顺序(行号序)**,与用户判决口径一致。"
|
||
f"判决栏:☐ 改/☐ 无误/☐ 保留/☐ 暂留待核/☐ 回填;**已判决 {n_done}/{len(rows)} 条"
|
||
+ ("——全部判决完毕,本章闭环**。" if n_done == len(rows)
|
||
else f",余 {len(rows) - n_done} 条待判决**。"),
|
||
"> 📖 **判决词表(用户 2026-09-20 明确、2026-09-21 重申)**:"
|
||
"`保留`=**保留(本库)修正结果**——**代表本库修正确实准确无误、维持修正(不回流)**,"
|
||
"**不指保留原文**;`修正内容`=**等同「改」**(据正字改正文,A 案);"
|
||
"`原文无误`=**原书原文正确、不需要修正**(本库如已改则**回改**);"
|
||
"`无误`/`原书如此`=原书如此;`核对正确`=核对结论成立但未下改令、原文保留;"
|
||
"`回填`=按所给原书脱落文字**补入正文**(本库据此补入、生效)。",
|
||
f"> ✅ {c_origin_note()}",
|
||
f"> 行号一律指**清洗版** `02_加工数据/药性探真_第3章_清洗版.md`(md5 `{md5_out}`);"
|
||
"⚠ 本清单「行」栏为**现行**行号(每次运行按锚现算);而各「问题/依据」文字及存疑册说明内"
|
||
"所引行号为**登记时**之清洗版行号——第 397 行「回填」新增 2 段后,其**后**之行号一律 **+2** "
|
||
"即为现行行号;",
|
||
f"> 对象原件 `01_来源数据/《辅行诀五脏用药法要 药性探真》第3章.md`(md5 `{md5_src}`;"
|
||
f"**标题层级已于 2026-09-22 经用户明示指令就地优化**——原为「#/##」未分级,现降为"
|
||
f"章2/节3/条目4/子目5(只改井号、正文逐行校验未动,65 行;脚本 13_retitle_src_ch3.py --apply);"
|
||
f"改动前逐字节快照 `…第3章_层级优化前快照_20260922.md`(md5 `2f2f0301…`)可回退;"
|
||
f"★明文例外第三例)。",
|
||
f"> 标准与产物格式**完全沿用第 1/2 章**(`02_加工数据/药性探真_第2章_待核对清单.md`);"
|
||
f"共 **{len(rows)}** 条:" + " · ".join(f"{t} {sql(t)}" for t in TYPES if sql(t)),
|
||
"", "## 汇总", "", "| 类型 | 条数 | 说明 |", "|------|------|------|"]
|
||
for t in TYPES:
|
||
if sql(t):
|
||
nd = sum(1 for r in rows if r["类型"] == t and r["#"] in VERDICTS)
|
||
cl.append(f"| {t} | {sql(t)} | {DESC[t]}" + (f"(已判决 {nd})" if nd else "") + " |")
|
||
cl += ["", "---", "", "## 逐条(按章节结构)", ""]
|
||
by_sec = collections.defaultdict(list)
|
||
for r in rows:
|
||
by_sec[r["节"]].append(r)
|
||
order = ["章引言(第一节之前)"] + [s["节"] for s in secs2]
|
||
for sec_name in order:
|
||
rs = by_sec.get(sec_name, [])
|
||
if sec_name == "章引言(第一节之前)" and not rs:
|
||
continue
|
||
cl += [f"### {sec_name}", ""]
|
||
if not rs:
|
||
cl += ["(本节无待核对项)", ""]
|
||
continue
|
||
cl += ["| # | 条目 | 行(清洗版) | 类型 | 问题 | 依据 | 建议 | 判决 |",
|
||
"|---|------|------|------|------|------|------|------|"]
|
||
for r in rs:
|
||
v, _bk, vnote = VERDICTS.get(r["#"], ("—", "", ""))
|
||
pend = " +**修正内容·本轮据正字改字**(正文已生效)" if r["#"] in APPLIED_N else ""
|
||
cell = (f"✅ **{v}**:{vnote}{pend}" if v != "—"
|
||
else "☐ 改/☐ 无误/☐ 保留/☐ 暂留待核")
|
||
cl.append(f"| {r['#']} | {r['条目']} | {r['行']} | {r['类型']} | {r['问题']} | "
|
||
f"{r['依据']} | {r['建议']} | {cell} |")
|
||
cl.append("")
|
||
cl += verdict_explain(rows, md5_out)
|
||
cl += [
|
||
"> 判决后回填方式(同第 1/2 章):①「原书核对」类若判定改字 → 在 "
|
||
"`05_脚本工具/12_clean_ch3.py` 的 `C_FIXES`/`D_FIXES` 增改条目(标注「用户核对原书」)"
|
||
"→ 重跑 12 刷新清洗版与报告;②「体例确认」结果 → 记入检查报告第八节;"
|
||
"③「版式/标点/标题」类如需回改 → 在规则表中去除或改写对应条目。",
|
||
"",
|
||
f"> 📅 2026-09-21 —— 建单:{len(rows)} 条待核对(按章/节/条目/子目定位,行号指清洗版);"
|
||
f"首轮清洗,当时尚无判决。",
|
||
f"> 📅 2026-09-21 —— **第 1 批判决(#1–#3,保留修正结果)**:三处待决一律批复「保留修正结果」"
|
||
f"(=本库修正准确无误、维持修正、不回流);**清洗版 md5 未变**(当时仍 `2c5378bd…`),"
|
||
f"仅报告/清单/结构/脚本随登记更新。",
|
||
f"> 📅 2026-09-21 —— **第 2 批判决(#4–#20,逐条核对原书)**:判「改」2 · 「修正正确,保留」9 · "
|
||
f"「原文如此·但修正有理·确认修正」1 · 「原书即作『礐石』」1 · 「原文无误/原文如此」3 · "
|
||
f"「订正维持」1;据此**正文改 7 处**(相符/公元前277年/腹中坚癖/引号范围/结出/衍「的」与具/衍「有」),"
|
||
f"**清洗版 md5 `2c5378bd…` → `{md5_out}`**(首次动正文);C 类 {len(C_FIXES)} 条、D 类 {c('D')} 条;"
|
||
f"「原书用字」已钉定 {sum(origin_counts()[:2])} 条/{len(C_FIXES)}(录入讹误 {origin_counts()[0]} · "
|
||
f"★印刷之误·本库订正 {origin_counts()[1]})、余 {origin_counts()[2]} 条待核;"
|
||
f"**当时余 44 条(#21–#64)待判决**(后经第 3–6 批全部判决)。",
|
||
f"> 📅 2026-09-21 —— 按第 1/2 章标准建件:A 版式(行尾空格 {n_trail} 行/汉字间空格 {n_cc} 处/"
|
||
f"数字旁空格 {n_num} 处/LaTeX 1/半角 ~ 1)、B 0、C {len(C_FIXES)} 条、D {c('D')}、"
|
||
f"H 标题 {len(level_log)} 行+补标 {len(missing_log)} 处;名位互校 35 品;"
|
||
f"存疑 {len(SUSPECTS)} 项;体例登记 {len(VERSION_NOTES)} 项。",
|
||
f"> 📅 2026-09-21 —— **第 3/4/5 批判决**:据判决改正文 23 处(第 3 批 9 · 第 5 批 7 · 第 2 批 7);"
|
||
f"第 4 批判「回填」补入源件脱文 2 段(引号 299/298 → **300/300**);"
|
||
f"#54/#55 判「原文无误,保留不修改」(不改动);**清单已判决 63/64、余 #56 一条**;"
|
||
f"清洗版 md5 `e68c05cb…` → `b221786e…` → `{md5_out}`。",
|
||
f"> 📅 2026-09-22 —— **第 6 批判决(#56,用户核对原书)**:判「**原文如此,暂时保留**」——"
|
||
f"姜石条「每日是一至数二次十天为一疗程」句有讹脱(疑当作「每日一至二次,十天为一疗程」之类),"
|
||
f"**原书即作此,本库不作改动、疑点结项**(「暂」=日后如有新材料可再议);"
|
||
f"**清单 64/64 全部判决、本章闭环**(存疑册清零);**清洗版 md5 未变(`{md5_out}`)**"
|
||
f"——「不改」类判决的预期签名(正文一字未动)。",
|
||
"> 📌 第 1 章同类清单已于 2026-09-17 判决闭环,第 2 章于 2026-09-20 判决闭环,格式可对照。",
|
||
"> ✅ 本件原有「源件脱文」1 处(第 397 行《别录》石硫黄条脱后半、收尾引号及《博物志》"
|
||
"引文一整段)——**用户 2026-09-21 判决「回填」**(清单 #37),清洗版已据所给原书文字补入,"
|
||
"全篇引号由 299/298 变为 **300/300**;**01 源件仍为脱文原样**(归档原则:来源层不改)。"]
|
||
wf(OUT_CHECK, "\n".join(cl) + "\n")
|
||
|
||
# ── 检查报告 ──
|
||
rep = ["# 《辅行诀五脏用药法要 药性探真》第 3 章 — 检查报告(录入稿清洗与核对)", "",
|
||
f"> 📅 2026-09-21|对象:`01_来源数据/《辅行诀五脏用药法要 药性探真》第3章.md`"
|
||
f"(录入稿;md5 `{md5_src}`,{len(text_src)} 字符 / {n_src_lines} 行)",
|
||
f"> 产物:`02_加工数据/药性探真_第3章_清洗版.md`(md5 `{md5_out}`;"
|
||
f"{len(text)} 字符 / {text.rstrip(chr(10)).count(chr(10)) + 1} 行)/本报告/"
|
||
"`02_加工数据/药性探真_第3章_结构.json`/`02_加工数据/药性探真_第3章_待核对清单.md`;"
|
||
"脚本 `05_脚本工具/12_clean_ch3.py`(幂等)",
|
||
"> 用户指令:**按照第 2 章的标准**,对第 3 章进行清洗核对。",
|
||
"> 🚫 **正文改写只落在清洗版**,且每条带核校依据,可回改。"
|
||
"(**源件标题层级已于 2026-09-22 经用户明示指令就地优化**:只改井号、正文逐行校验未动,"
|
||
"留逐字节快照可回退——★明文例外第三例;源件正文本身一字未动。)",
|
||
"> 🔧 与第 1/2 章的差别:本件为**金石药专著之章**,全章 35 品金石药皆标「(X中Y)」名位,"
|
||
"故新增**名位互校**自检项(35 品 ⇄ 底本二十五味药精/十三种药),"
|
||
"并据此查出「礜石」讹形 12 处与「石硫磺」名位之误 1 处。", "",
|
||
f"> 📋 **待核对清单**:`02_加工数据/药性探真_第3章_待核对清单.md`(按章/节/条目/子目列出,"
|
||
f"共 {len(rows)} 条,供逐条判决)。", "",
|
||
"## 一、检查结论", "", "| 项目 | 结果 |", "|------|------|",
|
||
f"| 版式残留(A) | 行尾空格 **{n_trail} 行**、汉字间半角空格 **正文 {n_cc_body} 处**"
|
||
f"(标题内「第X章 标题」体例 {n_cc_head} 处保留)、数字与汉字间半角空格 **{n_num_body} 处**、"
|
||
f"LaTeX 残留 1 处、半角「~」1 处 → **已全部清理**"
|
||
f"(CRLF {n_crlf}/行首空格 {n_lead}/全角空格 {n_u3000}/半角标点行 {len(half_lines)}) |",
|
||
f"| 断行截断(B) | **本件 0 处**(段末脱句号 2 处归 D 类补句读;源件脱文 1 处照原样保留) |",
|
||
f"| 讹字(C) | **{len(C_FIXES)} 条规则**(金石药名位/药名 4、人名书目 5、引文形近讹字 16、"
|
||
f"本句内证 11、体例衍倒 4;涉改 **47 处**) |",
|
||
f"| 标点(D) | 段末补句号 2 处、句号误作顿号 1、引号内逗号改句号 1、误入句号 1、"
|
||
f"误入逗号 1、半角「~」→全角「~」1 → 已规范 |",
|
||
f"| 标题层级(H) | 章2/节3/条目4/子目5;**源件已于 2026-09-22 经用户明示指令就地优化**"
|
||
f"(原为「#/##」未分级,65 行标题降级;只改井号、正文逐行未动,留快照可回退),"
|
||
f"故本轮**清洗版重建层级 {len(level_log)} 行**(两层同规则 ⇒ 幂等)"
|
||
f"+**补标题名 {len(missing_log)} 处**(源件该 2 行题名未标井号) |",
|
||
"| 引文规范 | " + "、".join(f"{k} {v[0]}/{v[1]}" for k, v in b.items() if k != "引号")
|
||
+ (f" 全部配平;**引号 {b['引号'][0]}/{b['引号'][1]}**"
|
||
+ ("(**已配平**——原差 1 处系第 397 行脱文,已据判决「回填」补齐)" if b['引号'][0] == b['引号'][1]
|
||
else "(差 1=源件第 397 行脱文,不臆补)")
|
||
+ " |"),
|
||
"| 脚注(G) | 本件**无脚注标记**(第 345/471 行「详见《伤寒论阴阳图说》」为随文注,非脚注) |",
|
||
f"| 名位互校 | 35 品金石药「X中Y」⇄ 底本二十五味药精/十三种药:**{n_ok} 品相符**、"
|
||
f"**{n_fill} 品底本无对应(作者拟补)**、0 品抵牾 |",
|
||
f"| 交叉引证 | 回指第 2 章 1 处(「见第二章第二节·五」→ 杏核仁):**落位** |",
|
||
f"| 结构 | 章 1 / 节 7 / 条目 32 / 子目 27 "
|
||
f"(金石药 35 品 + 第七节其他用药 18 品) |",
|
||
f"| 人工判决 | **已判决 {len(VERDICTS)}/{len(rows)}(全部判决、本章闭环)**(2026-09-21 五批:"
|
||
f"#1–#3「保留修正结果」· #4–#20 逐条核对原书 · #21–#36「修正准确,保留修改」· #37「回填」"
|
||
f"(源件脱文 2 段、引号 300/300)· #38–#53/#57–#64「修正正确,保留」,#54/#55「原文无误,"
|
||
f"保留不修改」;2026-09-22 第 6 批 #56「原文如此,暂时保留」);归并类 {verdict_stat()};"
|
||
f"**余 0 条待判决**;**清洗版 md5 未因第 6 批变动**(「不改」类判决之预期签名) |", ""]
|
||
|
||
# 二、A 类
|
||
rep += ["## 二、版式残留清理(A 类)", "",
|
||
f"- 源件读数:行尾空格 {n_trail} 行、行首空格 {n_lead} 行、全角空格 {n_u3000} 行、"
|
||
f"CRLF {n_crlf} 行;半角标点字符计数 " + "、".join(f"`{k}` {v}" for k, v in n_ascii_punct.items()),
|
||
f"- **行尾空格 {n_trail} 行**(正文段落末尾普遍带 1 个半角空格)已逐行删除"
|
||
f"(标题行 0 处,无同类残留)。",
|
||
f"- 汉字间半角空格 **{n_cc}** 处 = 正文 **{n_cc_body}** 处(已删除,逐处清单见下)"
|
||
f"+ 标题内 **{n_cc_head}** 处(`# 第三章 …` 与 7 个 `第X节 …` 及第 503 行节题之「标题内空格」,"
|
||
f"**体例保留**,同第 1/2 章):", "",
|
||
"| 源行 | 上下文 |", "|----|--------|"]
|
||
for ln, ctx in space_inventory:
|
||
rep.append(f"| {ln} | …{ctx.replace('|', '|')}… |")
|
||
rep += ["", f"> 处理:**正文 {n_cc_body} 处**一律删除;标题内 {n_cc_head} 处保留(Markdown 标题体例)。",
|
||
"", f"- 数字与汉字间半角空格 {n_num_body} 处(逐处清单):", "", "| 源行 | 上下文 |", "|----|--------|"]
|
||
for ln, ctx in num_inventory:
|
||
rep.append(f"| {ln} | …{ctx.replace('|', '|')}… |")
|
||
rep += ["", "> 处理:**本次从严一律删除**(与第 2 章一致)。⚠ 体例提示:第 1 章清洗版存 1 处同类未清"
|
||
"(「用升麻 10 克、小米 10 克…」),第 2 章同例经用户 2026-09-20 判决「保持现状、"
|
||
"两章暂不统一」;本件从第 2 章之严,**三章体例暂不统一**(见待核对清单体例项)。",
|
||
"", f"- LaTeX 残留 1 处(第 131 行):`$41\\% \\sim 45\\%$` → **41%~45%**(PDF 公式化残留,"
|
||
f"读作数据还原;同第 2 章「$7 \\sim 10$」→「7~10」例)。",
|
||
f"- 半角「~」1 处(第 571 行「4~5 毫升」)→ 全角「~」;本件**无半角标点所在行**"
|
||
f"(半角标点行 {half_lines})。", ""]
|
||
|
||
# 三、逐条留痕
|
||
rep += ["## 三、本次修正(逐条留痕)", "",
|
||
"| 行(清洗版) | 类别 | 原文 | 处理后 | **原书用字** | 核校依据 |",
|
||
"|----|------|------|--------|------|---------|"]
|
||
for e in events:
|
||
key = re.sub(r"(\d+ 处)$", "", e["原"])
|
||
if e["类型"] == "C讹字修正":
|
||
o = C_ORIGIN.get(key, ("待核原书", "首轮清洗未核定"))
|
||
origin = f"**{o[0]}**:{o[1]}"
|
||
elif e["类型"] == "C回改":
|
||
origin = "**原书作原件形**(判决「原文无误」→ 回改)"
|
||
else:
|
||
origin = "—"
|
||
rep.append(f"| {e.get('行', '—')} | {e['类型']} | {e['原'].replace('|', '|')} | "
|
||
f"{e['改'].replace('|', '|')} | {origin.replace('|', '|')} | "
|
||
f"{e['依据'].replace('|', '|')} |")
|
||
rep += ["", f"> 合计:A 版式 {c('A')} 条事件(另含全局行尾空格 {n_trail} 行、"
|
||
f"正文汉字间空格 {n_cc_body} 处、数字旁空格 {n_num_body} 处)、B 接合 {c('B')}、"
|
||
f"C 讹字 {c('C')}、D 标点 {c('D')}、H 标题(重建 {len(level_log)}+补标 {len(missing_log)})、"
|
||
f"**回填脱文 {len(BACKFILLS)} 处**(清单 #37:补《别录》石硫黄条后半及《博物志》一段,"
|
||
f"引号 299/298 → 300/300)。",
|
||
"", f"> ⓘ {c_origin_note()}", ""]
|
||
|
||
# 四、标题层级
|
||
rep += ["## 四、标题层级优化与题名补标", "",
|
||
"| 层级 | Markdown | 对象 | 例(本件) |", "|------|----------|------|-----------|",
|
||
"| 二级 | `##` | 章 | 第三章 五脏补泻金石方例 用药释义 |",
|
||
"| 三级 | `###` | 节 | 第一节 肝木辛味门 … 第七节 其他用药《本经》录文 |",
|
||
"| 四级 | `####` | 条目(一、二、三…) | 一、青琅玕(木中木)… 三、石硫磺(金中木) |",
|
||
"| 五级 | `#####` | 子目(1. 2. 3.…) | 1. 火硝(火中木)… 11. 茅根 |", "",
|
||
f"共重排 **{len(level_log)}** 行标题(**源件已于 2026-09-22 就地优化为章2/节3/条目4/"
|
||
f"子目5,两层同规则 ⇒ 本轮重建 0 行**);"
|
||
f"另**补标题名 {len(missing_log)} 处**(源件该 2 行题名未标井号):"]
|
||
for ln, newh in missing_log:
|
||
rep.append(f" - 源行 {ln}:`{newh[:46]}…`")
|
||
rep += ["", f"> ⚠ 源件(`01_来源数据/`)标题层级**已于 2026-09-22 经用户明示指令就地优化**"
|
||
f"(第 1 章 2026-09-17、第 2 章 2026-09-20 之后**★明文例外之第三例**):执行 "
|
||
f"`python3 05_脚本工具/13_retitle_src_ch3.py --apply`,**只改井号、正文逐行校验未动**,"
|
||
f"65 行标题降级;源件 md5 `2f2f0301…` → `{md5_src}`;改动前逐字节快照="
|
||
f"`01_来源数据/《辅行诀五脏用药法要 药性探真》第3章_层级优化前快照_20260922.md`"
|
||
f"(md5 `2f2f0301…`,可回退);**重跑本脚本后清洗版 md5 未变**(`{md5_out}`)"
|
||
f"——层级层与清洗层同规则之证明。", ""]
|
||
|
||
# 五、名位互校
|
||
rep += ["## 五、名位互校(35 品金石药 ⇄ 底本二十五味药精/十三种药)", "",
|
||
"| 节 | 条目(清洗版题名) | 底本依据 | 判定 |", "|----|------------------|---------|------|"]
|
||
for sec, title, base, verdict, present in cross:
|
||
rep.append(f"| {sec} | {title} | {base} | {verdict if present else '⚠ ' + verdict} |")
|
||
rep += ["", "> 判定规则:底本《辅行诀》二十五味药精以「味辛皆属木/味咸皆属火/味甘皆属土/"
|
||
"味酸皆属金/味苦皆属水」分列草木与金石各一品(如「桂 琅玕为之主」「细辛 礜石为金」),"
|
||
"十三种药另列(如「通草为木中土,又为木中水」「升麻为土中金,又为土中火」);"
|
||
"本章 35 品之「(X中Y)」凡落在底本对应品内即为相符。"
|
||
"本项属**本库内部互证,不改原文**(同第 1 章名位互校之例)。",
|
||
"> ⚠ **本项查出两处实质讹误**(已落 C 类):①条目「四、礐石(木中金)」之「礐石」与正文 11 处"
|
||
"「磐石」皆当作「**礜石**」(底本「细辛 礜石为金」);②条目「三、石硫磺(金中火)」之名位"
|
||
"当作「**金中木**」(底本「芍药 硫黄为木」,本条正文亦自述「金中木药」)。", "",
|
||
"### 与第 2 章交叉引证互校", "",
|
||
"| 引证锚(本件) | 命中 | 第 2 章条目 | 判定 |", "|---------------|------|------------|------|"]
|
||
for a_, h_, d_, v_ in ref_rows:
|
||
rep.append(f"| `{a_}` | {h_} | {d_} | {v_} |")
|
||
rep += ["", "> 本件另引本书外著作 2 处(第 345/471 行「详见《伤寒论阴阳图说》」,系作者另一著作);"
|
||
"第七节「杏核仁」不另立条文,仅以「见第二章第二节·五」回指(已互校)。", ""]
|
||
|
||
# 六、存疑
|
||
res_keys = resolved_suspect_keys(rows)
|
||
_no = {r["锚"]: r["#"] for r in rows}
|
||
stay = [(k, v) for k, v in SUSPECTS if k not in res_keys]
|
||
gone = sorted([(k, v) for k, v in SUSPECTS if k in res_keys], key=lambda kv: _no.get(kv[0], 999))
|
||
_bk6 = collections.Counter(VERDICTS[r["#"]][1] for r in rows if r["类型"] == "原书核对")
|
||
_b6s = " · ".join(f"{DISPLAY.get(k, k)} {_bk6[k]}" for k in BUCKETS if _bk6.get(k))
|
||
_hdr6 = (f"> 现状:**存疑清零**——本类 {len(SUSPECTS)} 项**全部经用户逐条核对原书结项**"
|
||
f"(归并类:{_b6s});6.1 已核验 {len(gone)} 项 · 6.2 尚待核对 {len(stay)} 项。" if not stay
|
||
else f"> 现状:**已核验 {len(gone)} 项**/**尚待核对 {len(stay)} 项**。")
|
||
rep += ["## 六、存疑登记(原文不改,待核原书)", "", _hdr6, ""]
|
||
if gone:
|
||
rep += ["### 6.1 已核验(用户判决,本项结项,不再列为存疑)", "",
|
||
"| 项 | 用户判决 | 结论 |", "|----|---------|------|"]
|
||
for k, v in gone:
|
||
r = next((x for x in rows if x["锚"] == k), None)
|
||
vd, bk, vnote = VERDICTS.get(r["#"], ("—", "", "")) if r else ("—", "", "")
|
||
rep.append(f"| {k} | **{vd}**(清单 #{r['#'] if r else '—'}) | {vnote} |")
|
||
rep.append("")
|
||
rep += ["### 6.2 尚待核对", "", "| 项 | 说明 |", "|----|------|"]
|
||
if stay:
|
||
for k, v in stay:
|
||
rep.append(f"| {k} | {v} |")
|
||
rep.append("")
|
||
else:
|
||
rep.append("| — | **(无)**本类已全部结项 |")
|
||
rep.append("")
|
||
rep += [f"> 共 **{len(stay)}** 项尚待核对;已结项 {len(gone)} 项见 6.1,逐条与待核对清单"
|
||
f"「原书核对」类一一对应(清单 # 与本表同源,脚本自检断言)。",
|
||
f"> 📅 2026-09-21/22 判决:本类 **{len(SUSPECTS)} 项经用户逐条核对原书全部结项**,"
|
||
f"**存疑清零**——「无误·原书如此」类=原书如此、本库不改;「修正内容」类=据判决改正文"
|
||
f"(已生效);「判决登记·本库无改动」类=无拟正字、不臆改,正文一字未动;"
|
||
f"「补入脱文」类=据用户所给原书脱落文字回填(第 397 行,引号 300/300)。"
|
||
f"日后如另有新材料,可再议(#56 等「暂」字项即属此类)。",
|
||
f"> ⓘ **本节「清零」以清单 64 行为粒度**;另有两类**行内子疑点**不在清单行内,"
|
||
f"经用户 **2026-09-22** 批复如下——① #25②「似与石英有火性之**不谋**」(两说并存):"
|
||
f"判「**保留**」;该项本库**未作改动、无可保留之修正**,登记为**「保留(本库未改动)」**、"
|
||
f"正文照旧,**仍属未解决**(如意为结项,回「原文无误」即移入 6.1);② 第 3 批新发现 2 处"
|
||
f"——《纲目》曾青条「故曰**层青**也」(传本「故曰曾青也」):判「**原文如此,暂保留**」"
|
||
f"→ **本库不改、疑点结项**;《纲目·绿矾》「**绛**矾可以染皂色」(传本「绿矾」):"
|
||
f"**本次未裁示,照原样保留、待裁示**。", ""]
|
||
|
||
# 七、清单与判决记录
|
||
n_done = len(VERDICTS)
|
||
st_word = "全部判决(本章闭环)" if n_done == len(rows) else "尚无判决" if n_done == 0 else "部分判决"
|
||
rep += ["## 七、待核对清单与人工核验判决记录", "",
|
||
f"- 文件:`02_加工数据/药性探真_第3章_待核对清单.md`(固定 {len(rows)} 条,"
|
||
f"按章/节/条目/子目分组,含判决栏)",
|
||
"- 构成:" + " · ".join(f"{t} {sql(t)}" for t in TYPES if sql(t)),
|
||
f"- 状态:**{st_word}**——已判决 {n_done}/{len(rows)} 条(判决分布 {verdict_stat()})"
|
||
+ (",**余 0 条待判决(本章闭环)**。" if n_done == len(rows)
|
||
else f",余 {len(rows) - n_done} 条待判决。"),
|
||
"",
|
||
*verdict_explain(rows, md5_out),
|
||
"", ]
|
||
if PENDING_FIXES:
|
||
rep += ["### 7.1 修正内容·拟正字与落盘实况", "",
|
||
"| # | 行(清洗版) | 原书文 | 拟正字 | 依据 |", "|---|------|--------|--------|------|"]
|
||
for n, ln, old_t, new_t, why in PENDING_FIXES:
|
||
rep.append(f"| {n} | {ln} | {old_t} | **{new_t}** | {why} |")
|
||
rep.append("")
|
||
else:
|
||
rep += ["### 7.1 修正内容·拟正字与落盘实况", "",
|
||
f"(本件**无「拟正字待补」条目**——现行 {len(C_FIXES)} 条 C 类修正皆已落盘生效,"
|
||
f"正文可即时回改;如日后判决改为「暂留待核」,可在 `C_FIXES` 中去除对应条目。)",
|
||
""]
|
||
|
||
# 八、体例登记
|
||
rep += ["## 八、体例登记(不校改)", "", "| 项 | 说明 |", "|----|------|"]
|
||
for k, v in VERSION_NOTES:
|
||
rep.append(f"| {k} | {v} |")
|
||
|
||
# 九、结构
|
||
rep += ["", "## 九、结构(清洗版行号)", "", "| 节 | 条目数 | 子目数 | 行号 |", "|----|-------|-------|------|"]
|
||
for s_ in secs2:
|
||
n_sub = sum(len(e["子目"]) for e in s_["条目"])
|
||
rng = (f"{s_['条目'][0]['行']}–{s_['条目'][-1]['行']}" if s_["条目"] else "—")
|
||
rep.append(f"| {s_['节']} | {len(s_['条目'])} | {n_sub} | {rng} |")
|
||
rep += ["", "| 节 | 条目 | 行 | 子目(行) |", "|----|------|----|-----------|"]
|
||
for s_ in secs2:
|
||
for e in s_["条目"]:
|
||
subs = ";".join(f"{x['序']}. {x['名']}({x['行']})" for x in e["子目"]) or "—"
|
||
rep.append(f"| {s_['节'].split(' ')[0]} | {e['序']}、{e['名']} | {e['行']} | {subs} |")
|
||
|
||
# 十、自检
|
||
rep += ["", "## 十、自检结果(脚本自动)", ""]
|
||
for o in oks:
|
||
rep.append(f"- ✅ {o}")
|
||
for n_ in notes:
|
||
rep.append(f"- ⓘ {n_}")
|
||
for e_ in errs:
|
||
rep.append(f"- ⚠ **{e_}**")
|
||
rep += ["", "---", "",
|
||
f"> 📅 2026-09-21 —— 建件:按第 2 章标准检查并清洗第 3 章录入稿;"
|
||
f"A(行尾空格 {n_trail} 行/汉字间空格 {n_cc} 处/数字旁空格 {n_num} 处/LaTeX 1/半角 ~ 1)、"
|
||
f"B {c('B')}、C {len(C_FIXES)} 条、D {c('D')}、H 标题 {len(level_log)} 行+补标 {len(missing_log)} 处;"
|
||
f"名位互校 35 品({n_ok} 相符/{n_fill} 作者拟补);体例登记 {len(VERSION_NOTES)} 项;"
|
||
f"待核对清单 {len(rows)} 条(已判决 {len(VERDICTS)}/{len(rows)});"
|
||
f"存疑册 {len(stay)} 项。",
|
||
"> 📅 2026-09-21 —— 源件**未改动**(标题层级未优化);同办脚本 13_retitle_src_ch3.py 已备"
|
||
"(默认 dry-run)。**用户就该项批「保留修正结果」——即清洗版重建层级维持、源件一字未动**。"
|
||
"(**后续:2026-09-22 用户另下明示指令「源件标题层级就地优化」,已执行 `--apply`**——"
|
||
"只改井号、正文逐行校验未动,源件 md5 `2f2f0301…` → `41363b0d…`,留逐字节快照可回退;"
|
||
"**重跑 12 后清洗版 md5 未变**。)",
|
||
f"> 📅 2026-09-21 —— **第 1 批判决(#1–#3)**:三处待决一律「**保留修正结果**」"
|
||
f"(=本库修正准确无误、维持修正、不回流);**源件仍未改动、清洗版 md5 未变**(当时仍 `2c5378bd…`)"
|
||
f"——此即「保留」类判决的预期签名(正文不动)。",
|
||
f"> 📅 2026-09-21 —— **第 2 批判决(#4–#20,用户逐条核对原书)**:判「改」2(相附→**相符**、"
|
||
f"西元→**公元前**277年)· 「修正正确,保留」9(雷斅/**腹中坚癖**/䘌疮/云笈七签·薰陆香/LaTeX/"
|
||
f"标题补标/引号范围/**结出**/衍「的」与**具**/衍「有」)· 「原文如此·但修正有理·确认修正」1"
|
||
f"(★原书印刷之误·本库订正)· 「原书即作『礐石』」1(★印刷本自身之误)· 「原文无误/原文如此」3"
|
||
f"(惮散/草药木火中火/重垒——本库不改、结项)· 「订正维持」1(跨章用字,第 1 章不同办)。"
|
||
f"**正文改 7 处**,**清洗版 md5 `2c5378bd…` → `{md5_out}`**(首次动正文);"
|
||
f"C 类 {len(C_FIXES)} 条、D 类 {c('D')} 条;名位互校与引号配平等自检仍全绿;"
|
||
f"「原书用字」已钉定 {sum(origin_counts()[:2])} 条/{len(C_FIXES)}(录入讹误 {origin_counts()[0]} · "
|
||
f"★印刷之误·本库订正 {origin_counts()[1]})、余 {origin_counts()[2]} 条待核;"
|
||
f"**当时清单余 44 条(#21–#64)待判决**(后经第 3–6 批全部判决)。",
|
||
f"> 📅 2026-09-21 —— **第 3/4/5 批判决**:据判决改正文 **23 处**(第 3 批 9 · 第 5 批 7 · 第 2 批 7)"
|
||
f"+第 4 批「回填」补入源件脱文 **2 段**(引号 299/298 → **300/300**);"
|
||
f"#54/#55 判「原文无误,保留不修改」(不改动);清洗版 `e68c05cb…` → `b221786e…` → `{md5_out}`;"
|
||
f"**清单已判决 63/64、余 1 条(#56)**。",
|
||
f"> 📅 2026-09-22 —— **第 6 批判决(#56,用户核对原书)**:判「**原文如此,暂时保留**」——"
|
||
f"姜石条句有讹脱,**原书即作此、本库不作改动、疑点结项**(「暂」=日后如有新材料可再议);"
|
||
f"**64/64 全部判决、本章闭环**,**存疑册清零**(6.1 已核验 32 项 · 6.2 无);"
|
||
f"**清洗版 md5 未变(`{md5_out}`)**——「不改」类判决的预期签名(正文一字未动)。",
|
||
"> 📌 第 1 章(2026-09-17)、第 2 章(2026-09-20)已判决闭环,本章为本库清洗之第三章。"]
|
||
wf(OUT_REPORT, "\n".join(rep) + "\n")
|
||
|
||
print("清洗版:", OUT_MD, os.path.getsize(OUT_MD), "bytes")
|
||
print("报告 :", OUT_REPORT, os.path.getsize(OUT_REPORT), "bytes")
|
||
print("结构 :", OUT_STRUCT, os.path.getsize(OUT_STRUCT), "bytes")
|
||
print("待核单:", OUT_CHECK, os.path.getsize(OUT_CHECK), "bytes")
|
||
print(f"md5 清洗版 {md5_out}")
|
||
print(f"A 行尾空格 {n_trail} 行 | 空格 {n_cc}+{n_num} 处 | 半角标点行 {half_lines} | "
|
||
f"B {c('B')} | C {len(C_FIXES)} | D {c('D')} | H 标题 {len(level_log)} + 补标 {len(missing_log)} | "
|
||
f"清单 {len(rows)} 条")
|
||
for o in oks:
|
||
print(" ✅", o)
|
||
for n_ in notes:
|
||
print(" ⓘ", n_)
|
||
for e_ in errs:
|
||
print(" ⚠", e_)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|