赞
踩
中文NLP技术学习系列文章,将以NLTK
系统为主体框架,通过整合相关的开源系统来学习NLP
中涉及的所有模块。下面是我的PC环境:
本系列Demo地址:NLPDemos
NLTK,Nature Language Tool Kit
,即自然语言工具包,是一个免费、开源且使用Python程序构建的自然语言数据工作平台。NTLK系统提供了易于使用的界面和超过50种语料库、词汇资源,同时还包含一套分类、分词、词干、标注、分析和语义推理的基本框架,更为重要的是我们可以将目前比较好的NLP开源应用系统整合到NLTP平台来开发NLP项目。
NLTK平台特征:
- 跨平台。完全兼容Windows、Linux等系统;
- 跨语言。允许自由整合基于Java、C++、Python等语言实现的NLP系统;
- 预先包含绝大多数的NLP常用功能,即各类基于规则的或基于统计的词法、句法、语义等分析模块;
- 系统内存开销小;
(1) 安装python3.6.8
(2) 安装网络包
pip install Tornado
(3) 安装数学运算包
pip install numpy
pip install scipy
(1) 安装NLTK开发环境
pip install nltk
(2) 下载中文语料库
# NLTK_Download.py
import sys
import nltk
import importlib
# 加载sys库
importlib.reload(sys)
# 打开NLTK Downloader下载页面
nltk.download()
执行脚本python NLTK_Download.py
,看到如下界面:
NLTK平台提供了50种语料库、词汇库,但默认使用的都是英文语料库。由于我们研究的是中文NLP,因此不必要下载所有语料库,就我所知Sinica
是中央研究院提供的一个繁体中文语料库。
LTP(3.4.0),Language Technology Platform
,即语言技术平台,是哈尔滨工业大学开发的一整套中文语言处理系统,该平台基于C++实现,提供包括中文分词
、 词性标注
、命名实体识别
、依存句法分析
、语义角色标注
等丰富、高效、精确的自然语言处理技术,且支持可视化图形输出。另外,为了便于在python环境下使用,LTP还提供了它的Python封装pyltp(0.2.0),其依赖支持情况:
Py2.6 | Py2.6 | Py3.4 | Py3.5 | Py3.6 | conda-python | |
---|---|---|---|---|---|---|
Linux | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 |
Mac OS | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 |
Windows VS2015 | 不支持 | 不支持 | 不支持 | 支持 | 支持 | 不支持 |
Windows VS2017 | 不支持 | 不支持 | 不支持 | 支持 | 支持 | 不支持 |
(1) 安装pyltp
LTP官方提供了两种安装方式,即使用pip在线安装
和编译源码本地安装
,具体如下:
pip install pyltp
注:如果安装过程中出现Microsoft Visual Studio 14.0
错误,这里推荐下载pyltp-0.2.1-cp36-cp36m-win_amd64.whl,然后直接使用pip install pyltp-0.2.1-cp36-cp36m-win_amd64.whl安装即可。
$ git clone https://github.com/HIT-SCIR/pyltp
$ git submodule init
$ git submodule update
$ python setup.py install
(2) 下载LTP模型文件ltp_data_v3.4.0.zip,需要注意的是,在windows下 3.4.0 版本的语义角色标注模块模型
需要单独下载,即pisrl_win.model。
其中,cws.model
为中文分词模型;ner.model
为命名实体模型;parser.model
为句法解析模型;pisrl_win.model
为语义角色标注模型;pos.model
为词性标注模型。
在上一小节中,我们成功将NLP开源系统pyltp整合到NLTK平台,本节编写一个句法解析
示例来演示如何利用NLTK和pyltp研究NLP相关技术。关于什么是句法解析,这里我们放在后面文章中详讲,你只需要知道句法解析就是汉语中解析一个句子的语法结构。示例代码如下:
# Parser.py 句法解析示例 # Date:2019-05-07 9:43 # Author:Jiangdongguo from pyltp import * import nltk from scipy._lib.six import xrange sentence = "中国南部的湖南省,省会是长沙市,也是一座世界知名的城市。" segment_model_path = "data/ltp_models/cws.model" # 中文分词模型 postagger_model_path = "data/ltp_models/pos.model" # 词性标注模型 parser_model_path = "data/ltp_models/parser.model" # 句法分析模型 # 1. 中文分词 segmentor = Segmentor() segmentor.load(segment_model_path) segResult = segmentor.segment(sentence) tmp = " ".join(segResult) print(tmp) # 2. 词性标注 words = tmp.split(" ") postagger = Postagger() postagger.load(postagger_model_path) postags = postagger.postag(words) # 3. 句法分析 # 将词性标注和分词结果都加入到分析器进行句法解析 parser = Parser() parser.load(parser_model_path) arcs = parser.parse(words, postags) arcLen = len(arcs) conll = "" # 构建Conll标准的数据结构 for i in xrange(arcLen): if arcs[i].head == 0: arcs[i].relation = "ROOT" conll += "\t"+words[i]+"("+postags[i]+")"+"\t"+postags[i]+"\t"+str(arcs[i].head)+"\t"+arcs[i].relation+"\n" print(conll) # 使用nltk构建依存句法关系树 conllTree = nltk.DependencyGraph(conll) # 转换为依存句法图 tree = conllTree.tree() # 构建树结构 tree.draw() # 显示输出树
注:模型文件由于比较大,就没有上传,请下载后自行放在项目的data/ltp_models
目录下。
(venv) E:\ComPython\NLPDemos>python lesson01/Parser.py
中国 南部 的 湖南省 , 省会 是 长沙市 , 也 是 一 座 世界 知名 的 城市 。
中国(ns) ns 2 ATT
南部(nd) nd 4 ATT
的(u) u 2 RAD
湖南省(ns) ns 7 SBV
,(wp) wp 4 WP
省会(n) n 7 SBV
是(v) v 0 ROOT
长沙市(ns) ns 7 VOB
,(wp) wp 7 WP
也(d) d 11 ADV
是(v) v 7 COO
一(m) m 13 ATT
座(q) q 17 ATT
世界(n) n 15 SBV
知名(a) a 17 ATT
的(u) u 15 RAD
城市(n) n 11 VOB
。(wp) wp 7 WP
本文Demo:Lesson01
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。