2019独角兽企业重金招聘Python工程师标准>>>

语言技术平台(LTP) 提供包括中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、 高效、精准的自然语言处理技术。经过 哈工大社会计算与信息检索研究中心 11 年的持续研发和推广,LTP 已经成为国内外最具影响力的中文处理基础平台,曾获 CoNLL 2009七国语言句法语义分析评测 总成绩第一名,中文信息学会钱伟长一等奖等重要成绩和荣誉。目前,LTP 已经被 500 多家国内外研究机构和企业使用,多家大企业和科研机构付费使用。

文档地址:语言技术平台(LTP)

以上文档介绍的已经比较清楚再此就不赘述了,下面以“总理那高大的形象总是浮现在我眼前”,“我把苹果吃了”,“苹果被我吃了”几种经典句型为例对提取句子主干进行分析。

①通过对“总理那高大的形象总是浮现在我眼前”进行分词、词性标注、依存句法分析得到如下结果:

分词结果:总理    那      高大    的      形象    总是    浮现    在      我      眼前  
词性分析结果:总理/n  那/r  高大/a  的/u  形象/n  总是/d  浮现/v  在/p  我/r  眼前/nt
依存句法分析结果:5:ATT   5:ATT   5:ATT   3:RAD   7:SBV   7:ADV   0:HED   7:CMP   10:ATT  8:POB

将以上结果绘制成语法树得出:

②通过对“我把苹果吃了”进行分词、词性标注、依存句法分析得到如下结果:

分词结果:你      把      苹果    吃      了
词性分析结果:你/r  把/p  苹果/n  吃/v  了/u
依存句法分析结果:4:SBV   4:ADV   2:POB   0:HED   4:RAD

将以上结果绘制成语法树得出:

③通过对“苹果被我吃了”进行分词、词性标注、依存句法分析得到如下结果:

分词结果:苹果    被      我      吃      了
词性分析结果:苹果/n  被/p  我/r  吃/v  了/u
依存句法分析结果:4:FOB   4:ADV   2:POB   0:HED   4:RAD

将以上结果绘制成语法树得出:

以上结果都是基于LTP分析得出,分词和词性分析也可以通过结巴分词实现,不过经本人测试效果不如LTP自带分词,可能因为语料和适配问题,大家可以尝试下。

现在已经得到语法树了,在汉语中句子主干一般为主谓宾结构,也可能部分缺失。通过LTP文档可以发现:

一般情况下LTP会选取谓语作为ROOT,SBV为主谓关系,VOB为动宾关系,FOB为前置宾语。可以把ROOT视作谓语,SBV作为主语,VOB或FOB作为宾语。当主语缺失或宾语缺失时,也可能表现为ADV-POB(状中-定宾)结构。

由于本人已把LTP作为服务,返回结果格式为:

{"code": 200,"result": [{"dep": "总理","gov": "形象","pos": "ATT"},{"dep": "那","gov": "形象","pos": "ATT"},{"dep": "高大","gov": "形象","pos": "ATT"},{"dep": "的","gov": "高大","pos": "RAD"},{"dep": "形象","gov": "浮现","pos": "SBV"},{"dep": "总是","gov": "浮现","pos": "ADV"},{"dep": "浮现","gov": "ROOT","pos": "HED"},{"dep": "在","gov": "浮现","pos": "CMP"},{"dep": "我","gov": "眼前","pos": "ATT"},{"dep": "眼前","gov": "在","pos": "POB"}],"ts": 1530862633
}

首先通过ROOT提取谓语结点,然后后再通过谓语获取主语和宾语:

class Sentence(object):def __init__(self, url):self.url = urldef getLTPAnalysis(self, sentence):data = bytes(json.dumps({'sentence': sentence}), encoding='utf8')headers = {'Content-Type': 'application/json'}req = urllib.request.Request(self.url, data, headers)resp = urllib.request.urlopen(req)respStr = resp.read()respJson = json.loads(respStr)return respJsondef getHED(self, words):root = Nonefor word in words:if word['gov'] == 'ROOT':root = word['dep']return rootdef getWord(self, words, HED, wType):sbv = Nonefor word in words:if word['pos'] == wType and word['gov'] == HED:sbv = word['dep']return sbvdef getFirstNotNone(self, array):for word in array:if word is not None:return wordreturn Nonedef getMain(self, sentence):re = ''result = self.getLTPAnalysis(sentence)if result['code'] == 200:array = result['result']if len(array) > 0:hed = self.getHED(array)if hed is not None:sbv = self.getWord(array, hed, 'SBV')  # 主语vob = self.getWord(array, hed, 'VOB')  # 宾语fob = self.getWord(array, hed, 'FOB')  # 后置宾语adv = self.getWord(array, hed, 'ADV')  # 定中pob = self.getWord(array, adv, 'POB')  # 介宾如果没有主语可做主语zhuWord = self.getFirstNotNone([sbv, pob])  # 最终主语weiWord = hed # 最终谓语binWord = self.getFirstNotNone([vob, fob, pob])  # 最终宾语re = '{}{}{}'.format(zhuWord, weiWord, binWord)return re.replace('None', '')

最终处理结果为:

由于本人刚接触自然语言处理,如果错误欢迎指正!

转载于:https://my.oschina.net/mutoushirana/blog/1841502

基于哈工大LTP句子主干提取相关推荐

  1. 哈工大LTP的依存分析

    # 可视化 网址:http://ltp.ai/demo.html LTP提供的模型有tiny.small和base.根据安装的LTP版本,模型的版本也需要匹配,否则可能会出现不兼容的情况 注:web ...

  2. 使用哈工大LTP做自然语言处理任务基础demo

    LTP4 文档:https://ltp.readthedocs.io/zh_CN/latest/ Github地址:https://github.com/HIT-SCIR/ltp 哈工大LTP官网模型 ...

  3. 使用ltp进行三元组提取的实战代码

      大家好,我是herosunly.985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用.曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名.拥有多项发明专利.对机器学 ...

  4. 开放信息抽取(OIE)系统(四)-- 第三代开放信息抽取系统(基于子句, clause-based, 句子重组、删减)

    开放信息抽取(OIE)系统(四)-- 第三代开放信息抽取系统(基于子句, clause-based, 句子重组.删减) 一.第三代开放信息抽取系统背景 ​ 基于子句的开放信息抽取系统与之前的信息抽取方 ...

  5. NLP之基于Transformer的句子翻译

    Transformer 文章目录 Transformer 1.理论 1.1 Model Structure 1.2 Multi-Head Attention & Scaled Dot-Prod ...

  6. 中文分词工具比较 6大中文分词器测试(哈工大LTP、中科院计算所NLPIR、清华大学THULAC和jieba、FoolNLTK、HanLP)

    中文分词工具比较 6大中文分词器测试(jieba.FoolNLTK.HanLP.THULAC.nlpir.ltp) 哈工大LTP.中科院计算所NLPIR.清华大学THULAC和jieba 个人接触的分 ...

  7. 基于PCL实现欧式聚类提取

    Lidar系列文章 传感器融合是将多个传感器采集的数据进行融合处理,以更好感知周围环境:这里首先介绍激光雷达的相关内容,包括激光雷达基本介绍(本节内容),激光点云数据处理方法(点云数据显示,点云分割, ...

  8. java骨架_基于Mat变换的骨架提取Java

    针对一副二值图像,区域内的点只有背景点(白点,0值)和前景点(黑点,1值).对于给定区域的像素点逐次应用两个基本步骤,以提取骨架: step1,如果一个像素点满足下列4个条件,那么将它标记为要删除的点 ...

  9. 哈工大ltp词性标注列表和ICTCLAS词性列表

    哈工大ltp词性列表 Tag Description Example a adjective 美丽 b other noun-modifier 大型, 西式 c conjunction 和, 虽然 d ...

最新文章

  1. mysql中修改字段的类型
  2. 对比:Linux和Windows系统线程间的区别
  3. ffmpeg 和 SDL 教程2:输出到屏幕
  4. 头条号个人中心登录_微信个人订阅号开通了创作领域的认证!这是要跟头条看齐了吗?...
  5. java 四字节uid,Java入门教程-序列化版本号serialVersionUID的作用
  6. 使用 ssh 命令来访问(登录/连接)远程服务器主机
  7. vue点击按钮上传图片_关于javascript:Vue-点击按钮提交表单
  8. Java装饰器模式详解
  9. 【LeetCode】【HOT】287. 寻找重复数(抽象环形链表)
  10. oracle中以dba_、user_、v$_、all_、session_、index_开头
  11. linux定时任务cron配置
  12. Managing the Activity Lifecycle
  13. 设计模式【转自JackFrost的博客】
  14. 驱动器阵列和容错方法(不同RAID的区别)
  15. macOS Big Sur 11.7.2 (20G1020) 正式版 ISO、PKG、DMG、IPSW 下载
  16. PHP面向对象编程的基本概念定义操作属性方法
  17. The following packages have unmet dependencies问题
  18. 【程序人生】机灵鹤六月份的月度总结
  19. XLS调色面板HSSFPalette
  20. Traefik 一个反向代理的新工具

热门文章

  1. 【互联网广告】移动互联网广告
  2. 什么是马甲包?有什么作用?
  3. 白帽SEO霸屏技术分享,霸屏并没有想象的那样神秘
  4. android手电筒
  5. 年底到了,消费者纷纷抢购,特斯拉成为汽车市场的超级网红
  6. Matlab画散点图并拟合(使用cftool函数拟合)
  7. linux学习笔记:四、Linux系统目录结构简述,一级目录
  8. 00无人机简介以及课程介绍2020-07-03
  9. 困扰的Byte、bit 、和16进制之间的关系
  10. Jmeter5.x线程组和Sampler基础组件-第一个测试计划