中文NLP技术学习(1):搭建NLP开发环境

中文NLP技术学习系列文章,将以NLTK系统为主体框架,通过整合相关的开源系统来学习NLP中涉及的所有模块。下面是我的PC环境:

  • win10 64bits
  • python 3.6.8+pip+virtualenv
  • PyCharm 2018.3.5 (Professional Edition)

本系列Demo地址:NLPDemos

1. NLTK平台搭建

NLTKNature Language Tool Kit,即自然语言工具包,是一个免费、开源且使用Python程序构建的自然语言数据工作平台。NTLK系统提供了易于使用的界面和超过50种语料库、词汇资源,同时还包含一套分类、分词、词干、标注、分析和语义推理的基本框架,更为重要的是我们可以将目前比较好的NLP开源应用系统整合到NLTP平台来开发NLP项目。

NLTK平台特征:

  • 跨平台。完全兼容Windows、Linux等系统;
  • 跨语言。允许自由整合基于Java、C++、Python等语言实现的NLP系统;
  • 预先包含绝大多数的NLP常用功能,即各类基于规则的或基于统计的词法、句法、语义等分析模块;
  • 系统内存开销小;
1.1 安装Python3.6和第三方库

(1) 安装python3.6.8

(2) 安装网络包

pip install Tornado

(3) 安装数学运算包

pip install numpy

pip install scipy
1.2 搭建NLTK平台

(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是中央研究院提供的一个繁体中文语料库。

2. LTP环境搭建

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 不支持 不支持 不支持 支持 支持 不支持
2.1 pyltp开发环境搭建

(1) 安装pyltp

 LTP官方提供了两种安装方式,即使用pip在线安装编译源码本地安装,具体如下:

  • 使用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安装即可。

  • 从源代码安装(PC需安装git)
 $ 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为词性标注模型。

3. 示例演示

 在上一小节中,我们成功将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

发布了83 篇原创文章 · 获赞 293 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/AndrExpert/article/details/89915823
NLP