medspaCy Preprocessor/Postprocessor 双组件完整教程:快速过滤、重命名与删除流水线中的实体
medspaCy Preprocessor/Postprocessor 双组件完整教程快速过滤、重命名与删除流水线中的实体【免费下载链接】medspacyLibrary for clinical NLP with spaCy.项目地址: https://gitcode.com/gh_mirrors/me/medspacymedspaCy Preprocessor/Postprocessor是 medspaCy 临床 NLP 工具库中两个互补的核心组件Preprocessor 在文本进入 spaCy 流水线之前执行破坏性清洗替换、删除文本Postprocessor 则在流水线末尾遍历已识别的实体实现过滤、重命名标签或删除实体。本教程用一份真实出院小结场景带你快速掌握这两个组件的使用方式。一、双组件分工一张图看懂流水线位置 组件执行时机作用对象是否 spaCy 组件Preprocessor预处理器分词之前原始文本字符串❌ 需手动接管 tokenizerPostprocessor后处理器流水线末尾doc.ents实体列表✅ 通过add_pipe加入一句话记忆Preprocessor 改文字Postprocessor 改实体。import medspacy nlp medspacy.load(medspacy_enable[medspacy_pyrush, medspacy_target_matcher, medspacy_sectionizer])二、Preprocessor 预处理流水线前清洗文本spaCy 默认只允许非破坏性处理但很多临床文本需要先动刀统一日期格式、展开缩写、去掉占位符。Preprocessor就是为此设计的它包裹流水线 tokenizer在分词前修改文本。核心用法分三步创建并接管 tokenizer不是add_pipefrom medspacy.preprocess import Preprocessor preprocessor Preprocessor(nlp.tokenizer) nlp.tokenizer preprocessor用PreprocessingRule定义匹配模式 → 替换文本规则from medspacy.preprocess import PreprocessingRule rules [ PreprocessingRule(r\[\*\*[\d]{4}\*\*\], repl2010, desc替换 MIMIC 年份占位符), PreprocessingRule(rdxd, replDiagnosed, desc展开缩写), PreprocessingRule(r\[\*\*[^\]]\], desc删除其余占位符默认替换为空), ] preprocessor.add(rules)正常调用doc nlp(text)即可文本会先被清洗再分词。规则四大参数pattern正则表达式定位要修改的文本repl替换文本默认空字符串即删除callback自定义函数可基于匹配结果做更复杂的整段删除desc规则描述便于维护 提示callback参数非常适合按标题删除整个章节这类大范围文本操作而repl只适合精确的点对点替换。实现源码见 preprocessor.py 与 preprocessing_rule.py。三、Postprocessor 后处理流水线后管理实体经过 NER 和 ConText 等组件后doc.ents中可能混入噪声被否定的实体、无关章节的实体、标签错误的实体。Postprocessor作为流水线最后一个组件逐实体检查条件全部通过则执行动作。上图medspaCy 实体可视化效果——Postprocessor 正是对这类实体做最终过滤与修正1. 三步搭建 Postprocessorfrom medspacy.postprocess import Postprocessor, PostprocessingRule, PostprocessingPattern from medspacy.postprocess import postprocessing_functions postprocessor nlp.add_pipe(medspacy_postprocessor) postprocessor.add(rules) # 加入规则2. 过滤删除实体经典移除患者说明章节实体患者说明patient instructions通常是假设性内容不是患者真实经历应当剔除rules [ PostprocessingRule( patterns[ PostprocessingPattern( conditionlambda ent: ent._.section_category, success_valuepatient_instructions ), ], actionpostprocessing_functions.remove_ent, description删除患者说明章节中的所有实体 ), ]配合visualize_ent(doc)可视化前后对比可以直观看到被过滤掉的实体消失。3. 重命名实体词义消歧ca 既可能是癌症CANCER也可能是肿瘤标志物检查TEST用条件组合 动作模式自动改标签rules [ PostprocessingRule( patterns[ PostprocessingPattern(conditionlambda ent: ent.text.lower() ca), PostprocessingPattern(conditionpostprocessing_functions.sentence_contains, condition_args(lab,)), # 句子中出现 lab ], actionpostprocessing_functions.set_label, kwargs{label: TEST} # 重命名为 TEST ), ]规则模型三层结构与 medspaCy 其他规则组件风格一致PostprocessingRule一组条件 一个动作全部条件通过才执行PostprocessingPattern单个条件检查支持传condition_argsaction内置或自定义函数支持kwargs传参实现源码见 postprocessor.py、postprocessing_rule.py设计说明见 README。四、内置实用函数速查表 postprocessing_functions模块提供开箱即用的条件与动作函数覆盖临床 NLP 最高频的修正场景类型函数用途条件is_negated/is_uncertain判断实体是否被否定/不确定修饰条件is_historical/is_hypothetical/is_family判断历史、假设、家属提及条件sentence_contains/is_preceded_by/is_followed_by基于句内文本或前后窗口词判断条件is_modified_by_category/is_modified_by_text检查 ConText 修饰语动作remove_ent从doc.ents删除实体动作set_label复制实体并改标签重命名动作set_negated/set_uncertain等直接修正修饰属性高频组合示例——删除所有被否定实体rules [ PostprocessingRule( patterns[PostprocessingPattern(conditionpostprocessing_functions.is_negated)], actionpostprocessing_functions.remove_ent, ), ]无肺炎迹象no evidence of pneumonia中的 pneumonia 会被自动过滤只保留真实存在的阳性发现。五、避坑指南 ⚠️Preprocessor 不要add_pipe它不是 spaCy 组件必须直接替换nlp.tokenizer否则流水线不生效。set_label 是复制再替换spaCy 不允许直接修改 span 标签该函数会创建新 span 并尝试复制扩展属性复杂属性可能丢失建议处理后抽查。Postprocessor 建议放流水线最后若放在 NER/ConText 之前实体上还没有修饰属性is_negated等条件全部失效。规则顺序即执行顺序同一实体会依次被各规则检查一旦删除立即跳过后续规则。用 debug 模式排错add_pipe(medspacy_postprocessor, config{debug: True})可打印每个实体的规则判定日志。六、总结需求选择关键 API清洗原始文本日期、缩写、占位符PreprocessorPreprocessingRule(pattern, repl)删除噪声实体Postprocessorremove_ent重命名/改标签Postprocessorset_labelsentence_contains结合 ConText 属性做过滤Postprocessoris_negated等条件函数完整可运行示例见官方 Notebook 08-Preprocessing-Postprocessing.ipynb配合 discharge_summary.txt 出院小结语料上手实践。掌握Preprocessor 清洗 Postprocessor 修正这对组合拳你的 medspaCy 临床 NLP 流水线就能输出干净、可信的实体结果。【免费下载链接】medspacyLibrary for clinical NLP with spaCy.项目地址: https://gitcode.com/gh_mirrors/me/medspacy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻