在文本中找到对特定关键字的否定

时间:2018-02-28 22:20:28

标签: python nlp regex-negation data-extraction

我正致力于从医学文本中提取信息(非常新的NLP!)。目前,我有兴趣找到并提取预定义药物清单中提到的药物。例如,考虑文本:

  

"约翰因高温而被处方服用阿司匹林"

因此,给定药物清单(用Python语言):

list_of_meds = ['aspirin', 'ibuprofen', 'paracetamol']

提取的药物是aspirin。没关系。

现在考虑另一种情况:

  

"约翰服用了布洛芬,因为他无法忍受扑热息痛"

现在,如果我使用列表提取药物(例如使用正则表达式),则提取的药物为ibuprofenparacetamol

问题如何分开实际处方和未经处方的药物?有没有办法标记处方(使用过的)和其他提到的药物?

2 个答案:

答案 0 :(得分:2)

克服这个问题的一种方法是预先定义医学名称之前的单词。因此,在您的情况下,这将意味着检查药物名称之前是否“处方”或“不耐受”。

这就是我想出的。如果您想尝试第二段文字,只需将变量text = first替换为text = second

import string

list_of_meds = ['aspirin', 'ibuprofen', 'paracetamol']
first = "John was prescribed aspirin due to high temperature"
second = "John was prescribed ibuprofen, because he could not tolerate 
paracetamol"

text = first

for c in string.punctuation:                                                                                                     
    text = text.replace(c, "")
text = text.split(' ')
for i in text:
    if i in list_of_meds:
        index = text.index(i) - 1
        if text[index] == "prescribed":
            medicine = i
            break
祝你好运!

约旦。

-----编辑-----

使用变量medicine作为输出,您可以从那里使用该变量。

答案 1 :(得分:2)

这是一个复杂的问题。要捕捉否定的细微差别,您需要进入依赖性解析关系提取的世界。您可以采取一些路径来增加当前方法的复杂性以及@Jordan的附加组件:

  1. 使用关系提取NLP库(例如Watson,Core-NLP,Spacy),您使用例如您提供的三重关系(例如,约翰,处方,布洛芬)和(约翰,不能忍受,扑热息痛)等实例句子进行训练)。这将需要投资注释样本数据。
  2. 从依赖关系解析开始滚动自己的关系提取器,该解析显示句子的不同部分是如何相关的。这将需要编程时间和培训。
  3. 处理关系中的否定并不是一个解决的问题。围绕这一点的现有技术通常与情绪分析相关。此Stanford NLP Sentiment Analysis using RNN page

    提供了使用依赖关系解析来识别和处理否定的简介