使用可能的诊断列表(查找表)在一系列临床叙述中找出特定诊断

Using a list of possible diagnosis (look up table) to find out a specific diagnosis in a series of clinical narratives

提问人:JoseVet 提问时间:5/14/2023 最后编辑:ArctodusJoseVet 更新时间:5/15/2023 访问量:48

问:

我有一个临床叙述数据集,我想从中提取癌症的诊断。

这是叙述的一个示例(每个字符串都是数据集上的一行(大多数叙述只有一个诊断,但其他叙述有多个诊断。

['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']

因此,我需要做的是将查找表循环到每个叙述上,以找出每个临床叙述中查找表的哪些诊断。

我试过了。

def t(x):
    for item in [Tumour_list]:
        if item in Narratives_series :
            return item
    return False

print(Narratives_series)
print(Narratives_series.apply(t))

期待这个:

但到目前为止,这是不可能的。我还是 Python 的新手:-) 何塞。

Python 列表 循环匹配 系列

评论


答:

0赞 Anas Ahmed 5/14/2023 #1

您可以使用以下功能:

diagnoses = ['Solid carcinoma', 'tubular carcinoma', 'adenoma', 'haemangiosarcoma', 'mammary adenoma', 'mixed mammary carcinoma']

narrative_diagnoses = {}
for narrative in narratives:
        narrative_diagnoses[narrative] = []
        for diagnosis in diagnoses:
                if diagnosis.lower() in narrative.lower():
                        narrative_diagnoses[narrative].append(diagnosis)

这将创建一个字典,其中键是叙述,值是在叙述中找到的所有诊断的列表。

评论

0赞 JoseVet 5/15/2023
我想我没有把自己解释得足够好(道歉)。主要问题是我把所有这些叙述(超过 100000 个)放在一个列中,而所有诊断(1000 个)放在其他列中。我希望 Python 查看包含所有诊断列表的叙述,并在第三列中返回匹配项。换句话说,如果我们考虑这个例子,期望的结果是,当 Python 阅读带有“简单管状癌和乳腺实体癌”的叙述时,它会返回“实体癌”和“肾小管癌”。希望这现在有意义。谢谢!
0赞 Anas Ahmed 5/15/2023
我根据您的评论编辑了我的代码。但有一个问题是,当叙述中有两个以上的诊断时会发生什么,例如,对于叙述:“乳腺腺瘤和混合性乳腺癌”,你是想提取“腺瘤”作为单一诊断本身,还是只想要你在表格中显示的两个诊断。我的代码为这个叙述输出了这个: ['腺瘤', '乳腺腺瘤', '混合性乳腺癌']
0赞 JoseVet 5/19/2023
多谢!结果很棒。你的问题非常恰当,我不太确定哪个更好,因为在这种情况下,“乳腺腺瘤”的输出是“乳腺腺瘤”+“腺瘤”,它应该(如果可能)只有“乳腺腺瘤”,因为只有一个诊断而不是两个。然而,对于像“乳腺腺瘤和皮肤未指定的腺瘤”这样的叙述来说,这很好。Maye 我必须减少参考文献列表并删除通用术语。但是,您的代码是很好的第一步。我不明白的是这句话:narrative_diagnoses[叙述]。谢谢 🙏