在文本中查找特定关键字的否定
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"
现在,如果我使用列表(例如使用正则表达式)提取药物,则提取的药物为 ibuprofen
和 paracetamol
。
问题 如何区分实际处方药和非耐受药?有没有办法标记处方(使用)和其他提到的药物?
克服这个问题的一种方法是预先定义药物名称之前的单词。因此,在您的情况下,这意味着检查 "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 是:
- 使用关系提取 NLP 库(例如 Watson、Core-NLP、Spacy),您使用示例句子进行训练,例如您提供的示例句子,以提取三元组关系,例如 (John, prescribed, ibuprofen) and (John,不能耐受,扑热息痛)。这将需要对示例数据进行注释。
- 从显示句子不同部分如何相关的依存关系分析开始,滚动您自己的关系提取器。这将需要编程时间和培训。
处理关系中的否定不是一个解决的问题。围绕这方面的最新技术通常与情绪分析有关。 Stanford NLP Sentiment Analysis using RNN page
提供了有关使用依赖性解析来识别和处理否定的介绍
我正在研究从医学文本中提取信息(对 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"
现在,如果我使用列表(例如使用正则表达式)提取药物,则提取的药物为 ibuprofen
和 paracetamol
。
问题 如何区分实际处方药和非耐受药?有没有办法标记处方(使用)和其他提到的药物?
克服这个问题的一种方法是预先定义药物名称之前的单词。因此,在您的情况下,这意味着检查 "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 是:
- 使用关系提取 NLP 库(例如 Watson、Core-NLP、Spacy),您使用示例句子进行训练,例如您提供的示例句子,以提取三元组关系,例如 (John, prescribed, ibuprofen) and (John,不能耐受,扑热息痛)。这将需要对示例数据进行注释。
- 从显示句子不同部分如何相关的依存关系分析开始,滚动您自己的关系提取器。这将需要编程时间和培训。
处理关系中的否定不是一个解决的问题。围绕这方面的最新技术通常与情绪分析有关。 Stanford NLP Sentiment Analysis using RNN page
提供了有关使用依赖性解析来识别和处理否定的介绍