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

Find negation of particular keywords in text

我正在研究从医学文本中提取信息(对 NLP 很陌生!)。目前,我有兴趣查找并提取预定义药物列表中提到的药物。例如,考虑文本:

"John was prescribed aspirin due to hight temperature"

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

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

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

现在考虑另一种情况:

"John was prescribed ibuprofen, because he could not tolerate paracetamol"

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

问题 如何区分实际处方药和非耐受药?有没有办法标记处方(使用)和其他提到的药物?

克服这个问题的一种方法是预先定义药物名称之前的单词。因此,在您的情况下,这意味着检查 "prescribed" 或 "not tolerate" 是否出现在药物名称之前。

这是我想到的。如果您想尝试第二段文本,只需将变量 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 作为输出,您可以从那里使用该变量。

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

  1. 使用关系提取 NLP 库(例如 Watson、Core-NLP、Spacy),您使用示例句子进行训练,例如您提供的示例句子,以提取三元组关系,例如 (John, prescribed, ibuprofen) and (John,不能耐受,扑热息痛)。这将需要对示例数据进行注释。
  2. 从显示句子不同部分如何相关的依存关系分析开始,滚动您自己的关系提取器。这将需要编程时间和培训。

处理关系中的否定不是一个解决的问题。围绕这方面的最新技术通常与情绪分析有关。 Stanford NLP Sentiment Analysis using RNN page

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