中草药名方数据集处理:从RAR解压到药味拆解的全流程指南
2026/9/9 19:58:09 网站建设 项目流程

简介:中草药名方大全(8019条数据)压缩包是一份兼顾知识与代码的医药信息数据集,意在解决中医药方剂检索分散、数据结构化不足的问题。压缩包共12个文件,以PHP页面、txt数据文本和CSS样式为核心,辅以dat数据库文件、htaccess配置与url快捷方式,体积仅819KB,适合PHP整站程序快速部署与二次开发。数据涵盖方剂名称、组成、功效及用法等字段,可直接用于搭建中草药名方查询、搜索和展示平台。目前已有599人学习,对中医药信息化开发者、PHP初学者及希望将传统方剂转化为可查询数据库的研究人员均有参考价值。通过研读这套源码,读者既能掌握PHP+数据文件实现信息管理的思路,也能获得一批可复用的方剂数据资产。

1. 数据资源印象:一份中草药名方数据集的价值与潜力

拿到“中草药名方大全(8019条数据).rar”这个标题时,我的第一反应是:这应该是一份典型的民间整理型中医药数据包。8019条数据,看起来量级不大,但放到中草药名方这个垂直领域,已经相当可观。要知道,市面上能公开拿到的、清洗过的中药方剂数据,动辄号称上万条,但真正可用的往往几千条,里面还掺杂着大量重复、残缺、格式混乱的条目。这份数据如果整理得当,完全能支撑一个小型的中医药知识库、方剂检索工具,或者作为中医药科普写作的素材库。

我接触过不少类似的数据包,也帮人做过几轮清洗和结构化。这类数据最常见的来源是古籍扫描后的手工录入、网络公开资料的爬虫聚合,或者某些老中医的个人笔记电子化。标题里特意标注“8019条数据”,说明整理者对这个数量是认可的,也从侧面反映数据大概率经过了初步去重或筛选。但“数据”这个词本身是模糊的——是Excel表格?CSV?还是纯文本?字段有哪些?有没有出处标注?这些都要等解压之后才能确认。

对于想用这份数据的人来说,第一件事不是急着分析,而是先搞清楚三件事:数据格式是什么,字段结构怎么样,内容质量靠不靠谱。格式决定了解析方式,字段决定了能做什么分析,质量则决定了结果的可用性。别嫌麻烦,这一步能省掉后面80%的返工时间。

2. RAR文件解压与初步探查:从压缩包到可用数据的完整路径

2.1 解压工具的选择与操作要点

RAR格式在Windows环境下最省事的方案就是WinRAR,但这个软件是收费的,虽然能无限期试用,弹窗比较烦人。我习惯用7-Zip,开源免费,解压RAR完全没问题,还支持RAR5格式。macOS用户可以用“The Unarchiver”或者命令行工具unar,Linux用户直接用unrar-free或者安装p7zip-full即可。

实际操作时有一个细节容易被忽略:先用“查看”模式看看压缩包内部的目录结构和文件列表,再决定解压到哪个位置。很多数据包内部不是单个文件,而是一个文件夹套多层,或者同时包含说明文档、原始数据和备份文件。如果一股脑解压到桌面,后面整理起来会很难受。我一般会新建一个专门的数据工作目录,比如D:\data\tcm_formula,把压缩包丢进去后解压到当前目录,保持目录结构完整。

另外一个关键点是校验压缩包完整性。下载来的文件大小不对或者解压中途报错,大概率是传输损坏。WinRAR和7-Zip打开压缩包时会自动检查,如果提示“CRC错误”或“文件头损坏”,别犹豫,重新下载。这个数据包只有8019条记录,文件体积通常不会太大,但保不齐有人在网盘上传时被截断过,这种隐性损坏最坑人——解压能完成,但里面的数据可能不完整。

2.2 文件格式识别与内容概览

解压之后,第一件事是看目录结构。常见的格式有这么几种:

格式特征处理方式
Excel(.xlsx/.xls)列结构清晰,多字段pandas.read_excel 直接读取
CSV/TSV文本逗号或制表符分隔注意编码,优先UTF-8或GBK
JSON嵌套结构,可能含对象数组json.load后做展开处理
SQL文件建表语句+INSERT数据导入MySQL或SQLite
纯文本TXT每条方剂为一段,字段靠分隔符需要自己切分结构化

根据我收到的同类数据包的经验,“中草药名方大全”这类命名,最可能是CSV或Excel,因为整理者通常是从某个数据库导出,或从网页批量复制粘贴到表格里。但也遇到过纯文本格式,每条方剂用空行隔开,内部再用冒号区分字段,比如“方名:”“组成:”“功效:”。这种格式处理起来稍麻烦,但也最接近原始资料状态,信息量往往更大。

先用文本编辑器(Notepad++或VS Code)打开文件看一眼前100行,不要直接用Excel双击打开大文件,容易卡死或乱码。如果CSV有中文乱码,八成是编码问题——Excel另存的CSV多半是ANSI(即GBK),网页爬下来的多半是UTF-8。用VS Code打开后右下角能显示当前编码,点一下可以重新打开,选择正确的编码就能看到正常内容。顺便确认分隔符是逗号、分号还是Tab,后面写脚本时心里有数。

2.3 字段结构与数据字典的建立

拿到结构化数据后,先列字段名,再统计每列的非空值数量、唯一值数量、样例值。这一步叫“建立数据字典”,是所有后续分析的地基。比如字段可能是:编号、方名、别名、来源、组成、功效、主治、用法、禁忌、备注。重点看“组成”这一列——中药方剂的核心就是组成和剂量,很多数据包里“组成”字段是一整段文本,比如“人参9g,白术9g,茯苓9g,炙甘草6g”,没有拆分成单独的药材列。这是正常的,但需要后续做拆解。

我当时处理一份类似数据时,发现“组成”字段里混着炮制方法、剂量单位、特殊用法,比如“黄芪30g(炙)”“先煎”“冲服”等等。这些东西如果直接当字符串用没问题,但要分析药材频次、剂量分布就得精细解析。所以看到字段后别急着高兴,先抽查20条记录,看看内容拼接是否符合预期。抽查结果能直接反映这份数据的整理水平,也决定了你后面投入多少精力去清洗。

3. 数据清洗与结构化处理:让8019条数据真正“活”起来

3.1 去重与补齐:别让重复条目污染分析结果

不管原始数据怎么整理的,第一道工序永远是去重。重复判断不能只看“方名”一列——同一个方名在不同古籍里可能有不同记载,比如“四君子汤”出现在《太平惠民和剂局方》和《圣济总录》里的配伍几乎一样,但在某些细节上会有加减。简单按方名去重会误删有效信息。建议按“方名+组成”的组合字段来判断,或者对“组成”这一列做规范化后计算相似度。

实操中,我常用pandas做初步处理:

import pandas as pd df = pd.read_excel("中草药名方大全.xlsx", sheet_name=0) # 查看重复情况 dup_mask = df.duplicated(subset=["方名", "组成"], keep=False) print(f"重复记录数: {dup_mask.sum()}") # 去重,保留第一条 df_dedup = df.drop_duplicates(subset=["方名", "组成"], keep="first")

这样处理后可能会有几千条因“组成”格式不统一而漏网的重复,比如剂量写不写单位、药名用简称还是全称。对于这种,可以做一次字段标准化后再去重。但要注意,标准化的尺度不能太过,否则会合并掉真正不同的加减方。

补齐字段是个体力活,但值得做。最典型的是“来源”字段缺失——数据源里可能只有方名和组成,没有出处。如果数据量只有几千条,可以考虑通过方名去《中医方剂大辞典》或在线数据库反查,但工程量大。我更推荐折中方案:先标记缺失,不强行补全;等到具体使用某个方子时,再针对性地查证出处。这样既控制投入,也不影响整体分析。

3.2 药味拆解与规范化:从文本到结构化药材列表

药味拆解是把“组成”字段从字符串变成结构化列表,是这份数据最有价值也最费劲的一步。目标是得到类似“药材名、剂量、单位、炮制、用法”的列表,这样才能做药材频次统计、剂量分析、配伍关系挖掘等进阶操作。

举个例子,某条方剂的组成可能是这样:

人参9g,白术9g,茯苓9g,炙甘草6g,生姜3片,大枣4枚

这个还算规整,但实际数据里会出现:括号里的“(炙)”、“先煎”、“包煎”、“冲服”等标注;还有“各等份”“适量”“若干”这种模糊剂量;更有全角逗号、分号、中文顿号混用的情况。清洗时我一般按这个顺序处理:

  1. 统一分隔符:把所有中文标点(、,;)转成英文逗号,按逗号切分成数组。
  2. 去掉首尾空格和不需要的括号注释。
  3. 用正则表达式分离药材名和剂量部分:
import re def parse_composition(text): if not isinstance(text, str): return [] text = re.sub(r"[、,;;]", ",", text) items = [x.strip() for x in text.split(",") if x.strip()] result = [] for item in items: match = re.match(r"^(.+?)([\d.]+)\s*(g|克|两|钱|分|斤|枚|片|粒|升|合|.....)?$", item) if match: name = match.group(1) dose = match.group(2) unit = match.group(3) or "" else: name, dose, unit = item, "", "" result.append({"药材": name, "剂量": dose, "单位": unit}) return result df["组成列表"] = df["组成"].apply(parse_composition)

这只是一个简化版,真实场景中正则表达式要覆盖更多情况,比如“各三钱”“研末”“酒洗”等。建议先解析100条,人工核对一下匹配准确率,再全量跑。不要一上来就套复杂规则,过度工程化反而容易出错。

3.3 数据质量控制:抽查校验和异常标记

清洗过程中抽测质量是必须的。我习惯随机抽样1%(大概80条)做人工比对,重点看三块:药味数量是否合理(一个方子3到30味药居多)、剂量是否在常见范围(有的数据把“三钱”误录成“3g”,误差不大,但把“半斤”写成“5g”就有问题了)、方名和功效是否匹配(比如“补中益气汤”功效却写“清热解毒”,那很可能原数据张冠李戴)。

发现异常条目,不要急着删,先标记一个“异常”标志列,然后把异常数据单独保存到一个文件里。原因在于,有些数据虽然“看起来不合理”,但在特定古籍版本或特殊用法下是成立的。比如某些外用方剂药味极多、剂量极大,但它是用来煎汤熏洗的,不是口服。这种信息如果删除,后续做研究时会少掉重要线索。

我一般会在清洗后的最终文件里增加几个字段:

  • 清洗状态:normal / warning / error
  • 清洗备注:说明具体问题,比如“剂量疑似超常”“药名缺失”
  • 原始文本:保留清洗前的原始内容,便于追溯

这样既保留了原始数据,又方便后续按状态过滤。

4. 从静态数据到实用工具:三条高性价比应用路径

4.1 方剂快速检索与筛选系统

数据清洗完成后,最简单的应用是做一个“检索工具”。不需要开发复杂的Web应用,用Excel的高级筛选已经能做不少事,但体验一般。更顺手的方式是用Python+pandas配合Jupyter Notebook,做成一个交互式查询脚本。

比如,想找所有包含“黄芪”的方剂,或者找所有功效为“补气”的方子,可以这样:

def search_herb(df, herb_name): mask = df["组成列表"].apply(lambda herbs: any(item["药材"] == herb_name for item in herbs)) return df[mask][["方名", "组成", "功效", "来源"]] search_herb(df, "黄芪").head(20)

如果要给非技术背景的中医爱好者用,可以再做一层:用Flask或Streamlit搭一个极简的本地检索页面。Streamlit尤其适合,几行代码就能生成一个带输入框和表格输出的界面。投入半天时间,就能拥有一个能按“方名”“药材”“功效”模糊查询本地数据库的工具,比每次翻Excel高效得多。

4.2 药材频次与配伍规律分析

8019条方剂足以支撑一些简单的统计分析。最常见的是“高频药材排名”和“药材配伍共现分析”。高频药材能反映出这批方剂群的整体用药偏向,比如气虚类方子中黄芪、党参、白术出现频率极高。配伍共现则是看哪些药材经常同时出现,比如在补血方中“当归”和“白芍”常成对出现。

代码不复杂,但要注意剔除剂量为空值的记录,并且统一药名规范——比如“山茱萸”和“山萸肉”应统一成标准药名,否则统计会分散。这一步需要借助《中国药典》的药材正名表,或者自己维护一个别名映射字典。手工映射几百条常用药名是必要的,但也可以用简写规则先粗统一,再人工校验高频项。

4.3 知识科普与内容创作素材库

对写作者而言,这份数据本身就是一座素材库。写一篇中药科普文章时,想找三五个以某味药为核心的方剂,直接在表格里筛选就行。比如写“甘草”,可以筛选出包含甘草的方剂,再按朝代、出处排序,看看甘草在不同时代的用量演变。这种从数据中找线索的写法,比从书到书摘抄要有说服力得多。

我做过一个案例:用这份数据筛选出所有包含“生姜”的方剂,再统计其剂量范围,发现从2片到半斤不等,通过追溯原始文献,梳理出生姜在不同治证中的用法差异。这种内容特别受读者欢迎,因为观点是用数据支撑的,而不是拍脑袋。

5. 实操过程中的坑与避坑技巧

5.1 字符编码与Excel的“好心办坏事”

这是数据初处理时最常踩的坑。Excel打开CSV文件后保存,会默认把UTF-8编码改成ANSI(GBK)。如果你后续用Python直接读取,不做编码指定,就会报UnicodeDecodeError。解决方案是:把CSV文件统一转为UTF-8-with-BOM格式,这样Excel能正常显示,Python读取也稳定。

另外,Excel还会自动把某些文本列转成日期或数字。比如“3g”会被识别成数字3,方名里的“1.0”会被误转为“1”。所以在用Excel检查数据时,建议用“数据导入”功能而不是双击打开,或者干脆用Notepad++、VS Code查看文本内容,避免看不到原始字符串。

5.2 重复方名的不同剂型问题

中医方剂里有大量同名但剂型不同、配方微调的情况,比如“丸剂”“散剂”“汤剂”。如果数据里“方名”相同,“组成”也相同,但“剂型”不同,去重时就不该删。在建立去重规则时,把“剂型”列考虑进去会稳妥很多。如果没有剂型字段,就要看“组成”文本里有没有“为末”“炼蜜为丸”“每服”等字样,这些能辅助判断剂型。

5.3 剂量单位换算的小心机

数据里的剂量单位五花八门:g、克、两、钱、分、斤、枚、片、升、合、斗、撮、把等。做统计分析时如果直接按数字相加,会得出荒谬结果。需要建立统一的换算体系。参考通行标准,1两=30g(亦有按16两制折算为31.25g),1钱=3g,1分=0.3g。但要明白,古代度衡量在不同朝代差异很大,如果做严谨研究,必须参照方剂出处的朝代进行换算。做泛分析的话,采用30g/两这个常用近似值即可,同时要在结果中注明换算标准,避免误导。

5.4 备份与版本管理

处理数据时,始终保留一个“原始数据备份”文件夹,不作任何修改。清洗过程产生中间文件按日期命名,比如formula_20250224_step1_raw.xlsxstep2_dedup.xlsxstep3_clean.xlsx。别怕文件名长,混乱才是最大的成本。我吃过亏:直接在原文件上改,改了半天下班没保存,第二天发现文件损坏,只能重新解压再来一遍。从那以后,我养成了三步一备份的习惯,尤其是不定期运行脚本批量修改数据时,备份比什么都重要。

5.5 RAR文件本身暗藏的风险

最后说一个安全问题。RAR文件可以被加密、注释甚至内嵌恶意脚本,7-Zip在解压时会提示是否运行自解压程序。遇到来源不明或解压后出现.exe、.bat、.scr这类可执行文件的压缩包,务必小心,直接删除比好奇更安全。中草药名方数据包通常只是数据文件,但这类资源流传渠道繁杂,保不齐有人往里面塞私货。解压前先杀毒扫描一遍,永远不是多余操作。

根据我个人经验,这份8019条数据的“中草药名方大全”如果整理到位,它的应用空间远不止“看看有哪些方子”。把数据清洗好、结构化之后,既能做搜索引擎式的查询,也能做统计分析,还能为写作提供稳定可靠的事实出处。你甚至可以把它作为底层数据源,结合自然语言处理做更智能的方剂推荐原型,比如输入一组症状,返回可能相关方剂——那完全是另一层玩法了。

最后再分享一个小技巧:如果“组成”文本里有“各等分”或“各适量”这类模糊表述,不要丢弃,把它单独标记。这类方剂往往来自较为古老的医籍,剂量记录方式本身就灵活。保留它们,能让你在后续做古籍对比研究时多一条线索。数据这种东西,整理一次,受益长久,值得多花点心思。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询