
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),僅供參考