濾、重命名與刪除流水線中的實(shí)體)
medspaCy Preprocessor/Postprocessor 雙組件完整教程快速過(guò)濾、重命名與刪除流水線中的實(shí)體【免費(fèi)下載鏈接】medspacyLibrary for clinical NLP with spaCy.項(xiàng)目地址: https://gitcode.com/gh_mirrors/me/medspacymedspaCy Preprocessor/Postprocessor是 medspaCy 臨床 NLP 工具庫(kù)中兩個(gè)互補(bǔ)的核心組件Preprocessor 在文本進(jìn)入 spaCy 流水線之前執(zhí)行破壞性清洗替換、刪除文本Postprocessor 則在流水線末尾遍歷已識(shí)別的實(shí)體實(shí)現(xiàn)過(guò)濾、重命名標(biāo)簽或刪除實(shí)體。本教程用一份真實(shí)出院小結(jié)場(chǎng)景帶你快速掌握這兩個(gè)組件的使用方式。一、雙組件分工一張圖看懂流水線位置 組件執(zhí)行時(shí)機(jī)作用對(duì)象是否 spaCy 組件Preprocessor預(yù)處理器分詞之前原始文本字符串? 需手動(dòng)接管 tokenizerPostprocessor后處理器流水線末尾doc.ents實(shí)體列表? 通過(guò)add_pipe加入一句話記憶Preprocessor 改文字Postprocessor 改實(shí)體。import medspacy nlp medspacy.load(medspacy_enable[medspacy_pyrush, medspacy_target_matcher, medspacy_sectionizer])二、Preprocessor 預(yù)處理流水線前清洗文本spaCy 默認(rèn)只允許非破壞性處理但很多臨床文本需要先動(dòng)刀統(tǒng)一日期格式、展開(kāi)縮寫、去掉占位符。Preprocessor就是為此設(shè)計(jì)的它包裹流水線 tokenizer在分詞前修改文本。核心用法分三步創(chuàng)建并接管 tokenizer不是add_pipefrom medspacy.preprocess import Preprocessor preprocessor Preprocessor(nlp.tokenizer) nlp.tokenizer preprocessor用PreprocessingRule定義匹配模式 → 替換文本規(guī)則from medspacy.preprocess import PreprocessingRule rules [ PreprocessingRule(r\[\*\*[\d]{4}\*\*\], repl2010, desc替換 MIMIC 年份占位符), PreprocessingRule(rdxd, replDiagnosed, desc展開(kāi)縮寫), PreprocessingRule(r\[\*\*[^\]]\], desc刪除其余占位符默認(rèn)替換為空), ] preprocessor.add(rules)正常調(diào)用doc nlp(text)即可文本會(huì)先被清洗再分詞。規(guī)則四大參數(shù)pattern正則表達(dá)式定位要修改的文本repl替換文本默認(rèn)空字符串即刪除callback自定義函數(shù)可基于匹配結(jié)果做更復(fù)雜的整段刪除desc規(guī)則描述便于維護(hù) 提示callback參數(shù)非常適合按標(biāo)題刪除整個(gè)章節(jié)這類大范圍文本操作而repl只適合精確的點(diǎn)對(duì)點(diǎn)替換。實(shí)現(xiàn)源碼見(jiàn) preprocessor.py 與 preprocessing_rule.py。三、Postprocessor 后處理流水線后管理實(shí)體經(jīng)過(guò) NER 和 ConText 等組件后doc.ents中可能混入噪聲被否定的實(shí)體、無(wú)關(guān)章節(jié)的實(shí)體、標(biāo)簽錯(cuò)誤的實(shí)體。Postprocessor作為流水線最后一個(gè)組件逐實(shí)體檢查條件全部通過(guò)則執(zhí)行動(dòng)作。上圖medspaCy 實(shí)體可視化效果——Postprocessor 正是對(duì)這類實(shí)體做最終過(guò)濾與修正1. 三步搭建 Postprocessorfrom medspacy.postprocess import Postprocessor, PostprocessingRule, PostprocessingPattern from medspacy.postprocess import postprocessing_functions postprocessor nlp.add_pipe(medspacy_postprocessor) postprocessor.add(rules) # 加入規(guī)則2. 過(guò)濾刪除實(shí)體經(jīng)典移除患者說(shuō)明章節(jié)實(shí)體患者說(shuō)明patient instructions通常是假設(shè)性內(nèi)容不是患者真實(shí)經(jīng)歷應(yīng)當(dāng)剔除rules [ PostprocessingRule( patterns[ PostprocessingPattern( conditionlambda ent: ent._.section_category, success_valuepatient_instructions ), ], actionpostprocessing_functions.remove_ent, description刪除患者說(shuō)明章節(jié)中的所有實(shí)體 ), ]配合visualize_ent(doc)可視化前后對(duì)比可以直觀看到被過(guò)濾掉的實(shí)體消失。3. 重命名實(shí)體詞義消歧ca 既可能是癌癥CANCER也可能是腫瘤標(biāo)志物檢查TEST用條件組合 動(dòng)作模式自動(dòng)改標(biāo)簽rules [ PostprocessingRule( patterns[ PostprocessingPattern(conditionlambda ent: ent.text.lower() ca), PostprocessingPattern(conditionpostprocessing_functions.sentence_contains, condition_args(lab,)), # 句子中出現(xiàn) lab ], actionpostprocessing_functions.set_label, kwargs{label: TEST} # 重命名為 TEST ), ]規(guī)則模型三層結(jié)構(gòu)與 medspaCy 其他規(guī)則組件風(fēng)格一致PostprocessingRule一組條件 一個(gè)動(dòng)作全部條件通過(guò)才執(zhí)行PostprocessingPattern單個(gè)條件檢查支持傳condition_argsaction內(nèi)置或自定義函數(shù)支持kwargs傳參實(shí)現(xiàn)源碼見(jiàn) postprocessor.py、postprocessing_rule.py設(shè)計(jì)說(shuō)明見(jiàn) README。四、內(nèi)置實(shí)用函數(shù)速查表 postprocessing_functions模塊提供開(kāi)箱即用的條件與動(dòng)作函數(shù)覆蓋臨床 NLP 最高頻的修正場(chǎng)景類型函數(shù)用途條件is_negated/is_uncertain判斷實(shí)體是否被否定/不確定修飾條件is_historical/is_hypothetical/is_family判斷歷史、假設(shè)、家屬提及條件sentence_contains/is_preceded_by/is_followed_by基于句內(nèi)文本或前后窗口詞判斷條件is_modified_by_category/is_modified_by_text檢查 ConText 修飾語(yǔ)動(dòng)作remove_ent從doc.ents刪除實(shí)體動(dòng)作set_label復(fù)制實(shí)體并改標(biāo)簽重命名動(dòng)作set_negated/set_uncertain等直接修正修飾屬性高頻組合示例——?jiǎng)h除所有被否定實(shí)體rules [ PostprocessingRule( patterns[PostprocessingPattern(conditionpostprocessing_functions.is_negated)], actionpostprocessing_functions.remove_ent, ), ]無(wú)肺炎跡象no evidence of pneumonia中的 pneumonia 會(huì)被自動(dòng)過(guò)濾只保留真實(shí)存在的陽(yáng)性發(fā)現(xiàn)。五、避坑指南 ??Preprocessor 不要add_pipe它不是 spaCy 組件必須直接替換nlp.tokenizer否則流水線不生效。set_label 是復(fù)制再替換spaCy 不允許直接修改 span 標(biāo)簽該函數(shù)會(huì)創(chuàng)建新 span 并嘗試復(fù)制擴(kuò)展屬性復(fù)雜屬性可能丟失建議處理后抽查。Postprocessor 建議放流水線最后若放在 NER/ConText 之前實(shí)體上還沒(méi)有修飾屬性is_negated等條件全部失效。規(guī)則順序即執(zhí)行順序同一實(shí)體會(huì)依次被各規(guī)則檢查一旦刪除立即跳過(guò)后續(xù)規(guī)則。用 debug 模式排錯(cuò)add_pipe(medspacy_postprocessor, config{debug: True})可打印每個(gè)實(shí)體的規(guī)則判定日志。六、總結(jié)需求選擇關(guān)鍵 API清洗原始文本日期、縮寫、占位符PreprocessorPreprocessingRule(pattern, repl)刪除噪聲實(shí)體Postprocessorremove_ent重命名/改標(biāo)簽Postprocessorset_labelsentence_contains結(jié)合 ConText 屬性做過(guò)濾Postprocessoris_negated等條件函數(shù)完整可運(yùn)行示例見(jiàn)官方 Notebook 08-Preprocessing-Postprocessing.ipynb配合 discharge_summary.txt 出院小結(jié)語(yǔ)料上手實(shí)踐。掌握Preprocessor 清洗 Postprocessor 修正這對(duì)組合拳你的 medspaCy 臨床 NLP 流水線就能輸出干凈、可信的實(shí)體結(jié)果?!久赓M(fèi)下載鏈接】medspacyLibrary for clinical NLP with spaCy.項(xiàng)目地址: https://gitcode.com/gh_mirrors/me/medspacy創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考