nlp--基于SpaCy和Networkx的依存树和最短依存路径分析
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的依存树和最短依存路径分析相关推荐
- 依存语法:从短语结构树转换为依存树
与短语结构语法比较起来,依存语法没有词组这个层次,每一个结点都与句子中的单词相对应,它能直接处理句子中词与词之间的关系,而结点数目大大减少了,便于直接标注词性,具有简明清晰的长处.特别在语料库文 ...
- 中文-自然语言处理-开源工具-流行度调查+句法依存树可视化调研
为了找到最流行的中文自然语言处理工具,我进行了一番调研. 开源工具包 百度返回网页数 NLTK 4470000 LTP 哈工大 542,000 OpenNLP 249,000 ICTCLAS 919, ...
- NLP词性分析,实体分析,句法树构造(依存句法树分析)
NLTK 使用nltk库进行英文文本处理 英文文本分词处理(NLTK) 分词.取出标点符号 由于英语的句子基本上就是由标点符号.空格和词构成,那么只要根据空格和标点符号将词语分割成数组即可,所以相对来 ...
- NLP语义技术演进:从DP依存句法到SDP依存语义再到AMR抽象语义分析概述与开源实现...
每天给你送来NLP技术干货! 作者:刘焕勇 来自:老刘说NLP 在上一篇文章<事件Schema生成必读:一种基于AMR与聚类.映射的事件模式生成框架浅析>中,我们讲到了AMR以及依存句法分 ...
- 基于spaCy的领域命名实体识别
基于spaCy的命名实体识别 ----以"大屠杀"领域命名实体识别研究为例 作者: Dr. W.J.B. Mattingly Postdoctoral Fellow at the ...
- 基于spaCy实现pytextrank对英文短语抽取
1 参考学习网站 # 中文的博客 https://www.5axxw.com/wiki/content/475klz # pytextrank的简单使用 https://spacy.io/univ ...
- 【依存树】短语结构树转化依存树
参考:https://www.jianshu.com/p/073f162cbb28 -------------------------------------------------------- 应 ...
- 【CVPR2020-中科院-腾讯优图】基于注意力卷积二叉神经树的细粒度视觉分类
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 本文由腾讯优图实验室和中科院软件所联合提出.细粒度视觉分类(Fine-Graine ...
- ML之NB:(NLP)基于sklearn库利用不同语种数据集训练NB(朴素贝叶斯)算法,对新语种进行语种检测
ML之NB:(NLP)基于sklearn库利用不同语种数据集训练NB(朴素贝叶斯)算法,对新语种进行语种检测 目录 输出结果 训练数据集 设计思路 核心代码 输出结果 测试01:I love you ...
最新文章
- R语言dplyr包nth、first、last函数获取向量特定值实战
- LeetCode 动态规划(Dynamic programming)系列题目--C++,Python解法
- 整合后台服务和驱动代码注入
- python策略模式包含角色_详解Python设计模式之策略模式
- 如何使用开源工具制作YouTube系列
- 【APIO2009-3】抢掠计划
- 计算机网络---TCP/UDP协议(一)
- Python pickle模块学习(超级详细)
- Keytool 简述
- 图解通信原理与案例分析-1:开篇-通信系统大全与快速概览
- Navicat Premium 15安装教程
- centos 设置新用户并设置使用sudo时,无需输入密码
- 学习HM微博项目第2天
- 计算机软件基础知识课件,计算机硬件与软件基础知识课件.ppt
- 梦中不知岁已老,朦胧人间谁登高
- php中parse error,PHP异常Parse error: syntax error…错误解决方法
- 基于数据统计的随机组建试卷的算法研究
- python中类方法和静态方法的区别_python中静态方法和类方法的区别
- 是否接受微软作为开源社区的一员?
- 找实习以及面试期间机器学习基础总结