2016-09-14 104 views
2

我试图使用斯坦福NLP实现NER(命名实体提取)。 的最终目标是将自由文本转换为查询格式。 我创建了一个自定义词典和我能够提取的实体,并建立查询自定义命名实体提取

people who are from newyork 

我将建立查询

 select * from people where region = 'newyork' 

但在声明中被否定

人谁的问题来不是从纽约

如何从这个声明中提取负面情况,有没有任何可能的方式,即使在斯坦福外面NLP

任何帮助表示赞赏

回答

1

我知道2点的可能性来实现否定关系:

  • 定义自定义属性“不是......”到处都应用它。
  • 使用知识库,从数据中提取LOCATION,将“不从smth”定义为“LOCATION不是smth”。

我成功地使用了第二种方法,但是我能够将我的域限制为有限的主题和关系集。我发现Stanford's typed dependencies非常有用,他们可能也会帮助你(找到那些from smth关系)。

+0

我试过了第一种方法。上述方法的问题是,如果在一个句子中有多个否定,那么我们就看不到哪个实体被否定 –

+0

第一种方法的缺点是必须每N个实体有N个否定。基本上,额外属性的数量增长得太快。尝试第二种方法,它具有额外的好处 - 您可以将您的关系映射到某个数据库并使用SQL查询信息。 – dveim

0

你想做什么被称为'数据库的自然语言接口'和Standford NLP NER(基于CRF序列模型)可能不适合这项任务的解决方案。 当命名实体的含义取决于句子语义上下文时,基于CRF的NER是很好的:人名,公司名称,国家等。带有标记名的注释文本用于训练识别器,这种方法实际上并不适用于数据库。

基于规则的识别是在这种情况下要好得多:

  • 你不需要训练他们:它是足够多的,以保持由规则引擎使用了最新的(数据表的列表词典名称,它们的列等)
  • 您可以轻松地添加自定义分析程序,您需要:日期,为数字/条件,逻辑运算符(如“不是”,“或”,“和”)

您可能一瞥我的图书馆,这是专门为自然语言查询识别而编写的:NLQuery