非結構化醫療文本挖掘器

👤 AIPOCH 📦 v1.1.0 ⭐ 4.2 ⬇️ 666 下載
💼 行業專業 免費

📖 技能介紹


slug: unstructured-medical-text-miner displayName: 非結構化醫療文本挖掘器 version: 1.1.0 description: 從MIMIC-IV非結構化臨床文本中提取診斷邏輯。適用於醫療文本挖掘、臨床NLP分析、NOTEEVENTS實體識別(NER)與關係抽取任務。 license: MIT author: AIPOCH


非結構化醫療文本挖掘器(Skill ID: 213)

適用場景

  • 當任務需要從MIMIC-IV非結構化臨床文本中挖掘診斷邏輯時,使用本技能。
  • 當需要對證據洞察類任務進行明確假設、限定範圍、生成可復現輸出格式時使用。
  • 當需要對缺失輸入、執行錯誤或部分證據提供有文件記錄的備用路徑時使用。

核心功能

  • 聚焦於以下範圍的工作流:從MIMIC-IV非結構化臨床文本中挖掘診斷邏輯。
  • 可執行入口:scripts/main.py(主指令碼)及 scripts/__init__.py(包入口)。
  • references/ 目錄提供任務專項參考材料。
  • 結構化執行路徑,確保輸出結果一致且可審查。

依賴項

pandas>=1.3.0
spacy>=3.4.0
scispacy>=0.5.1
negspacy

示例用法

cd "unstructured-medical-text-miner"
python -m py_compile scripts/main.py
python scripts/main.py --help

示例執行步驟: 1. 確認使用者輸入、輸出路徑及必要的配置值。 2. 如有需要,修改 config.yaml 中的引數設定。 3. 使用驗證後的輸入執行 python scripts/main.py。 4. 檢查生成的輸出,並在返回最終結果時明確說明所有假設。

實現細節

  • 執行模型:驗證請求 → 選擇封裝的工作流 → 生成有界可交付物。
  • 輸入控制:在執行任何指令碼前,確認原始檔、範圍限制、輸出格式和驗收標準。
  • 主要實現:scripts/main.py 中的 MedicalTextMiner 類。
  • 參考指南:references/ 包含支援規則、提示或檢查清單。
  • 需提前明確的引數:輸入路徑、輸出路徑、範圍過濾器、閾值及領域特定約束。
  • 輸出規範:保持結果可復現,明確標註假設,避免未記錄的副作用。

快速檢查

使用以下命令驗證指令碼入口點可被解析:

python -m py_compile scripts/main.py

審計命令

以下為具體的驗證命令,刻意保持自包含,避免佔位符路徑:

python -m py_compile scripts/main.py
python scripts/main.py --help
python scripts/main.py -h

工作流

  1. 在進行詳細工作前,確認使用者目標、所需輸入和不可妥協的約束條件。
  2. 驗證請求是否符合已記錄的範圍,若任務需要不支援的假設則提前停止。
  3. 使用封裝的指令碼路徑或有文件記錄的推理路徑,僅使用實際可用的輸入。
  4. 返回結構化結果,分別列出假設、可交付物、風險和未解決事項。
  5. 若執行失敗或輸入不完整,切換到備用路徑並明確說明阻止完成的原因。

概述

挖掘MIMIC-IV中長期被忽視的文本資料,提取非結構化診斷邏輯、醫囑詳情和病程記錄。

目的

MIMIC-IV資料庫包含大量結構化資料(生命體徵、實驗室結果等),但其真正的臨床價值往往隱藏在非結構化文本中: - 出院摘要中的診斷推理鏈 - 影像報告中的細微發現描述 - 病程記錄中的治療決策邏輯 - 醫囑中的個性化用藥考量

本技能提供完整的文本挖掘工具鏈,將原始醫療文本轉化為可分析的結構化洞察。

功能特性

1. 文本提取

  • NOTEEVENTS:從MIMIC-IV NOTE模組提取臨床記錄
  • 放射報告:提取影像診斷文本
  • ECG報告:解析心電圖解讀文本
  • 出院摘要:提取完整診斷和治療過程

2. 資訊抽取

  • 實體識別(NER):疾病、症狀、藥物、手術操作、解剖部位
  • 關係抽取:藥物-疾病治療關係、症狀-疾病診斷關係
  • 時間線抽取:事件發生時間、疾病進展順序
  • 否定檢測(Negation Detection):識別被否定的臨床發現(如"no fever"無發熱)

3. 臨床邏輯解析

  • 診斷推理鏈:症狀 → 檢查 → 診斷的推理路徑
  • 治療決策樹:藥物選擇和劑量調整的臨床依據
  • 疾病進展:疾病進展和轉歸描述

4. 結構化輸出

  • FHIR相容的臨床文件格式
  • 知識圖譜友好的三元組格式
  • 時序事件序列

用法

from scripts.main import MedicalTextMiner

# 初始化挖掘器
miner = MedicalTextMiner()

# 載入MIMIC-IV記錄資料
miner.load_notes(notes_path="path/to/noteevents.csv")

# 獲取特定患者的所有文本記錄
patient_texts = miner.get_patient_texts(subject_id=10000032)

# 執行完整的資訊抽取
insights = miner.extract_insights(
    text=patient_texts[0].get('note_text', ''),
    extract_entities=True,
    extract_relations=True,
    extract_timeline=True
)

輸入

資料來源

  • MIMIC-IV NOTEEVENTS表(csv/parquet格式)
  • 出院摘要檔案
  • 影像報告檔案
  • 自定義醫療文本

欄位要求

欄位名 描述 是否必填
subject_id 患者唯一識別符號
hadm_id 住院記錄識別符號
note_type 記錄型別(DS/RR/ECG等)
note_text 記錄文本內容
charttime 記錄時間

輸出

實體抽取結果

{
  "entities": [
    {
      "text": "acute myocardial infarction",
      "type": "DISEASE",
      "start": 156,
      "end": 183,
      "confidence": 0.94
    },
    {
      "text": "aspirin 81mg",
      "type": "MEDICATION",
      "start": 245,
      "end": 257,
      "attributes": {
        "dose": "81mg",
        "frequency": "daily"
      }
    }
  ]
}

臨床邏輯圖

{
  "clinical_logic": {
    "presenting_complaint": "chest pain",
    "differential_diagnoses": ["ACS", "PE", "aortic dissection"],
    "workup": ["ECG", "troponin", "CTA chest"],
    "final_diagnosis": "STEMI",
    "treatment_plan": ["PCI", "dual antiplatelet"]
  }
}

時序事件

{
  "timeline": [
    {
      "time": "2020-03-15 08:30",
      "event": "admission",
      "description": "presented with chest pain"
    },
    {
      "time": "2020-03-15 09:15",
      "event": "ECG",
      "description": "ST elevation in V1-V4"
    }
  ]
}

配置

# config.yaml
extraction:
  entity_types: ["DISEASE", "SYMPTOM", "MEDICATION", "PROCEDURE", "ANATOMY"]
  relation_types: ["TREATS", "CAUSES", "CONTRAINDICATED_WITH"]
  enable_negation_detection: true

models:
  ner_model: "en_core_sci_lg"  # 或 "en_core_sci_scibert"
  relation_model: null

output:
  format: "json"  # json/fhir/kg
  include_raw_text: false

CLI 用法

# 處理單個檔案
python scripts/main.py \
  --input notes.csv \
  --output extracted.json \
  --extract all

# 處理特定患者
python scripts/main.py \
  --subject-id 10000032 \
  --input mimic_noteevents.csv \
  --output patient_insights.json

# 直接處理文本片段
python scripts/main.py \
  --sample-text "Patient presented with chest pain. No fever."

參考資料

  1. MIMIC-IV臨床資料庫:https://physionet.org/content/mimiciv/
  2. scispaCy(醫療NLP庫):https://allenai.github.io/scispacy/
  3. NegEx/negspacy(否定檢測)
  4. FHIR臨床文件規範

作者資訊

Skill ID: 213 類別:醫療資料探勘 複雜度:高階

風險評估

風險指標 評估 級別
程式碼執行 本地執行Python指令碼
網路訪問 無外部API呼叫
檔案系統訪問 讀取輸入檔案,寫入輸出檔案
指令篡改 標準提示詞指南
資料暴露 輸出檔案儲存至工作區

安全檢查清單

  • [ ] 無硬編碼憑據或API金鑰
  • [ ] 無未授權的檔案系統訪問(../)
  • [ ] 輸出不暴露敏感資訊
  • [ ] 已部署提示詞注入防護
  • [ ] 輸入檔案路徑已驗證(無../遍歷)
  • [ ] 輸出目錄限制在工作區內
  • [ ] 指令碼在沙盒環境中執行
  • [ ] 錯誤訊息已清理(不暴露堆疊跟蹤)
  • [ ] 依賴項已審計

前置條件

# Python依賴安裝
pip install -r requirements.txt

評估標準

成功指標

  • [ ] 成功執行主要功能
  • [ ] 輸出符合質量標準
  • [ ] 優雅處理邊界情況
  • [ ] 效能可接受

測試用例

  1. 基本功能:標準輸入 → 預期輸出
  2. 邊界情況:無效輸入 → 優雅錯誤處理
  3. 效能測試:大數據集 → 可接受的處理時間

輸出要求

每個最終響應在相關時應明確以下內容:

  • 目標或請求的可交付物
  • 使用的輸入和引入的假設
  • 工作流或決策路徑
  • 核心結果、建議或工件
  • 約束條件、風險、注意事項或驗證需求
  • 未解決事項和下一步檢查

錯誤處理

  • 若缺少必要輸入,明確說明缺少哪些欄位,並僅請求最少量的額外資訊。
  • 若任務超出已記錄的範圍,停止執行而非猜測或靜默擴充套件任務範圍。
  • scripts/main.py 失敗,報告失敗點,總結仍可安全完成的內容,並提供手動備用方案。
  • 不得偽造檔案、引用、資料、搜尋結果或執行結果。

輸入驗證

本技能接受符合 unstructured-medical-text-miner 已記錄用途且包含足夠上下文可安全完成工作流的請求。

當請求超出範圍、缺少關鍵輸入或需要不支援的假設時,不得繼續工作流。請回復:

unstructured-medical-text-miner 僅處理其已記錄的工作流。請提供缺失的必要輸入或切換至更合適的技能。

參考文件

響應模板

7w4.net小蔥技能。

對非簡單請求使用以下固定結構:

  1. 目標
  2. 收到的輸入
  3. 假設
  4. 工作流
  5. 可交付物
  6. 風險與限制
  7. 後續檢查

對於簡單請求,可以壓縮結構,但在影響正確性時仍需明確說明假設和限制。

🤖 AI 評測

這款醫療文本挖掘工具質量不錯,能自動識別病歷中的疾病、藥物、檢查等關鍵資訊,並理清它們之間的關係。它使用簡單,文件清晰,配置靈活,基本功能已經比較實用。不足之處在於處理複雜或非標準格式的病歷時可能漏掉部分資訊,高階分析功能需要一定的醫學知識背景。對於需要從電子病歷中提取資料的使用者來說,是一個值得嘗試的選擇。

📊 多維度評分

適應性3.9
規範性4.2
有效性4.4
可靠性4.2
可信度4.3

📁 包含檔案 (8 個)

📄 SKILL.md 9.8 KB
📄 _meta.json 151 B
📄 config.yaml 1.7 KB
📄 example.py 4.3 KB
📄 references/audit-reference.md 571 B
📄 requirements.txt 57 B
📄 scripts/__init__.py 205 B
📄 scripts/main.py 21.2 KB