最近拜读郑捷的《NLP汉语自然语言处理原理与实践》,其中涉及到中文文本处理的工具模块,并重点介绍了哈工大的FTP工具包与斯坦福的stanfordNLP工具包。
这两个工具包包含:中文分词、词性标注、命名实体识别、句法依存分析等功能,在处理中文文本方面直接调用的话非常方便。
但是该书的编程环境是windows10+python2.7,因此书中许多代码以及工具包的安装方式移植到笔者的电脑(windows10 + python3.5)总是莫名其妙地出现一些问题,因而我又大费周章地从网上找了许多资料来填坑。
果然,尽信书不如无书。
书中安装FLP3.3版本使用指令pip install pyltp,但是一直报错显示:
后来发现是版本问题(pyltp最新版本存在兼容性问题)
改用以下方式安装
set STATICBUILD=true && pip install pyltp==0.1.9.1
(set STATICBUILD=true安装依赖包)
安装成功。
值得一提的是,pyltp是用C++开发的,因此在安装pyltp之前需要先安装microsoft visual studio C++编译器 ,本文下载的2017社区版:
下载 | IDE、Code 和 Team Foundation Server | Visual Studio www.visualstudio.com
详情参考:
Python3.6.3中pyltp的安装错误总结 – CSDN博客 blog.csdn.net
安装成功之后,还需要下载相应的模型文件。
下载链接:
这里安装的pyltp版本:0.1.9,对应LTP版本: 3.3.2, 对应模型版本:3.3.1
下载模型文件之后,将模型文件ltp_data_v3.3.1.zip解压到本地文件中:
其中cws.model是中文分词模块,pos.model是词性标注模块,parser.model是句法解析模块。
下面开始尝试用pyltp来处理中文文本吧!
新建一个pyltpDemo.py文件中:
其中model_path是cws.model的本地路径。
分词的结果在输出的第二行:
可以看到这里面的分词粒度过细,“解空间树”、“深度优先”、“解空间”等词语被分开了,这里人为替换一下:
分词的结果为:
可以看到专属名词被保留了
接下来进行词性标注的工作:
这里需要注意的是:
(1)词性标注需要实现对文本进行分词处理,生成词语列表,再进行词性标注;
(2)导入Postagger包;
(3)导入pos.model的本文路径。
最终生成的词性标注结果:
接下来就是stanfordCoreNLP接口的使用了,同样的stanfordCoreNLP是基于java开发的,因此在安装stanfordCoreNLP之前,先安装JDK,而且JDK版本必须是1.8+。JDK的安装这里就不详述了,网上的教程实在是太多了,无非是官网下载、安装、环境变量这些事儿。
剩下的就是安装stanfordCoreNLP:
这里我选择了一个超级简洁的法子,不同于书中的调用JAVA命令行,也不同于NLTK包中的stanford包,而是直接安装stanfordCoreNLP:
pip install stanfordcorenlp
这个是使用python对stanfordCoreNLP的封装,可以直接安装stanfordCoreNLP并可以直接在python中调用。
Lynten/stanford-corenlp github.com
当然了这里需要去stanfordNLP官网去下载Stanford CoreNLP的模型文件以及中文处理的模型文件。下载地址在上面的链接里都可以找到。
将Stanford CoreNLP压缩包解压到本地:
然后将中文处理的模型文件放到上面的文件夹中即可。
安装完毕之后,用python调用一下看看:
这里StanfordCoreNLP需要输入两个变量:
第一个是Stanford CoreNLP解压文件夹的路径;
第二个lang=”zh”,表示中文的意思。
可以看到一共有 分词(word_tokenize)、词性标注(pos_tag)、命名实体识别(ner)、句法解析(parse)、句法依存分析(dependency_parse)这几个较为常用的功能。
最终的结果: