首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在文本中查找特定关键字的否定

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

Stack Overflow用户
提问于 2018-02-28 22:20:27
回答 2查看 2.2K关注 0票数 0

我正在从事从医学文本中提取信息的工作(NLP非常新!)。目前,我感兴趣的是找到和提取药物,这是在一个预先确定的药物清单。例如,考虑案文:

约翰因高温被开了阿司匹林的处方

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

代码语言:javascript
复制
list_of_meds = ['aspirin', 'ibuprofen', 'paracetamol']

提取的药物为aspirin。这很好。

现在再考虑另一种情况:

约翰给布洛芬开了处方,因为他不能忍受扑热息痛

现在,如果我使用列表(例如,带有正则表达式)提取药物,那么提取的药物是ibuprofenparacetamol

问题如何区分实际的处方药和不可耐受的药物?有没有办法给处方(用)和其他提到的药物贴上标签?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-01 02:31:01

这是一个复杂的问题。要捕获否定周围的细微差别,您需要进入依赖解析关系提取的世界。在当前的方法和add @Jordan中,您可以采取以下几种方式来增加复杂性:

  1. 使用关系提取NLP库(例如,Watson、Core、Spacy),您可以使用类似于您给出的示例语句来提取三重奏关系,比如(John,处方药,布洛芬)和(John,不能容忍,对乙酰氨基酚)。这将需要在注释样本数据方面进行投资。
  2. 通过从显示句子不同部分之间的关联的依赖解析开始,滚动自己的关系提取器。这既需要编程时间,也需要培训。

处理关系中的否定不是一个解决的问题。这方面的最新进展通常与情感分析有关。关于使用依赖解析来识别和处理否定的介绍可以在这个基于RNN页面的斯坦福NLP情感分析上使用。

票数 3
EN

Stack Overflow用户

发布于 2018-02-28 22:44:16

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

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

代码语言:javascript
复制
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作为输出,您可以从那里使用该变量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49039586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档