NLP入门学习3——句法分析(基于LTP4)
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 pyltpwindows下会存在问题,可参考https://github.com/HIT-SCIR/pyltp/issues/125
建议安装ltp4,一键安装:
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 依存句法分析
| 主谓关系 | 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)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 设计模式-开宝箱
- 下一篇: 每日一题_447.回旋镖的数量