原文链接:http://www.one2know.cn/nlp12/

  • 代词是用来代替重复出现的名词

    例句:

    1.Ravi is a boy. He often donates money to the poor.

    先出现主语,后出现代词,所以流动的方向从左到右,这类句子叫回指(Anaphora)

    2.He was already on his way to airport.Realized Ravi.

    这种句子表达的方式的逆序的,这类句子叫预指(Cataphora)
  • 代码
import nltk
from nltk.chunk import tree2conlltags
from nltk.corpus import names # 有 人名和性别 标签
import random class AnaphoraExample:
def __init__(self): # 不需要参数就能构造
males = [(name,'male') for name in names.words('male.txt')]
females = [(name,'female') for name in names.words('female.txt')]
combined = males + females # 列表元素:人名和性别构成的元组
random.shuffle(combined)
# print(combined)
training = [(self.feature(name),gender) for (name,gender) in combined]
self._classifier = nltk.NaiveBayesClassifier.train(training) # 分类器 def feature(self,word): # 单词最后一个字母当特征
return {'last(1)' : word[-1]} def gender(self,word): # 返回单词放到分类器中得到的性别标签
return self._classifier.classify(self.feature(word)) def learnAnaphora(self):
sentences = [
"John is a man. He walks",
"John and Mary are married. They have two kids",
"In order for Ravi to be successful, he should follow John",
"John met Mary in Barista. She asked him to order a Pizza",
] for sent in sentences:
chunks = nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(sent)),binary=False)
# 实现分词,词性标注,组块(实体)抽取,返回组块树结果,赋给chunks
stack = []
print(sent)
items = tree2conlltags(chunks) # 将一个句子展平成一个列表,并以IOB格式表示
for item in items:
if item[1] == 'NNP' and (item[2] == 'B-PERSON' or item[2] == '0'): # 人名
stack.append((item[0],self.gender(item[0]))) # 人名和性别的元组
elif item[1] == 'CC': # 连词
stack.append(item[0])
elif item[1] == 'PRP': # 人称代词
stack.append(item[0])
print('\t{}'.format(stack)) if __name__ == "__main__":
anaphora = AnaphoraExample()
anaphora.learnAnaphora()

输出:

John is a man. He walks
[('John', 'male'), 'He']
John and Mary are married. They have two kids
[('John', 'male'), 'and', ('Mary', 'female'), 'They']
In order for Ravi to be successful, he should follow John
[('Ravi', 'female'), 'he', ('John', 'male')]
John met Mary in Barista. She asked him to order a Pizza
[('John', 'male'), ('Mary', 'female'), 'She', 'him']

NLP(十二)指代消解的更多相关文章

  1. NLP(二十二)利用ALBERT实现文本二分类

      在文章NLP(二十)利用BERT实现文本二分类中,笔者介绍了如何使用BERT来实现文本二分类功能,以判别是否属于出访类事件为例子.但是呢,利用BERT在做模型预测的时候存在预测时间较长的问题.因此 ...

  2. NLP(二十五)实现ALBERT+Bi-LSTM+CRF模型

      在文章NLP(二十四)利用ALBERT实现命名实体识别中,笔者介绍了ALBERT+Bi-LSTM模型在命名实体识别方面的应用.   在本文中,笔者将介绍如何实现ALBERT+Bi-LSTM+CRF ...

  3. NLP(二十六)限定领域的三元组抽取的一次尝试

      本文将会介绍笔者在2019语言与智能技术竞赛的三元组抽取比赛方面的一次尝试.由于该比赛早已结束,笔者当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集.但是,这并不耽误我们在这 ...

  4. NLP十大里程碑

    NLP十大里程碑 2.1 里程碑一:1985复杂特征集 复杂特征集(complex feature set)又叫做多重属性(multiple features)描写.语言学里,这种描写方法最早出现在语 ...

  5. 【转】基于VSM的命名实体识别、歧义消解和指代消解

    原文地址:http://blog.csdn.net/eastmount/article/details/48566671 版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步 ...

  6. Stanford CoreNLP 3.6.0 中文指代消解模块调用失败的解决方案

    当前中文指代消解领域比较活跃的研究者是Chen和Vincent Ng,这两个人近两年在AAAI2014, 2015发了一些相关的文章,研究领域跨越零指代.代词指代.名词指代等,方法也不是很复杂,集中于 ...

  7. NLP(二十一)人物关系抽取的一次实战

      去年,笔者写过一篇文章利用关系抽取构建知识图谱的一次尝试,试图用现在的深度学习办法去做开放领域的关系抽取,但是遗憾的是,目前在开放领域的关系抽取,还没有成熟的解决方案和模型.当时的文章仅作为笔者的 ...

  8. NLP(二十七)开放领域的三元组抽取的一次尝试

      当我写下这篇文章的时候,我的内心是激动的,这是因为,自从去年6月份写了文章利用关系抽取构建知识图谱的一次尝试 后,我就一直在试图寻找一种在开放领域能够进行三元组抽取的办法,也有很多读者问过我这方面 ...

  9. 前端开发中SEO的十二条总结

    一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...

  10. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. 那些年,想和你一起认识的SpringCloud Eureka

    前几天鲁班LB跟我说:你玩把游戏都要半个钟啦,为何不用这时间来看看书,如果涨工资还可以帮我买个皮肤. 面对如此合理的这需求,但我不以为然,事实上并不是我不想学习,而是 ↓ 实力不允许呀~ 直到有一天, ...

  2. GGPLOT2-plotly |让你的火山图“活”过来

    火山图(Volcano Plot)常用于展示基因表达差异的分布,横坐标常为Fold change(倍数),越偏离中心差异倍数越大;纵坐标为P值(P值),值越大差异越显着.原因得名也许的英文因为查询查询 ...

  3. C#使用OLEDB方式读取EXCEL,表的结构

    var tables = con.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { }); Ta ...

  4. ERROR 临时

    ERROR ITMS-4238: "Redundant Binary Upload. There already exists a binary upload with build vers ...

  5. 【部分转载】:【lower_bound、upperbound讲解、二分查找、最长上升子序列(LIS)、最长下降子序列模版】

    二分 lower_bound lower_bound()在一个区间内进行二分查找,返回第一个大于等于目标值的位置(地址) upper_bound upper_bound()与lower_bound() ...

  6. C# Winform 自定义控件——TextBox

    效果:   描述: 类似html标签里input标签里的placeHolder属性,控件继承TextBox,拥有一个描述提示信息的字段_txtPlaceHolder,重写了消息处理函数WndProc, ...

  7. awk文本处理

    一.前言 (一).awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理,数据可以来自标准输入.一个或多个文件,或其它命令的输出,它支持用户自定义函数和动态正则表达式等先进 ...

  8. CEPH RGW多 ZONE的配置

    相关的名称解释 Region :可以理解为区域,是基于地理位置的逻辑划分:如:华南,华北之类,包含多个region的Ceph集群必须指定一个master region,一个region可以包含一个或者 ...

  9. 【数据结构学习】关于HashMap的那些事儿

    涉及数据结构 红黑树 链表 哈希 从CRUD说起 预热知识: DEFAULT_INITIAL_CAPACITY = 1 << 4, HashMap默认容量为16(n << m意 ...

  10. RocketMq中网络通信之服务端

    一,Broker服务端入口(NettyServer端) 首先RocketMq网络通信采用的Netty通信.服务端主要集中在Broker中.我们先看一下Broker的启动类BrokerStartup 显 ...