nlp--基于SpaCy和Networkx的依存树和最短依存路径分析

  • 一、使用SpaCy分析例句
    • 使用SpaCy判断句子的依存关系
    • 使用displacy来绘制依存句法树
    • 打印最短依存路径
  • 二、Harry Potter 文本的主谓宾分析
    • 实验数据预处理
    • 分析Harry作为主语或宾语出现 (在所有句型中)
    • 分析Harry作为主语或宾语出现 (在完整的“主谓宾”结构的句子中)
  • 三、参考文件

一、使用SpaCy分析例句

本次实验中,选择用来进行依存关系分析的句子是:
Jingbo who dresses a green t-shirt was instructed by Chen.
在实验时输入这个句子,就可以分析词和词之间的语法关系和依存关系,还 可 以 打印两个词之间的最短依存路径,绘制整个句子的依存句法树。

使用SpaCy判断句子的依存关系

其中token.head.text表示当前从属词(dependent)的支配词(head),token.text表示当前的从属词,token.dep_表示这两个词之间的依存关系(dependencerelation)。


使用displacy来绘制依存句法树

例句“Jingbo who dresses a green t-shirt was instructed by Chen.”绘制得到的结果保存在网址http://localhost:5000中

注意:en_core_web_sm的版本不同,依存句法树的结果也可能不同,本次实验是2.4版本显示的结果。

打印最短依存路径

以“Jingbo“和”Chen“之间的最短路径为例

可以得到这两个单词之间的最短依存路径为Jingbo-instructed-by-Chen,最短路径长度为3

完整代码如下:
如果nlp=spacy.load(“en_core_web_sm”)出现报错
参考解决NLP任务中安装spacy的问题

二、Harry Potter 文本的主谓宾分析

实验数据预处理

下载txt文本Harry Potter and the Sorcerer’s Stone
保存为Harry_Potter_1.txt
进入终端

grep --color -E "\bHarry\b" Harry_Potter_1.txt

说明:
grep:搜索
–color:用颜色展示出来
-E:使用正则表达式匹配
“\bHarry\b”:正则表达式
Harry_Potter_1.txt:在之前下载的哈利波特与魔法石文本

grep --color -E "\bHarry\b" Harry_Potter_1.txt |wc
grep --color -E "\bHarry\b" Harry_Potter_1.txt > Harry_Potter_Sentence.txt

说明:
|:用来连接命令
wc: (wordcount)显示三个信息(文件行数 单词数 字节数)
>:生成新文件
Harry_Potter_Sentence.txt:新文件名

分析Harry作为主语或宾语出现 (在所有句型中)

#sent_token.py
import spacy
import networkx as nx
import renlp=spacy.load('en_core_web_sm')
doc=nlp('''此处复制生成的Harry_Potter_Sentence.txt文件的内容''')pattern1=re.compile(r'.*subj')
pattern2=re.compile(r'.*obj')
countm=0
countn=0
subj=[]
obj=[]
subjword={}
objword={}for sent in doc.sents:#print("\nSentence is: ",sent)for token in nlp(str(sent)):#print("Tokens are: ",token.text)if 'Harry' == token.text:if(pattern1.match(token.dep_)!=None):countm+=1print((token.head.text,token.text,token.dep_))if token.dep_ not in subj:subj.append(token.dep_)if token.head.text in subjword.keys():subjword[token.head.text]+=1else:subjword.update({token.head.text:1})elif(pattern2.match(token.dep_)!=None):countn+=1print((token.head.text,token.text,token.dep_))if token.dep_ not in obj:obj.append(token.dep_)if token.head.text in objword.keys():objword[token.head.text]+=1else:objword.update({token.head.text:1})print('\n\n')
print('subj count:',countm,' ; obj count:',countn)  #统计Harry作为主语的次数,Harry作为宾语的次数
print('\n\n')
print('Harry subj type:',subj)  #Harry作为主语的情形
print('Harry obj type:',obj)  #Harry作为宾语的情形
print('\n\n')
subjword2 = sorted(subjword.items(), key=lambda subjword:subjword[1],reverse = True)
print('Harry subj word:',subjword2)  #Harry作为主语时,该句中与之直接相关的另一单词
print('\n\n')
objword2 = sorted(objword.items(), key=lambda objword:objword[1],reverse = True)
print('Harry obj word:',objword2)   #Harry作为宾语时,该句中与之直接相关的另一单词
python3 sent_token.py


说明:
nsubj : nominal subject,名词主语
nsubjpass: passive nominal subject,被动的名词主语

dobj : direct object直接宾语
pobj : object of a preposition,介词的宾语

分析Harry作为主语或宾语出现 (在完整的“主谓宾”结构的句子中)

#Harry_subj_obj.py
import spacy
import networkx as nx
import renlp=spacy.load('en_core_web_sm')
f=open('Harry_Potter_1.txt')countm=0 #Harry appears as a subject
countn=0 #Harry appears as an objectfor paragraph in f:paragraph=paragraph.replace('Harry Potter','Harry')doc=nlp(paragraph)  #每一段落for sent in doc.sents:words_pos={} #一个字典,保存该句子中每个单词的词性Harry_pos=''for token in nlp(str(sent)):  #每一单词words_pos[token.dep_]=token.textif 'Harry' == token.text:Harry_pos=token.dep_if 'Harry' in words_pos.values():if Harry_pos=='nsubj': #Harry appears as a subjectif 'dobj' in words_pos.keys():countm+=1print((words_pos['nsubj'],words_pos['ROOT'],words_pos['dobj']),Harry_pos)#else句子结构不是完整的主谓宾结构                elif Harry_pos=='dobj': #Harry appears as an objectif 'nsubj' in words_pos.keys():countn+=1print((words_pos['nsubj'],words_pos['ROOT'],words_pos['dobj']),Harry_pos)#else句子结构不是完整的主谓宾结构#Harry不是作为nsubj或dobj出现print('\nIn the [subject predicate object] structure,')
print('The number of times Harry appears as a subject :',countm,'\nThe number of times Harry appears as an object:',countn)



当句子是完整的主谓宾结构时,粗略统计,Harry是主语的有239句,Harry是宾语的有49句。相应的[subject predicate object]也已经展示出来。

三、参考文件

实验指导书基于SpaCy和Networkx的依存树和最短依存路径分析
实验数据Harry Potter文本数据链接
解决"en_core_web_sm"报错解决NLP任务中安装spacy的问题

nlp--基于SpaCy和Networkx的依存树和最短依存路径分析相关推荐

  1. 依存语法:从短语结构树转换为依存树

     与短语结构语法比较起来,依存语法没有词组这个层次,每一个结点都与句子中的单词相对应,它能直接处理句子中词与词之间的关系,而结点数目大大减少了,便于直接标注词性,具有简明清晰的长处.特别在语料库文 ...

  2. 中文-自然语言处理-开源工具-流行度调查+句法依存树可视化调研

    为了找到最流行的中文自然语言处理工具,我进行了一番调研. 开源工具包 百度返回网页数 NLTK 4470000 LTP 哈工大 542,000 OpenNLP 249,000 ICTCLAS 919, ...

  3. NLP词性分析,实体分析,句法树构造(依存句法树分析)

    NLTK 使用nltk库进行英文文本处理 英文文本分词处理(NLTK) 分词.取出标点符号 由于英语的句子基本上就是由标点符号.空格和词构成,那么只要根据空格和标点符号将词语分割成数组即可,所以相对来 ...

  4. NLP语义技术演进:从DP依存句法到SDP依存语义再到AMR抽象语义分析概述与开源实现...

    每天给你送来NLP技术干货! 作者:刘焕勇 来自:老刘说NLP 在上一篇文章<事件Schema生成必读:一种基于AMR与聚类.映射的事件模式生成框架浅析>中,我们讲到了AMR以及依存句法分 ...

  5. 基于spaCy的领域命名实体识别

    基于spaCy的命名实体识别 ----以"大屠杀"领域命名实体识别研究为例 作者: Dr. W.J.B. Mattingly Postdoctoral Fellow at the ...

  6. 基于spaCy实现pytextrank对英文短语抽取

    1 参考学习网站 # 中文的博客 https://www.5axxw.com/wiki/content/475klz ​ # pytextrank的简单使用 https://spacy.io/univ ...

  7. 【依存树】短语结构树转化依存树

    参考:https://www.jianshu.com/p/073f162cbb28 -------------------------------------------------------- 应 ...

  8. 【CVPR2020-中科院-腾讯优图】基于注意力卷积二叉神经树的细粒度视觉分类

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 本文由腾讯优图实验室和中科院软件所联合提出.细粒度视觉分类(Fine-Graine ...

  9. ML之NB:(NLP)基于sklearn库利用不同语种数据集训练NB(朴素贝叶斯)算法,对新语种进行语种检测

    ML之NB:(NLP)基于sklearn库利用不同语种数据集训练NB(朴素贝叶斯)算法,对新语种进行语种检测 目录 输出结果 训练数据集 设计思路 核心代码 输出结果 测试01:I love you ...

最新文章

  1. R语言dplyr包nth、first、last函数获取向量特定值实战
  2. LeetCode 动态规划(Dynamic programming)系列题目--C++,Python解法
  3. 整合后台服务和驱动代码注入
  4. python策略模式包含角色_详解Python设计模式之策略模式
  5. 如何使用开源工具制作YouTube系列
  6. 【APIO2009-3】抢掠计划
  7. 计算机网络---TCP/UDP协议(一)
  8. Python pickle模块学习(超级详细)
  9. Keytool 简述
  10. 图解通信原理与案例分析-1:开篇-通信系统大全与快速概览
  11. Navicat Premium 15安装教程
  12. centos 设置新用户并设置使用sudo时,无需输入密码
  13. 学习HM微博项目第2天
  14. 计算机软件基础知识课件,计算机硬件与软件基础知识课件.ppt
  15. 梦中不知岁已老,朦胧人间谁登高
  16. php中parse error,PHP异常Parse error: syntax error…错误解决方法
  17. 基于数据统计的随机组建试卷的算法研究
  18. python中类方法和静态方法的区别_python中静态方法和类方法的区别
  19. 是否接受微软作为开源社区的一员?
  20. 找实习以及面试期间机器学习基础总结

热门文章

  1. ISO PAS 21448 SOTIF(预期功能安全)笔记(二)
  2. 基于RFID技术的汽车总装制造执行系统应用架构
  3. AI时代来了,看李开复如何为子女选择未来!
  4. 如何使用Carthage
  5. phpstorm ide在laravel6框架中引入代码提示和代码补全
  6. [老齐的求职攻略] 第六章 试用期生存指南
  7. 疫情变局下,金融科技助力数字文明转型升级
  8. SQLMap 扫描利用SQL注入
  9. 看懂任正非访谈:真正的挑战,其实是我们的使命
  10. mac-python3-matplotlib绘图无法显示中文的解决