spaCy依存分析辅助多轮对话

昝老师前两天给了个很好的思路,就是我在对句子进行分词时,可以用依存分析去理解句子中单词之间的关系。比如:

吉尔嘲笑约翰

这句话中,“吉尔”是笑的主体,“约翰”是被嘲笑的对象。那么我们怎样得到这样的结果呢?

1 相关规定

还没有安装spaCy的可以参考我的这篇文章:安装spaCy(最简单的教程)

1.1 支配词、从属词

句子中词与词存在主从关系,我们用一个词A修饰另一个词B,那么A就是从属词B支配词,箭头指向为:支配词→从属词

1.2 计算机表示

在进行依存关系分析时,得到的结果往往是以动词为根(ROOT)的树形数据结构。依存关系是二元关系,除了ROOT外,句子中的所有单词必须依存于其他单词。(总之就是很乱)
在对话中,我们往往需要重点关注带有subjobj的,可以去我给的参考 1去翻。
(仔细看看的话还觉得挺好玩的,居然能分的这么细,跪了啊Orz)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2 spaCy实现

spaCy能做什么?简单概括以下三点对我有用的(我能听懂的T_T)2

  • 词性标注
  • 依存句法分析
  • 命名实体识别

我的任务是提取出一个句子中的subj短语和obj短语,那我就可以这样写代码:
(多提一嘴,spaCy可以分离出短语,算是意外收获)

import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("The quick brown fox jumps over the lazy dog")
subj_list = ["nsubj", "nsubjpass", "csubj"]
obj_list = ["dobj", "iobj", "pobj"]
for chunk in doc.noun_chunks:
    if chunk.root.dep_ in subj_list:
        print("subj: ", chunk.text)
    if chunk.root.dep_ in obj_list:
        print("obj: ", chunk.text)

输出结果是:

subj:  The quick brown fox
obj:  the lazy dog

3 参考

[1] Stanford CoreNLP 50来种依存关系(Stanford typed dependencies)
[2] 神圣的NLP!一文理解词性标注、依存分析和命名实体识别任务


  1. 1 ↩︎

  2. 2 ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值