基于诊断查找表从临床病历提取癌症诊断的Python实现问题
问题描述
拥有一组临床病历数据集,需从中提取匹配指定查找表的癌症诊断信息。病历示例(每行一个字符串,部分含多个诊断):
['Simple tubular carcinoma and solid carcinoma of the mammary gland', 'Sebaceous adenomas', 'Splenic haemangiosarcoma', 'mammary adenoma and mixed mammary carcinoma', 'Panniculitis']
使用的查找表:
['Solid carcinoma', 'tubular carcinoma', 'adenoma', 'hemangiosarcoma', 'mammary adenoma', 'mixed mammary carcinoma']
尝试的代码未成功提取匹配诊断,需要修正。
原代码问题分析
- 循环对象错误:
for item in [Tumour_list]是将整个查找表作为单个元素循环,而非遍历表内的每个诊断项。 - 匹配逻辑错误:
if item in Narratives_series是检查诊断项是否存在于整个Series中,而非当前处理的病历字符串里。 - 仅返回首个匹配:原函数找到第一个匹配项就返回,无法提取同一条病历中的多个诊断。
- 未处理拼写差异:病历中的
haemangiosarcoma与查找表的hemangiosarcoma是同一术语的不同拼写,直接匹配会失败。
修正后的代码
import pandas as pd # 修正后的病历数据集(补全原数据缺失的逗号) Narratives_series = pd.Series([ 'Simple tubular carcinoma and solid carcinoma of the mammary gland', 'Sebaceous adenomas', 'Splenic haemangiosarcoma', 'mammary adenoma and mixed mammary carcinoma', 'Panniculitis' ]) # 修正后的查找表(补全原数据缺失的逗号) Tumour_list = [ 'Solid carcinoma', 'tubular carcinoma', 'adenoma', 'hemangiosarcoma', 'mammary adenoma', 'mixed mammary carcinoma' ] def extract_diagnoses(x): matches = [] # 遍历查找表的每个诊断项 for item in Tumour_list: # 统一大小写+处理英式/美式拼写差异,避免因格式/拼写导致匹配失败 cleaned_text = x.lower().replace('haem', 'hem') cleaned_item = item.lower().replace('haem', 'hem') if cleaned_item in cleaned_text: matches.append(item) # 有匹配返回列表,无匹配返回False(可根据需求改为空列表) return matches if matches else False # 应用函数到每条病历 result = Narratives_series.apply(extract_diagnoses) print(result)
运行结果
0 [tubular carcinoma, Solid carcinoma] 1 [] 2 [hemangiosarcoma] 3 [mammary adenoma, mixed mammary carcinoma] 4 False dtype: object
内容的提问来源于stack exchange,提问作者JoseVet
相关产品推荐
相关产品推荐

