一、概念

 指代作为一种常见的语言现象,广泛存在于自然语言的各种表达中(下面的他指的是张三还是小明呢?)

stanfordcorenlp 指代消解 指代消解是什么意思_jar包

 

 

我们人眼一下子就能分辨出上面的他指代张三,但是计算机程序如何识别呢?-指代消解就是来做这个事情

 中文的指代主要有以下三种典型的形式:

 1.人称代词(Pronoun)

【李明】怕高妈妈一人呆在家里寂寞,【他】便将家里的电视搬了过来。

2.指示代词(Demonstrative)

  【很多人都想创造一个美好的世界留给孩子】,【这】可以理解,但不完全正确

 3.有定描述(Definite Description)

  【贸易制裁】似乎成了【美国政府在对华关系中惯用的大棒】。然而,这【大棒】果真如美国政府所希望的那样灵验吗?


 指代消解得类型又可分为下面三种:

 1.显性代词消解

  所谓显性代词消解,就是指:确定显性代词指向哪个名词短语的问题,代词称为指示语或照应语(Anaphor),其所指向的名词短语一般被称为先行语(Antecedent)

  根据二者之间的先后位置,可分为回指(Anaphora)与预指(Cataphora),其中:如果先行语出现在指示语之前,则称为回指,反之则称为预指。

  如下图中所示的闲聊型对话机器人,这里有“him”和”he”指向“John”,以及”she”指向”My sister”等,这种指代一般都有显式的代词;

stanfordcorenlp 指代消解 指代消解是什么意思_java_02

 

 

2.零代词消解

与显性代词消解相对,零指代消解,就是没有明确的代词,这部分代词通常来说是省略的

stanfordcorenlp 指代消解 指代消解是什么意思_jar包_03

 

 

3.共指消解

而共指消解,主要是两个或多个指代词指向同一个实体

 

二、stanford nlp安装(windows下)

 1)需要安装java8:安装Java并设置java的环境变量

 2)pip install stanfordcorenlp

 3)下载Stanford CoreNLP,并解压

stanfordcorenlp 指代消解 指代消解是什么意思_jar包_04

 

4)由于Stanford NLP是由java开发的,所以如果要使用的话,需要引入相应的jar包,我们想使用中文,找到对应的中文jar包下载即可

stanfordcorenlp 指代消解 指代消解是什么意思_java_05

注意:一定将下载的中文jar包放到3)中解压的文件夹里

 5)运行:若运行下述两行命令没有异常则表明coreNLP安装成功了。

from stanfordcorenlp import StanfordCoreNLP
nlp = StanfordCoreNLP(r'D:\work\stanford-corenlp-4.0.0',lang='zh')
# 这里需要自己指定自己的解压目录

 

三、使用

1) 对一段句子进行分词(word_tokenize)、词性标注(pos_tag)、命名实体识别(ner)、句法依存分析(dependency_parse)、句法解析(parse)

sentence = "清华大学位于北京市海淀区中关村北大街"
print(nlp.word_tokenize(sentence))
# ['清华', '大学', '位于', '北京市', '海淀区', '中关村', '北大街']

print(nlp.pos_tag(sentence))
#[('清华', 'NR'), ('大学', 'NN'), ('位于', 'VV'), ('北京市', 'NR'), ('海淀区', 'NR'), ('中关村', 'NR'), ('北大街', 'NR')]

print(nlp.ner(sentence))
# [('清华', 'ORGANIZATION'), ('大学', 'ORGANIZATION'), ('位于', 'O'), ('北京市', 'GPE'), ('海淀区', 'GPE'), ('中关村', 'FACILITY'), ('北大街', 'FACILITY')]

print(nlp.dependency_parse(sentence))
# [('ROOT', 0, 3), ('compound:nn', 2, 1), ('nsubj', 3, 2), ('dep', 7, 4), ('dep', 7, 5), ('dep', 7, 6), ('dobj', 3, 7)]

print(nlp.parse(sentence))