You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取Diagnosis:或diagnosis:后的3个及以上单词?

提取诊断信息中3个及以上单词的解决方案

问题分析

你之前的正则表达式只能匹配单个单词,核心问题在于:

  • 限定仅匹配\w+(单个单词),未处理多单词场景
  • 用.结尾可能提前截断匹配内容
  • 重复定义大小写模式,冗余且不够简洁

正则表达式修改

使用以下正则可以匹配diagnosis:(不区分大小写)后3个及以上单词:

r'diagnosis:\s+((?:\w+\s+){2,}\w+)'
  • diagnosis::匹配关键词(后续通过re.IGNORECASE忽略大小写)
  • \s+:匹配冒号后的任意数量空格
  • (?:\w+\s+){2,}:非捕获组,匹配至少2个"单词+空格"的组合
  • \w+:匹配最后一个单词,确保总单词数≥3

完整修改后的代码

import re

#@title Extract Diagnosis { form-width: "20%" }

def extract_Diagnosis(clinical_information):
    # 单个正则+忽略大小写,覆盖Diagnosis/diagnosis两种情况
    pattern = r'diagnosis:\s+((?:\w+\s+){2,}\w+)'
    matches = re.findall(pattern, clinical_information, flags=re.IGNORECASE)
    
    # 处理匹配结果:去重、去空格、过滤空值
    valid_diagnoses = [match.strip() for match in matches if match.strip()]
    # 返回第一个有效结果,或者空字符串(可按需调整为返回所有匹配)
    return valid_diagnoses[0] if valid_diagnoses else ""

# 遍历文本列表提取诊断
for index, text in enumerate(texts):
    diagnosis = extract_Diagnosis(text)
    print(diagnosis)
    print("#"*79, index)

代码调整说明

  1. 简化正则模式:用re.IGNORECASE标志统一处理大小写,无需定义两个重复模式
  2. 修复缩进错误:原代码存在缩进混乱问题,已修正为符合Python规范的缩进
  3. 结果处理优化:对匹配结果做去空格、过滤空值处理,确保返回有效内容
  4. 灵活返回逻辑:如果有多个匹配,返回第一个有效诊断;无匹配则返回空字符串(可根据需求调整为返回所有匹配)

额外优化建议

如果诊断文本中包含连字符(如non-small cell lung cancer)或标点(如type 2 diabetes, uncontrolled),可以把正则中的\w+替换为[\w-]+,同时允许匹配结尾的标点:

r'diagnosis:\s+((?:[\w-]+\s+){2,}[\w-]+)(?:[.,;]|$)'

这样可以兼容更多临床文本格式。

内容的提问来源于stack exchange,提问作者Mahshid Nik Ravesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:40:31