资讯动态

中医nlp知识图谱问答:基于 Neo4j 的中医方剂大辞典NLP 智能体系统及可视化分析(超详细数据及源码/建议收藏)

发布时间:2026/10/22 2:01:01 来源:尧图企业网站定制
中医nlp知识图谱问答基于 Neo4j 的中医方剂大辞典NLP 智能体系统及可视化分析超详细数据及源码/建议收藏摘要中医方剂文献是传统医学知识的重要载体其中包含大量药材名称、古典剂量表达、炮制工艺描述和配伍关系。此类知识长期以半结构化乃至非结构化文本形式存在直接制约了后续的统计分析、知识服务、智能问答和图数据库建模效率。针对这一问题通过围绕《中医方剂大辞典》组成语料设计并实现了一个以自然语言处理为核心、以 Neo4j 图数据库为扩展支撑、以 PyQt5 桌面应用与 ECharts 可视化大屏为交互载体的中医方剂 NLP 智能体系统。系统从方剂语料加载出发依次实现了文本清洗、药材词典自动构建、FMM/BMM/BiMM/jieba 四种中文分词、词性标注、规则 NER 与 CRF 兜底 NER、TF-IDF 与 TextRank 关键词提取、Aho-Corasick 关系抽取、Apriori 关联规则挖掘、NetworkX 知识图谱构建、Neo4j 图谱推送与查询、问答交互以及多视角可视化分析等完整流程。在真实运行环境中系统成功加载 8743 条中医方剂组成记录自动抽取 6272 种候选药材、541 类剂量表达、4047 类炮制方法构建的 NetworkX 图谱规模达到 8067 个节点、61945 条边关联规则挖掘得到 1681 条有效规则。结合 PyQt5 图形界面、统计分析页、知识图谱页和 Neo4j 查询页本项目实现了从原始语料到结构化知识再到可视化服务和问答服务的闭环。实验结果表明面向中医方剂这种术语密集、剂量表达古典、配伍关系复杂的专业语料词典增强分词、规则主导的领域 NER 与关系抽取方案具有较高工程适配性与较好的展示效果。本文进一步围绕系统架构、算法实现、数据可视化与实验结果展开详细论述并对其不足与未来演化方向给出分析。关键词中医方剂自然语言处理知识图谱Neo4j命名实体识别Aho-CorasickAprioriPyQt5ECharts目录绪论NLP流程设计算法实现详解系统设计与实现数据可视化分析实验结果与分析结论与展望1 绪论1.1 研究背景中医方剂知识具有鲜明的文本密集型与经验知识型双重特征。一方面古典方书、方剂大辞典、历代医案与处方文献记录了海量药材组合、剂量搭配、炮制工艺和适应证信息另一方面这些知识多以自然语言文本保存包含大量古汉语习惯表达、计量单位变体、同义药名、修饰性括号说明以及非统一标点形式。若缺乏结构化解析中医方剂知识很难被高效复用也难以直接服务于知识图谱建模、药材配伍规律挖掘和智能问答系统。近年来知识图谱与领域 NLP 在医疗健康场景中得到广泛应用但面向中医方剂文本的工程化系统往往存在两个明显问题其一许多工作只关注某一单点算法如分词、NER 或图谱入库而缺乏一个从语料到应用端的完整闭环其二不少项目在展示层仍停留于脚本输出缺少适合课程考核与系统答辩的可视化界面与交互流程。本项目立足于《中医方剂大辞典》组成语料在已有医疗知识图谱项目经验基础上试图将数据处理、知识抽取、图谱构建、可视化与问答服务整合为一个完整、可运行、可截图、可分析、可扩展的期末综合大作业系统。1.2 研究意义本项目的研究与实现具有三重意义。首先在学术训练层面它覆盖了自然语言处理课程中的关键知识点包括文本预处理、中文分词、命名实体识别、关键词提取、关系抽取、统计分析、关联规则和知识图谱建模能够体现从算法到系统的综合实践能力。其次在应用价值层面中医方剂数据具有天然的知识组织需求若能将药材—剂量—炮制—方剂之间的关系结构化不仅有助于理解方剂知识网络也为后续的药材配伍分析、智能推荐和教学演示提供了基础。再次在工程价值层面本项目构建了 PyQt5 桌面交互界面、ECharts 可视化页面与 Neo4j 图谱联动路径解决了课程设计中算法有了但无法形成完整展示系统的常见问题。1.3 国内外研究现状从国内研究看中医药知识图谱建设已经从疾病-症状-药物关系逐步扩展到方剂组成、辨证论治和经典医籍条文挖掘等方向。常见方法通常包括词典驱动分词、正则与规则抽取、图数据库建模和可视化展示等。国外对于传统医学文本的直接研究相对较少但在信息抽取、序列标注、图表示学习、医学知识图谱与可视化分析方面积累了成熟的方法论如条件随机场、TextRank、Aho-Corasick 自动机和图数据库查询系统等。综合来看方剂类文本最适合采用规则主导 统计增强 图谱呈现的策略这也是本项目选择的技术路线。1.4 研究目标本项目定位为构建一个从数据到知识、从知识到智能的全链路NLP智能体系统具体目标如下一是语料解析目标。实现对《中医方剂大辞典》万条方剂组成数据的全自动加载、清洗、结构化解析准确抽取药材、剂量、炮制方法三类核心实体构建高质量的结构化数据。二是NLP算法目标。完整实现中文分词FMM/BMM/BiMM/jieba四种算法对比、词性标注、命名实体识别规则NERCRF增强、关键词提取TF-IDFTextRank、关系抽取Aho-Corasick自动机共现分析、关联规则挖掘Apriori等NLP核心算法形成功能完善的NLP算法库。三是知识图谱目标。基于解析后的结构化数据构建中医方剂知识图谱支持NetworkX本地图管理和Neo4j远程图数据库两种存储方案实现药材、剂量、炮制方法、方剂之间的多维关联查询。四是智能问答目标。实现基于规则意图识别的智能问答系统支持组成查询、剂量查询、炮制查询、配伍推荐、高频统计、关联规则、实体推荐等至少8种查询意图通过Flask Web和PyQt5桌面双端提供交互。五是可视化目标。利用ECharts 5图表库生成交互式可视化图表包括柱状图、饼图、折线图、雷达图、仪表盘、词云、知识图谱网络图等构建专业级数据Dashboard支持多维度的数据分析交互。图1-1 系统登录界面图1-3 登录后系统概览界面s2 NLP流程设计2.1 总体处理链路本系统采用语料读取 - 文本规范化 - 词典构建 - 分词与标注 - 实体抽取 - 关系抽取 - 统计分析 - 图谱构建 - 可视化与问答的串行主干架构。这样设计的原因在于中医方剂文本虽然格式相对统一但仍包含大量噪声标点和古典剂量表达若不先进行规范化后续分词和实体抽取都会受到明显影响另一方面图谱构建并不是孤立模块而是必须建立在高质量结构化实体与关系的基础之上。系统的数据流向具有明显的层级递进关系。文本预处理层负责语料解析、噪声清洗和片段切分基础 NLP 层负责分词、词性标注和领域实体识别知识抽取层负责剂量、炮制与配伍关系建模分析层负责高频统计和关联规则挖掘图谱层负责 NetworkX 建模与 Neo4j 扩展应用层负责 PyQt5 交互界面、可视化页面与问答服务。该流程不仅有利于模块化开发也便于课程答辩时按模块演示。图2-1 系统三层架构与模块组织示意图图2-2 NLP 全链路流水线结构图s2.2 模块算法选型依据在中文分词模块中之所以同时实现 FMM、BMM、BiMM 和 jieba 四种路径FMM 与 BMM 分别代表前向和后向最大匹配策略能够体现字典驱动分词的基本思想BiMM 用于在两者之间做启发式选择兼顾词数最少和单字词更少原则jieba 则作为工程环境中最实用的分词器并通过领域词典增强提升中医药术语切分质量。在实体识别环节系统没有直接引入复杂深度学习模型而是采用规则NER CRF兜底的设计。原因在于中医方剂语料本身高度结构化药材和剂量经常呈现固定模式例如药材名 数词 计量单位括号说明 炮制动作等在标注数据有限、课程环境依赖受限的情况下规则方法更稳健、更易解释。CRF 模块则用于补足规则方法在边界泛化上的不足并在sklearn-crfsuite不可用时退化为特征模板 规则标注结果保证系统可运行性。在关系抽取环节系统采用 Aho-Corasick 自动机而非简单双重循环匹配主要是考虑到候选药材词典规模达到数千级若逐条字符串遍历会造成明显的时间浪费。通过自动机构建多模式匹配树系统可以在线性复杂度下完成药材候选项搜索并结合片段级规则识别药材—剂量、药材—炮制、方剂—药材和药材—药材共现关系。2.3 数据预处理策略中医方剂文本预处理是整个系统成败的关键。项目中采用了三类预处理策略。第一类是字符级规范化包括删除 BOM、统一中英文标点、保留中文、数字、括号和计量符号、压缩重复分隔符等。第二类是结构级切分将组成之后的主体文本作为分析对象并通过逗号、顿号、分号等分隔符切出单味药材片段同时保护括号内内容避免炮裂去皮脐这类炮制说明被错误拆开。第三类是语义级规范化对片段中的剂量表达、括号说明和尾部动作词进行清洗从而获得更稳定的药材实体名称。为了尽量贴近真实语料本系统没有将所有古典词形强行转换为现代术语而是保留了原文表述方式例如一两“半两”“三钱”各等分等。这种做法虽然增加了后续统计归并难度但更利于保持原始文献特征也更适合期末报告对中医文献数据真实性的要求。2.4 语料样例与处理结果为了说明预处理策略的有效性表 2-1 给出了部分原始记录及其结构化抽取结果。从中可以看出系统能够在不破坏原始语义的基础上将方剂文本拆解为药材、剂量和炮制方法等字段。图2-3 语料预处理结果样例表3系统算法实现3.1 数据加载与文本清洗实现数据加载模块由TextPreprocessor实现核心思路是逐行读取包含组成标记的方剂文本将其拆分为raw、composition、cleaned、herbs、dosages与processing_methods六个字段。为了避免低质量字符对实体边界造成干扰系统在clean_text()中使用正则表达式统一标点、清理不可见字符并仅保留中文、数字、常见计量符号和括号结构。在剂量抽取中系统构造了一个包含古代计量单位与现代计量单位的统一模式NUM_PATTERN UNIT_PATTERN。这意味着诸如一两“三分”“半钱”“5g”“10ml等表达都可以被同一规则捕获。对于炮制方法识别系统结合括号抽取与关键词表匹配同时保留炮裂去皮脐”“酒浸”麸炒等高频工艺描述。下面代码片段展示了本项目文本清洗与剂量抽取的核心思路class TextPreprocessor: DOSAGE_UNITS [斤,两,钱,分,厘,克,毫升,等分,少许] NUM_PATTERN r(?:\d(?:\.\d)?|[零一二三四五六七八九十百千万半]) def clean_text(self, text: str) - str: text str(text).strip().replace(, ) text self.composition_prefix.sub(, text) text text.replace(, ,).replace(、, ,).replace(。, .) text re.sub(r[^一-鿿A-Za-z0-9\.·,;:()~\-一二三四五六七八九十百千万半斤两钱分厘升斗合克毫只枚条片个盏匙少许等量各], , text) text re.sub(r[,、]{{2,}}, ,, text) text re.sub(r\s, , text) return text.strip(,.、。) def extract_dosages(self, text: str) - List[str]: dosages self.dosage_regex.findall(text) extra re.findall(r各(?:等分|半两|一两|二两|三钱|二钱|一钱|五钱|三分|二分|一分), text) return list(dict.fromkeys(dosages extra))该模块的优点在于可解释、轻量、稳定且与中医方剂这一结构较强的专业语料高度契合。其不足在于仍然存在规范化粒度较粗的问题例如黄耆与黄芪桂心与肉桂的异名归并尚未在当前版本中完全展开。3.2 中文分词算法实现FMM、BMM、BiMM 与 jieba3.2.1 FMM 正向最大匹配FMM 算法从句首出发按照最长词优先的原则在词典中寻找当前窗口内的最大匹配词。若未匹配成功则退化为单字切分。该方法实现简单、速度较快适合作为词典驱动分词的基准方法。本项目中药材词典由语料自动构建因此 FMM 在药材专名识别上具有较强适配性。3.2.2 BMM 逆向最大匹配BMM 从句尾向句首搜索仍然遵循最大匹配原则。由于中文中许多歧义词组在尾部更容易确定边界因此 BMM 在某些局部结构上会优于 FMM。本项目在实验中保留 BMM 的独立输出以便比较前向与后向匹配的工程差异。3.2.3 BiMM 双向最大匹配BiMM 的核心思想是同时执行 FMM 和 BMM并根据分词结果的词数和单字词数量进行启发式选择。项目中优先选择词数较少的分词结果若词数相同则选择单字词数量更少的分词结果。该策略是传统词典分词方法中常见的折中方案适合课程算法实现与工程演示。3.2.4 jieba 分词与领域词典增强jieba 分词在工程中具有成熟、稳健和易扩展的优势。为使其适配中医药语境本系统将语料自动构建得到的药材词典动态注入jieba.add_word()。这样可以显著减少中药材被错误拆分为普通汉字词的情况。与纯词典匹配方法相比jieba 的最大优势在于能够输出更自然的词序列更适合下游 TextRank 与问答模块调用。核心代码如下所示def fmm_cut(self, text: str) - List[str]: result, i, n [], 0, len(text) while i n: matched None max_len min(self.max_word_len, n - i) for length in range(max_len, 0, -1): cand text[i:i length] if cand in self.dictionary: matched cand break if matched is None: matched text[i] result.append(matched) i len(matched) return result def bi_mm_cut(self, text: str) - List[str]: fmm self.fmm_cut(text) bmm self.bmm_cut(text) if len(fmm) ! len(bmm): return fmm if len(fmm) len(bmm) else bmm if self._single_char_count(fmm) ! self._single_char_count(bmm): return fmm if self._single_char_count(fmm) self._single_char_count(bmm) else bmm return fmm图3-1 桌面端NLP智能分析页运行截图图3-2 四种中文分词算法性能对比图分词实验结果如表 3-1 所示。算法平均分词数药材词命中率(%)单字词占比(%)平均耗时(ms/条)FMM 53.99 99.69 81.1 0.2423BMM 54.05 99.73 81.21 0.1747BiMM 53.98 99.73 81.1 0.4162jieba 44.55 99.57 56.67 0.2369从结果可以看出四种分词算法在药材词命中率上都达到较高水平说明自动构建的领域词典对中医药实体具有较强覆盖能力。BMM 在平均耗时上略优于 FMMBiMM 因需同时执行前后向匹配耗时相对最高。jieba 的药材词命中率略低于纯词典方法但单字词占比明显下降说明其分词粒度更符合自然语言阅读与关键词提取需求。综合考虑系统下游任务本项目将 jieba 作为主分词方案将 FMM/BMM/BiMM 作为课程算法展示与对比模块。3.3 词性标注实现词性标注模块优先调用jieba.posseg并在依赖不可用时退化为规则兜底模式。由于中医方剂文本的主要目标不是句法分析而是实体识别和关系抽取因此本项目对词性标注的要求侧重于区分药材名、数词和动作词。规则兜底中将剂量类表达标记为m炮制动作标记为v药材片段标记为近似的人名/名词标签用于辅助后续展示。3.4 命名实体识别规则NER与CRF兜底实体识别模块聚焦三类核心实体药材、剂量和炮制方法。规则 NER 首先依据最长匹配策略在领域词典中查找药材实体再通过剂量规则与炮制关键词/括号内容识别另外两类实体。若词典未命中则退化到片段级抽取逻辑保证系统在极端样例中仍能输出结果。CRF 模块的作用并非完全替代规则方法而是在存在sklearn-crfsuite依赖时对规则生成的 BIO 标签做弱监督学习以获得更细粒度的序列边界判断。系统自动启用CRF 特征模板 规则兜底模式这不影响整体流程演示。该设计充分体现了工程鲁棒性当高级模型依赖缺失时系统仍可完整工作。核心代码片段如下def recognize(self, text: str) - Dict[str, List[Dict]]: entities {HERB: [], DOSAGE: [], PROCESSING: []} clean self.preprocessor.clean_text(text) for herb in sorted(self.herb_dict, keylen, reverseTrue): for m in re.finditer(re.escape(herb), clean): entities[HERB].append({text: herb, start: m.start(), end: m.end(), type: HERB}) for dosage in self.preprocessor.extract_dosages(clean): for m in re.finditer(re.escape(dosage), clean): entities[DOSAGE].append({text: dosage, start: m.start(), end: m.end(), type: DOSAGE}) for method in self.preprocessor.extract_processing_methods(clean): for m in re.finditer(re.escape(method), clean): entities[PROCESSING].append({text: method, start: m.start(), end: m.end(), type: PROCESSING}) return entities图3-3 NER 标注示意图图3-4 NER识别效果评估图表 3-2 为实体识别评估结果。这里采用结构化字段作为伪金标准的评估方式主要用于工程实现层面的相对比较。方法Precision(%)Recall(%)F1(%)规则NER 89.22 91.26 90.23CRF兜底NER 83.04 74.33 78.44从表中的数据可以看到规则 NER 的 F1 值达到 90.23%在该领域语料上已经表现出较强的适配性。CRF 兜底模式由于缺乏真实训练模型性能低于规则模式但仍保留了序列标注框架接口为未来升级真实 CRF 或 BiLSTM-CRF 模型预留了良好扩展点。3.5 关键词提取TF-IDF 与 TextRank为了从方剂文本中提取具有代表性的术语本项目同时实现了 TF-IDF 与 TextRank 两种关键词方法。TF-IDF 基于词频和逆文档频率适合识别在当前文本中频次高但在全语料中不那么普遍的药材或工艺词TextRank 则基于共现图与 PageRank 迭代更强调词语在局部窗口中的结构重要性。在实现上TF-IDF 完全使用纯 Python 编写以体现课程算法基础TextRank 则利用滑动窗口构造词共现图并通过多轮阻尼迭代求得词节点权重。与直接调用第三方接口相比这种做法更有利于讲清算法原理与工程过程。图3-5 TF-IDF 与 TextRank 关键词提取对比图从实际观察看TF-IDF 更容易突出稀缺药材和局部高频术语而 TextRank 更擅长识别方剂中语义联系紧密的核心药材组合。二者结合使用可以在问答推荐和可视化摘要中提供更丰富的文本解释能力。3.6 Aho-Corasick 自动机与关系抽取关系抽取模块围绕方剂—药材“药材—剂量”“药材—炮制”药材—药材共现四类核心关系展开。由于药材候选词典规模较大本系统没有采用朴素字符串循环匹配而是自行实现了 Aho-Corasick 多模式匹配自动机。自动机构建阶段使用 Trie 树组织词典模式串并通过广度优先搜索建立失败指针搜索阶段在单次线性扫描中完成所有候选药材实体匹配显著提升了多实体搜索效率。在关系构建上系统先基于split_items()将方剂组成拆成药味片段再在片段层面识别药材、剂量和炮制工艺形成HAS_DOSAGE与HAS_PROCESSING关系随后在同一方剂内部对药材集合做两两组合形成CO_OCCUR关系。此方式虽然属于规则驱动抽取但优点是结构清晰、输出稳定且非常适合中医方剂这种列表式组成文本。def extract_relations(self, text: str) - List[Dict]: relations [] items self.preprocessor.split_items(text) herbs_in_formula [] for item in items: herb self.preprocessor.normalize_herb_name(item) if not herb: continue herbs_in_formula.append(herb) for dosage in self.preprocessor.extract_dosages(item): relations.append({head: herb, relation: HAS_DOSAGE, tail: dosage, confidence: 0.95}) for method in self.preprocessor.extract_processing_methods(item): relations.append({head: herb, relation: HAS_PROCESSING, tail: method, confidence: 0.90}) for i in range(len(herbs_in_formula)): for j in range(i 1, len(herbs_in_formula)): relations.append({head: herbs_in_formula[i], relation: CO_OCCUR, tail: herbs_in_formula[j], confidence: 0.75}) return relations图3-6 实体到关系的抽取流程图3.7 Apriori 关联规则挖掘仅靠共现统计并不足以说明药材之间的结构性组合规律因此系统进一步引入 Apriori 算法进行关联规则挖掘。项目将每条方剂组成看作一条事务将其中的药材看作事务项通过支持度与置信度筛选高质量规则。当前实验设置中采用min_support0.005与min_confidence0.25共获得 1681 条有效规则。图3-7 Apriori 关联规则支持度-置信度分布图序号前件后件支持度置信度计数1 京三棱、槟榔 木香 0.0051 0.9184 452 羌活、荆芥 防风 0.0055 0.9057 483 川芎、白芍药 当归 0.0054 0.9038 474 桂心、黄耆 人参 0.0051 0.8654 455 天麻、细辛 防风 0.005 0.8627 446 槟榔、肉豆蔻 木香 0.0057 0.8621 507 三棱、陈皮 青皮 0.0049 0.8431 438 半夏、香附 陈皮 0.0049 0.8431 439 厚朴、防风 甘草 0.0049 0.8431 4310 川芎、熟地 当归 0.0054 0.8393 47表 3-3 前 10 条代表性规则。这些规则从工程角度验证了中医方剂配伍具有显著的组合结构例如槟榔 肉豆蔻 - 木香羌活 荆芥 - 防风等模式不仅符合药材共现规律也为问答模块提供了推荐型回答依据。3.8 知识图谱构建与 Neo4j 导出知识图谱模块由MedicalKG类实现默认使用 NetworkX 构建图结构在networkx不可用时退化为自定义图结构。节点包括FORMULA、HERB、DOSAGE和PROCESSING四类边包括CONTAINS、HAS_DOSAGE_TEXT、HAS_PROCESSING_TEXT和CO_OCCUR等类型。为兼容图数据库展示与课程答辩中的图谱演示系统同时支持导出 Neo4j Cypher 脚本并通过 HTTP 事务 API 将结构化数据推送到 Neo4j。构图完成后系统可直接导出kg_data.json供 ECharts 关系图调用也可生成neo4j_import.cypher用于数据库入库。与单纯存储共现矩阵相比图结构表示的优势在于它能够统一容纳方剂、药材、剂量和炮制方法这几类异质节点并支持邻居查询、度统计、图谱裁剪与关系可视化。图3-8 知识图谱节点类型分布图图3-9 知识图谱关系类型分布图4 系统设计与实现4.1 系统总体架构从软件工程角度看本项目采用数据层—算法层—应用层的组织方式。数据层包括方剂语料、处理后 JSON、图谱 JSON、Cypher 文件及 Neo4j 实体关系数据算法层包括预处理、分词、标注、NER、关键词提取、关系抽取、统计分析、图谱构建与问答组件应用层包括 PyQt5 桌面主界面、ECharts 可视化页面与 Neo4j 查询接口。系统的一个重要特点是所有模块都围绕NLPBackend聚合。NLPBackend统一管理语料载入、词典更新、NER、统计、问答、可视化生成和 Neo4j 连接使前端界面无需直接处理各个算法细节只需调用相应方法即可完成流程串联。这种设计降低了界面代码和算法代码之间的耦合度便于维护和答辩讲解。4.2 PyQt5桌面系统设计PyQt5 桌面系统是本项目的主要交互前端也是此次报告截图的核心来源。升级后的主界面继续基于QTabWidget组织但已经扩展为八个模块化页签系统概览、语料库管理、词典与实体抽取、词云可视化分析、NLP 智能分析、Neo4j 知识图谱、系统设置、用户中心。这样的结构更适合课程大作业答辩中的从数据到算法再到系统的完整展示链路。本系统是一套面向中医药领域的智能化知识图谱管理平台共划分为八个功能模块。系统概览页提供项目基本信息的一站式展示包括项目名称、英文副标题、语料规模、词典规模、本地图谱规模、Neo4j 节点关系数及当前运行状态并支持手动实时刷新、每分钟自动刷新、实时时钟与刷新倒计时功能。语料库管理页负责语料文件的选择与加载同时以表格化方式预览语料内容支持直接查看方剂名称、药材、剂量、炮制方法与组成文本。词典与实体抽取页集中管理药材、方剂、剂量和炮制方法四类实体支持关键词检索与高频词统计分析。词云可视化分析页针对综合语料、药材、方剂、炮制方法和剂量单位生成高密度词云并提供词语上下文检索入口便于深入洞察语料特征。NLP 智能分析页支持单条方剂组成的连续分析依次呈现文本清洗、四种分词模式、词性标注、命名实体识别、TF-IDF 关键词提取、TextRank 摘要及关系抽取结果并可联动智能问答模块实现交互式知识探索。Neo4j 知识图谱页提供本地图数据库连接、图数据推送、统计查看、图谱页面导出及按药材邻居查询等核心图谱管理功能。系统设置页支持主题切换、语言切换、自动加载语料、缓存清理与系统信息查看。用户中心页展示当前用户的头像、昵称、账号、角色、最近登录时间和权限信息并提供个人资料维护与管理员用户管理功能。同时当前版本在主系统前新增了正式的登录/注册入口。系统启动后首先显示登录界面完成账号密码校验后才进入八模块主界面退出登录后则重新返回登录页。这一设计使系统从功能集合演示提升为具备完整用户会话流程的课程大作业软件系统。为了提高视觉表现升级后的桌面端采用更正式的后台式布局统一了项目标题、卡片式信息面板、主题切换和配置持久化逻辑使系统在 1366x768 与 1920x1080 屏幕下都具有更好的展示完整度。进一步地概览页还加入了实时数据刷新机制用户既可以通过实时刷新按钮手动同步语料、本地图谱与 Neo4j 统计信息也可以通过自动刷新开关启用每 60 秒一次的自动刷新右上角同步显示当前时间、最近刷新时间与下次刷新倒计时从而增强课程答辩时的数据可信度与演示完整性。图4-1 登录后系统概览页运行截图图4-2 语料库管理页运行截图图4-3 词典与实体抽取页运行截图图4-4 词云可视化分析页运行截图4.3 数据库连接与 Neo4j 集成Neo4j 集成模块采用 HTTP 事务 API而不是依赖更重的图数据库 ORM。这一选择具有较强工程合理性一方面HTTP API 对当前课程环境更友好连接方式直接便于调试另一方面Neo4j 4.4.5 已在用户环境中启动使用 HTTP 接口可以快速完成统计查询、节点写入与关系写入。Neo4j 推送分为六步清空旧图、创建药材节点、创建剂量节点、创建炮制节点、创建方剂节点及包含关系、创建药对共现关系。系统还提供图谱统计、药材邻居查询与 ECharts 格式导出等功能使图数据库不只是数据存储容器也能直接为前端图谱展示提供数据支撑。图4-5 Neo4j Dashboard 运行截图图4-6 Neo4j 图谱关系页面运行截图4.4 问答系统实现问答系统采用轻量级规则分类器不追求通用开放域对话而是聚焦高频统计型问题、配伍关系型问题、剂量型问题、炮制型问题、关联规则型问题和实体详情型问题六类任务。问题先经过关键词触发的意图识别再提取药材实体最后路由到不同的答案生成函数。例如高频药材有哪些直接调用统计模块天麻常和哪些药一起用则进入共现查询逻辑附子的炮制方法有哪些则返回剂量/炮制信息。这种问答设计的优点在于针对课程项目常见的演示问题回答稳定、可控、解释性强同时回答并非写死而是基于真实统计结果动态生成因此能够与语料变化同步更新。图4-7 NLP 智能分析与问答联动页运行截图图4-8 问答示例输出表图4-9 系统设置页运行截图图4-10 用户中心页运行截图5 数据可视化分析5.1 可视化需求分析系统可视化设计的目标并不只是把数字画出来而是围绕课程答辩中的三个关键需求展开一是需要快速呈现语料规模、药材频次、剂量分布和图谱关系等全局事实二是需要突出中医方剂的领域特色如药材共现、炮制工艺、方剂组成图谱和关联规则三是需要提供足够直观的页面效果便于演示系统已经真正运行起来。系统构建了三层可视化输出第一层为静态实验图包括柱状图、分布图、散点图和流程图用于报告排版第二层为 HTML 页面级图表包括药材柱状图、剂量饼图、趋势图、词云与关系图用于浏览器演示第三层为综合大屏包括多图联动 Dashboard 与 Neo4j 专业可视化大屏用于展示系统整体完成度。5.2 ECharts 图表配置思路ECharts 是本项目的核心前端可视化引擎。其优点在于第一图表类型丰富能够覆盖柱状图、饼图、折线图、雷达图、仪表盘和关系图第二配置式开发便于与 Python 端生成的 JSON 数据无缝衔接第三交互能力较强适合课程展示中进行悬浮提示、缩放、图例切换与关系筛选。在具体配置上本项目为不同图表设置了统一的深色学术展示主题深色背景、青蓝渐变主色、清晰的面板边界、半透明容器、白色坐标轴与高对比度悬浮提示框。词云页面采用高密度词项铺满策略使核心药材与长尾药材能够同时出现在同一视觉空间中Neo4j 专业级 Dashboard 则进一步加入节点总量、关系总量和知识库覆盖范围等信息面板以增强统计分析与答辩展示时的信息完整性。5.3 Dashboard 设计综合大屏采用多图联动布局顶部为关键指标卡片中部为主图表区域底部为语料覆盖、构成占比和数据质量等摘要信息。大屏内部围绕中医方剂语料本身展开集中展示高频药材、剂量表达、炮制方法、药材配伍关系、图谱节点占比和知识图谱规模趋势等结果使统计分析、知识抽取与图谱建模三类能力在一个页面中形成统一表达。图5-1 综合可视化大屏运行截图图5-2 高频药材柱状图页面截图图5-3 剂量表达饼图页面截图图5-4 药材频次趋势图页面截图图5-5 高密度药材词云页面截图5.4 词云与统计图设计词云可视化主要用于突出高频药材的分布热度。在本次优化中词云页面统一切换为高密度布局策略显著减少留白区域并通过青蓝、绿色、紫色和暖色点缀色形成更丰富的层次关系。这样做的目的一方面是增强科技大屏式视觉表现另一方面也是为了让频次较低但仍有研究价值的药材词项保留在同一页面中从而更贴近教师展示和课程答辩场景中内容丰富、画面高级、信息充足的要求。与此对应柱状图和分布图则承担更严谨的统计表达任务用于说明高频药材、炮制方式和剂量表达的具体频数。图5-6 高频药材 Top15 静态柱状图图5-7 剂量表达 Top10 静态饼图图5-8 炮制方法 Top12 静态柱状图图5-9 炮制方法频率扩展统计图5.5 知识图谱可视化设计知识图谱可视化是本项目展示层的核心亮点。系统首先将 NetworkX 图导出为 ECharts 关系图所需的nodes linksJSON再在前端设置不同节点类别与颜色映射。例如 HERB 节点采用绿色、FORMULA 节点采用蓝色、DOSAGE 节点采用黄色、PROCESSING 节点采用青色。前端支持节点缩放、拖拽、悬浮提示和类别筛选从而让用户可以直观看到药材网络的局部聚团与中心节点。图5-10 Neo4j 关系图前端截图图5-11 图谱节点类型统计图图5-12 图谱关系类型统计图5.6 可视化交互功能分析在交互功能方面桌面端与 HTML 页面形成了较好的互补关系。桌面端强调带流程的应用交互例如一键加载语料、一键执行 NLP 流程、一键问答和一键推送 Neo4jHTML 页面强调结果的沉浸式查看例如鼠标悬浮显示药材频次、图谱节点关系、仪表盘数值和节点类型图例切换。通过这两类界面的叠加系统避免了有算法但没有软件感或者只有页面但没有流程感的常见问题。6 实验结果与分析6.1 数据规模统计系统真实运行结果显示当前语料共包含 8743 条方剂组成记录自动抽取候选药材 6272 种、剂量表达 541 类、炮制方法 4047 类。就方剂条目内部复杂度而言平均每条记录包含 7.80 味药材中位数为 7 味最小值为 1 味最大值达到 83 味。这说明方剂语料既有简短处方也存在非常复杂的复方结构为分词、实体识别和图谱构建都带来了真实挑战。图6-1 项目数据规模总览图图6-2 方剂包含药材数量分布图表 6-1 高频药材 Top15序号药材频次1 甘草 21412 当归 13623 人参 13414 木香 13275 白术 9056 防风 8417 陈皮 6948 麝香 6839 槟榔 65110 半夏 63811 干姜 62512 丁香 60013 附子 57714 茯苓 57615 黄芩 565表 6-2 高频剂量表达 Top12序号剂量表达频次1 一两 34772 半两 21363 二两 17684 各一两 14975 一钱 14346 一分 11937 三分 11188 二钱 9389 三钱 91810 五钱 83711 各半两 80912 三两 795表 6-3 高频炮制方法 Top12序号炮制方法频次1 炒 28012 炙 18603 去皮 16244 锉 14195 研 13966 炮 11767 焙 11108 微炒 7329 去芦头 60910 洗 60711 去皮脐 60112 去心 5696.2 分词实验结果分析从分词实验可以看出自动构建药材词典使 FMM、BMM、BiMM 和 jieba 都具有极高的药材命中率均接近或超过 99.5%。这说明在领域文本中词典覆盖度对分词结果的影响远大于一般开放域语料。进一步看FMM/BMM/BiMM 的平均分词数明显高于 jieba且单字词占比高达 81% 左右这意味着词典最大匹配方法虽然在药材词边界上很强但对整体文本的自然词粒度处理不如 jieba 平滑。这一现象提示我们若任务目标是实体尽量不漏词典匹配法非常有效若任务目标是下游文本特征更自然则应优先使用 jieba 并辅以词典增强。于是本项目在系统架构上采取双轨策略界面展示层保留四种分词算法主流程层默认使用 jieba 结果供关键词提取与问答模块使用。6.3 NER 实验结果分析规则 NER 的 Precision、Recall 和 F1 分别达到 89.22%、91.26% 和 90.23%说明对中医方剂这类结构化强、术语集中、表达模式固定的语料规则方法依旧具有很强的现实价值。特别是在药材、剂量和炮制方法三类实体上领域词典和正则模式几乎已经覆盖了大部分高频情况。CRF 兜底模式由于当前环境中未加载真实训练模型因此结果偏低但它的意义主要在于保持序列标注接口完整并验证特征模板设计的可扩展性。6.4 图谱规模与网络结构分析在使用前 3000 条记录构建的 NetworkX 图谱中系统获得 8067 个节点和 61945 条边。按节点度数观察中心位置主要由一两“木香”“甘草”“炒”“半两”“当归”人参等词占据这反映出图谱中既有核心药材节点也有高频剂量和炮制节点。就知识表达而言这种中心化分布符合中医方剂文本的基本规律某些高频药材和剂量表达会在大量方剂中重复出现进而形成图中的高连接节点。表 6-4 高频药材共现 Top10序号药材A药材B共现频次1 人参 甘草 6512 当归 甘草 4923 人参 白术 4654 甘草 白术 4275 木香 槟榔 4116 人参 当归 3957 木香 甘草 3718 甘草 防风 3519 甘草 陈皮 33210 川芎 当归 318其中人参—甘草“当归—甘草”“人参—白术”甘草—白术等组合具有较强的传统配伍特征与中医药经典处方中的补益、调和和脾胃相关组合规律高度一致。这说明系统抽取得到的共现关系并非随机噪声而是能够在一定程度上反映方剂配伍知识。6.5 智能问答实验结果分析系统对典型问题的回答表现出较好的稳定性。例如高频药材有哪些能够返回完整的排名列表天麻常和哪些药一起用返回防风、白附子、麝香、羌活、牛黄等高频配伍药材附子的炮制方法有哪些则可列出炮、去皮、炒、去皮脐、炮裂等统计结果。这说明问答模块已能够在课程展示场景中实现从自然语言问题到结构化知识输出的闭环。问答系统的局限也很明显它本质上是规则驱动的任务型问答尚不具备复杂推理、多轮对话和歧义消解能力。例如面对治疗头痛兼寒证的经典方剂中哪些药材最关键这类组合型问题当前系统无法直接完成知识推理。但对本课程项目而言其能力边界与目标任务是一致的。6.6 可视化结果综合分析从实际页面效果看桌面端适合展示流程和模块功能浏览器端适合展示统计结果和图谱关系。桌面端截图清晰展示了数据加载、算法实践、问答、统计和 Neo4j 查询等功能模块HTML 页面截图则展示了多图联动 Dashboard、柱状图、趋势图和图谱页面。二者结合后系统的完成度和展示说服力显著提升。7 结论与展望7.1 项目总结本项目基于《中医方剂大辞典》组成语料构建了一个包含文本预处理、分词、实体识别、关键词提取、关系抽取、关联规则挖掘、知识图谱构建、Neo4j 查询、桌面端交互和可视化大屏的中医方剂 NLP 智能体系统。系统在真实运行中完成了 8743 条方剂记录的处理并形成了 6272 个候选药材、541 类剂量表达、4047 类炮制方法、8067 个图谱节点、61945 条图谱边和 1681 条关联规则等成果。就期末考核要求而言项目不仅完成了算法实践而且形成了完整的软件系统与图文材料链路。从工程角度看本项目最大的价值在于把离散的算法模块真正串成了一套可运行、可截图、可讲解、可答辩的完整系统。语料加载页证明数据来源与抽取结果真实可见NLP 算法页证明算法模块不是黑盒问答页证明结构化知识已经能够回流到应用层统计与可视化页证明系统具备知识发现与展示能力Neo4j 模块证明图谱可以进一步扩展到图数据库平台。这种完整闭环正是课程综合大作业最核心的评价维度。7.2 创新点归纳本项目的创新点主要体现在\面向中医方剂组成语料构建了一个完整的多模块 NLP 智能体系统。\将四种分词算法、规则 NER、CRF 兜底、Aho-Corasick、Apriori 与知识图谱构建统一到同一界面流程中。\通过自动构建药材词典显著增强了领域分词与实体识别效果。\提供 PyQt5 桌面端、ECharts 页面和 Neo4j 图谱三种互补展示方式。\报告中的所有关键图表与系统截图均基于项目实际运行结果生成而非静态示意图。7.3 不足与改进方向尽管系统已经具备较高完成度但仍存在若干不足。首先药材异名、古今名、繁简别称尚未做系统归一化例如黄耆/黄芪桂心/肉桂等仍可能分散统计结果。其次NER 模块当前以规则方法为主虽在工程上有效但对复杂语义上下文和罕见表达的泛化能力有限。第三问答模块缺乏复杂逻辑推理能力只能处理预定义意图集合尚不能实现基于图路径的多跳推断。第四Flask Web 层仍停留在历史兼容模块阶段没有与当前方剂主流程深度融合。第五图谱构建目前主要基于共现和字段关系尚未引入更高级的语义关系如功效、归经、适应证和经典出处等。针对上述不足后续工作可以从以下方向推进\构建中医药别名词表和术语本体实现药材标准化归并。\引入真实标注语料训练 CRF、BiLSTM-CRF 或预训练语言模型微调的 NER 模型。7.4 应用前景从应用前景看本项目具有较强的教学、科研和知识服务价值。在教学场景中它可以作为自然语言处理、知识图谱和中医药信息学课程的综合实验案例在科研场景中它可作为中医方剂知识抽取、配伍规律分析和图谱建模的原型平台在知识服务场景中它有潜力扩展为面向中医药学习者、研究者甚至处方分析人员的智能检索与辅助分析工具。可以预见随着语料扩充、模型升级和图谱语义深化该系统具有进一步演进为中医药领域智能知识平台的现实可能。8 参考文献Aho A V, Corasick M J. Efficient String Matching: An Aid to Bibliographic Search[J].Communications of the ACM, 1975, 18(6): 333-340.Agrawal R, Srikant R. Fast Algorithms for Mining Association Rules[C]//Proceedings of the 20th International Conference on Very Large Data Bases. 1994: 487-499.Lafferty J, McCallum A, Pereira F. Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data[C]//ICML 2001. 2001: 282-289.Mihalcea R, Tarau P. TextRank: Bringing Order into Texts[C]//Proceedings of EMNLP 2004. 2004: 404-411.Bird S, Klein E, Loper E.Natural Language Processing with Python[M]. O’Reilly Media, 2009.Flask Documentation. Quickstart[EB/OL]. https://flask.palletsprojects.com/Neo4j Documentation. Cypher Manual[EB/OL]. https://neo4j.com/docs/Apache ECharts Documentation[EB/OL]. https://echarts.apache.org/NetworkX Documentation[EB/OL]. https://networkx.org/documentation/stable/fxsjy. jieba: Chinese Words Segmentation Utilities[EB/OL]. https://github.com/fxsjy/jiebaHan J, Kamber M, Pei J.Data Mining: Concepts and Techniques[M]. Morgan Kaufmann, 2011.Manning C D, Raghavan P, Schütze H.Introduction to Information Retrieval[M]. Cambridge University Press, 2008.9 附录9.1 项目目录结构F:\自然语言处理\项目源码 ├── main.py ├── run_pipeline.py ├── visualization.py ├── gui/ │ └── main_window.py ├── nlp_core/ │ ├── text_preprocessor.py │ ├── chinese_segmentation.py │ ├── pos_tagger.py │ ├── ner_system.py │ ├── keyword_extractor.py │ ├── relation_extractor.py │ └── statistical_analyzer.py ├── kg_module/ │ └── knowledge_graph.py ├── qa_system/ │ └── qa_system.py ├── data/ │ └── A组成 .txt └── outputs/ ├── processed_records.json ├── statistics.json ├── apriori_rules.json ├── kg_data.json ├── neo4j_import.cypher └── *.html9.2 运行环境说明Python 路径D:\Python\python.exeNeo4j默认 HTTP 地址http://127.0.0.1:7474用户neo4j密码1234语料文件data/A组成 .txt当前运行环境中PyQt5True、jiebaTrue、networkxTrue、requestsTrue当前报告验证得到的核心结果语料记录数8743候选药材数6272剂量表达数541炮制方法数4047关联规则数1681NetworkX 图谱规模8067 节点 / 61945 边Neo4j 当前库统计48492 节点 / 27015 边9.3 关键功能截图总览附图A-1 系统登录页附图A-2 系统注册页附图A-3 登录后系统概览页附图A-4 用户中心页附图A-5 综合可视化大屏附图A-6 高密度药材词云页面附图A-7 Neo4j 专业可视化大屏9.4 主要实验图汇总附图B-1 分词算法性能对比图附图B-2 NER 评估图附图B-3 Apriori 规则分布图附图B-5 关系抽取流程图源码文档等资料如需项目源码、部署文档、功能解析、二次开发、界面优化、项目定制、课程设计或毕业设计辅导可通过评论区、私信或个人主页方式交流。支持全栈系统开发与技术咨询。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑