NLP入门学习3——句法分析(基于LTP4)

  • 0.简介
  • 1.LTP介绍
  • 2.安装
    • 2.1 模块安装
    • 2.2 模型下载
  • 3.使用
    • 3.1 分句
    • 3.2 分词
    • 3.3 词性标注
    • 3.4 命名实体识别
    • 3.5 依存句法分析
  • 4.说明
    • 4.1 词性标注
    • 4.2 依存句法分析

0.简介

本篇将介绍NLP中的句法结构分析,主要基于LTP工具实现,在过程中也会介绍LTP其他功能的使用。

1.LTP介绍

LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。
git:https://github.com/HIT-SCIR/ltp

2.安装

2.1 模块安装

旧版的ltp安装上有点问题,linux下执行pip,默认安装0.2.1版本。

pip install pyltp

windows下会存在问题,可参考https://github.com/HIT-SCIR/pyltp/issues/125
建议安装ltp4,一键安装:

pip install ltp

2.2 模型下载

官方git中有模型的下载链接,包括V1和V2两个版本,又包括base,small和tiny三个模型。
同时,官方git上给出了两个版本的各项指标。

3.使用

3.1 分句

from ltp import LTP
ltp = LTP('../ltp_model/base')   # 加载模型,路径是模型文件解压后的文件夹
# 后面的代码全都省略了模型加载这一步sents = ltp.sent_split(["吃葡萄不吐葡萄皮。不吃葡萄倒吐葡萄皮。"])
sents# [out]:   ['吃葡萄不吐葡萄皮。', '不吃葡萄倒吐葡萄皮。']

3.2 分词

segment, hidden = ltp.seg(["南京市长江大桥"])
segment# [out]:  [['南京市', '长江', '大桥']]

与其他分词工具类似,LTP也提供自定义词典的功能,可以指定加载自定义词典的路径。

ltp.init_dict(path="user_dict.txt", max_window=4)

也可以直接输入自定义的词汇,加入自定义之后的分词结果:

ltp.add_words(words=["市长", "江大桥"], max_window=4)segment, hidden = ltp.seg(["南京市长江大桥"])
segment# [out]:  [['南京', '市长', '江大桥']]

3.3 词性标注

pos = ltp.pos(hidden)
pos# [out]:  [['ns', 'ns', 'n']]    # 这个结果对应的是 [['南京市', '长江', '大桥']]

词性标注的结果与分词结果相对应,结果中的ns等,会在第4部分进行备注。

3.4 命名实体识别

ltp也可以完成命名实体识别的任务,不过对于复杂任务最好还是用更加复杂的模型去做,毕竟ltp的参数量在这摆着呢。

ner = ltp.ner(hidden)
ner# [out]: [[('Nh', 0, 0), ('Ns', 1, 1), ('Nh', 2, 2)]]for i in range(len(ner[0])):            # 因为只有一个句子,所以直接取了ner[0]print("{}:".format(ner[0][i][0]), segment[0][ner[0][i][1]: ner[0][i][2]+1])
# [out]:  Nh: ['南京']
#         Ns: ['市长']
#         Nh: ['江大桥']

唉,果然结果不是很准,南京给认成了人名。在词性标注方面,ltp划分的太细了,在实际应用的过程中其实只需要去判断动词名词之类就好,如果要对人名地点进行标注,最好还是用专门的NER模型去完成。

3.5 依存句法分析

ltp.add_words(words=["市长", "江大桥"], max_window=4)
segment, hidden = ltp.seg(["南京市长江大桥是南京市的市长"])
print(segment)
dep = ltp.dep(hidden)
dep# [out]: [['南京', '市长', '江大桥', '是', '南京市', '的', '市长']]
# [out]: [[(1, 2, 'ATT'),
#            (2, 3, 'ATT'),
#            (3, 4, 'SBV'),
#            (4, 0, 'HED'),
#            (5, 7, 'ATT'),
#            (6, 5, 'RAD'),
#            (7, 4, 'VOB')]]

举个栗子,ATT代表定中关系,也就是定语和中心词,南京是市长的定语,市长是江大桥的定语。这些关系有很多实际的应用,例如基于这些关系,在命名实体识别中,找到实体后,将实体的修饰词补全等等。

4.说明

4.1 词性标注

缩写 解释 举例
a adjective:形容词 美丽
b other noun-modifier:其他的修饰名词 大型, 西式
c conjunction:连词 和, 虽然
d adverb:副词
e exclamation:感叹词
g morpheme 茨, 甥
h prefix:前缀 阿, 伪
i idiom:成语 百花齐放
j abbreviation:缩写 公检法
k suffix:后缀 界, 率
m number:数字 一, 第一
n general noun:一般名词 苹果
nd direction noun:方向名词 右侧
nh person name:人名 杜甫, 汤姆
ni organization name:公司名 保险公司
nl location noun:地点名词 城郊
ns geographical name:地理名词 北京
nt temporal noun:时间名词 近日, 明代
nz other proper noun:其他名词 诺贝尔奖
o onomatopoeia:拟声词 哗啦
p preposition:介词 在, 把
q quantity:量词
r pronoun:代词 我们
u auxiliary:助词 的, 地
v verb:动词 跑, 学习
wp punctuation:标点 ,。!
ws foreign words:国外词 CPU
x non-lexeme:不构成词 萄, 翱

4.2 依存句法分析

关系类型 Tag Description Example
主谓关系 SBV subject-verb 我送她一束花 (我 <– 送)
动宾关系 VOB 直接宾语,verb-object 我送她一束花 (送 –> 花)
间宾关系 IOB 间接宾语,indirect-object 我送她一束花 (送 –> 她)
前置宾语 FOB 前置宾语,fronting-object 他什么书都读 (书 <– 读)
兼语 DBL double 他请我吃饭 (请 –> 我)
定中关系 ATT attribute 红苹果 (红 <– 苹果)
状中结构 ADV adverbial 非常美丽 (非常 <– 美丽)
动补结构 CMP complement 做完了作业 (做 –> 完)
并列关系 COO coordinate 大山和大海 (大山 –> 大海)
介宾关系 POB preposition-object 在贸易区内 (在 –> 内)
左附加关系 LAD left adjunct 大山和大海 (和 <– 大海)
右附加关系 RAD right adjunct 孩子们 (孩子 –> 们)
独立结构 IS independent structure 两个单句在结构上彼此独立
核心关系 HED head 指整个句子的核心

NLP入门学习3——句法分析(基于LTP4)相关推荐

  1. NLP入门之综述阅读-基于深度学习的自然语言处理研究综述

    NLP入门-综述阅读-[基于深度学习的自然语言处理研究综述] 基于深度学习的自然语言处理研究综述 摘要 0 引言 1 深度学习概述 卷积神经网络 递归神经网络 2 NLP应用研究进展 3 预训练语言模 ...

  2. NLP入门学习1——分词和词性标注

    NLP入门学习1--分词和词性标注 0.简介 1.概念和工具 1.1 词性标注 1.2 NLTK 1.3 jieba 1.4 LAC 2.代码实现 2.1 分词 2.1.1 使用nltk进行分词: 2 ...

  3. 【入门学习四】基于 FPGA 使用 Verilog 实现串口回传通信代码及原理讲解

    目录 一.相关知识 二.模块设计 三.代码设计 3.1 串口接收模块 3.2 控制模块 3.3 串口发送模块 四.FIFO 核引用 五.管脚定义及结果展示 上一篇博文:[入门学习三]基于 FPGA 使 ...

  4. C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)【1】

    C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)[1] 前言: 本笔记作为记录我从零开始学习C#的记录,为了unity的兴趣爱好自学一门C#,也算是寒假为自己充个电,希望这个寒假可以坚持下去 ...

  5. C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)【2】

    C#入门学习笔记(基于刘铁锰老师C#入门2014教学视频)[2] 初识类和名称空间 前言: 本笔记作为记录我从零开始学习C#的记录,为了unity的兴趣爱好自学一门C#,也算是寒假为自己充个电,希望这 ...

  6. 【入门学习二】基于 FPGA 使用 Verilog 实现蜂鸣器响动的代码及原理讲解

    目录 一.知识了解 二.模块设计 三.程序实现 四.管脚配置及结果展示 五.写给小白看的 上一篇博文:[入门学习一]基于 FPGA 使用 Verilog 实现按键点灯代码及原理讲解 功能描述:通过前面 ...

  7. 研一学习笔记-小白NLP入门学习笔记

    ⭐️我叫恒心,一名喜欢书写博客的研究生在读生. 原创不易~转载麻烦注明出处 1 前言 离研究生新生开学还有一个月左右的时间了欧,相信研0的小伙伴们,或多或少都会有这么一段迷茫期,如果你即将从事自然语言 ...

  8. 【组队学习】【29期】9. 基于transformers的自然语言处理(NLP)入门

    9. 基于transformers的自然语言处理(NLP)入门 航路开辟者:多多.erenup.张帆.张贤.李泺秋.蔡杰.hlzhang 领航员:张红旭.袁一涵 航海士:多多.张红旭.袁一涵.童鸣 基 ...

  9. 【组队学习】【28期】基于transformers的自然语言处理(NLP)入门

    基于transformers的自然语言处理(NLP)入门 论坛版块: http://datawhale.club/c/team-learning/39-category/39 开源内容: https: ...

最新文章

  1. 图论 ---- DAG删点+枚举+暴力+离线前缀异或和 J Red-Black Paths (2021 icpc网络赛第一场)
  2. LeetCode-2 Add Two Numbers
  3. java exe 返回值_java调用exe返回值
  4. JSON 是什么?它能带来什么?它和 XML 比较?
  5. python模拟并发是多线程_Python并发编程之多线程
  6. 两次被裁之后,我终于解决了数据库缓存一致性问题
  7. 后台代码之买票和查找核实航班的代码
  8. php学校整站,PHP适应式大学院校学校类网站整站源码(自适应手机移动端) dedecms内核...
  9. OpenLayers教程十五:多源数据加载之矢量地图
  10. 计算机无法装补丁,win7系统安装不了SP1补丁包怎么办 win7电脑SP1补丁包安装失败的解决方法...
  11. 记一个用PyPDF2裁剪pdf文件并用latex插入后出现大量空白的问题
  12. Java判定身份证号码的合法性
  13. 时序数据库在船舶风险管理领域的应用
  14. unity-IL2CPP工程打包失败记录
  15. IPv6实验NDP地址解析和DAD
  16. 学会这招,远离年金险99%的坑
  17. 中国石油大学(北京)-《外国文学作品选读》在线考试
  18. 近视?老花眼?恢复视力,就用这一招!
  19. HDU2159(多重背包)
  20. vue为什么要用脚手架?

热门文章

  1. Telerik Reporting Crack,节省 50% 的开发时间
  2. android手机设置查看电池耗电,安卓查看电池损耗代码【搞定指南】
  3. 计算机职业的霍兰德代码,霍兰德职业兴趣测验与职业代码.pdf
  4. python数据可视化神器,我就服它
  5. 程序员效率:整理常用的在线笔记软件
  6. 注册华为云用户: 访问官网 https://huaweicloud.com/ 注册华为云用户(需手机号验证) 登录并完成实名认证 为账号充值不少于100元(不用时可提现
  7. Win10系统邮件添加QQ邮件账户
  8. 立体视觉入门指南:对级约束与Fusiello法极线校正
  9. MySQL 部门员工工资表 综合练习
  10. SQL员工基本工资表题目及答案