提供者:刘晓
地址:http://ictclas.nlpir.org/
简介
PyNLPIR是NLPIR / ICTCLAS中文分词软件的Python包装器
NLPIR汉语分词系统(又名ICTCLAS2013),主要功能包括中文分词;词性标注;命名实体识别;用户词典功能;支持GBK编码、UTF8编码、BIG5编码。新增微博分词、新词发现与关键词提取。
本文主要介绍Python版本—PyNLPIR 。
PyNLPIR允许使用NLPIR轻松地对中文文本进行分类,NLPIR是最受人们关注的中文文本分析器之一。
安装
PyNLPIR被设计为在Python 2.7或3上运行。由于包含了NLPIR库文件,它只能在Windows,GNU / Linux或macOS上运行。
Pip 安装:
$ pip install pynlpir
$ pynlpir update
从源代码安装:
如果你想手动安装PyNLPIR:
- 从https://pypi.org/project/PyNLPIR/页面下载最新版本。
- 解压文件。
- 从目录PyNLPIR-XX中,运行python setup.py install
- 运行pynlpir 更新以下载最新的许可证文件。
这会在Python 站点包目录中安装PyNLPIR 。
安装开发版本:
PyNLPIR的代码托管在GitHub上。首先安装开发版,确保安装了Git 。然后运行:
$ git clone git://github.com/tsroten/pynlpir.git
$ pip install -e pynlpir
$ pynlpir update
这会将PyNLPIR目录链接到你的站点包 目录。pynlpir 更新将从NLPIR项目下载最新的许可证。
运行测试:
运行测试很容易。下载并解压缩PyNLPIR的源代码后,从PyNLPIR的源代码目录中运行以下代码:
$ python setup.py 测试
如果要使用不同版本的Python运行测试,请安装并运行tox:
$ pip安装tox
$ tox
使用教程
有两种使用PyNLPIR的方法:直接使用PyNLPIR提供的ctypes接口或使用PyNLPIR的辅助函数。该ctypes的界面更广泛,更严格。辅助函数很容易使用,但不提供对每个NLPIR函数的访问。也可以使用这两种方法的混合。首先,让我们看看辅助函数。
PyNLPIR助手函数
辅助函数位于PyNLPIR的init.py文件中,因此可以通过直接导入pynlpir来访问它们。
初始化NLPIR
导入PyNLPIR会自动加载NLPIR API库:
import pynlpir
一旦它被导入,调用open()来告诉NLPIR打开数据文件并初始化API。有关指定其他数据目录的信息,请参阅open()的文档。
pynlpir.open()
默认情况下,输入被假定为unicode或UTF-8编码。如果您想使用不同的编码(例如GBK或BIG5),请在调用open()时使用encoding关键字参数:
pynlpir.open(encoding='big5')
#Tip:无论指定什么编码,都可以将unicode字符串传递给 pynlpir函数。
PyNLPIR的辅助函数总是返回unicode字符串。
一旦初始化了NLPIR,就可以开始分割和分析文本。
细分文本:
让我们分段一个冗长的句子:
s = 'NLPIR分词系统前身为2000年发布的ICTCLAS词法分析系统,从2009年开始,为了和以前工作进行大的区隔,并推广NLPIR自然语言处理与信息检索共享平台,调整命名为NLPIR分词系统。'
pynlpir.segment(s)
# Sample output: [('NLPIR', 'noun'), ('分词', 'verb'), ('系统', 'noun'), ('前身', 'noun'), ('为', 'preposition'), ('2000年', 'time word'), ('发布', 'verb'), . . . ]
如果不想词性标注,segment()中的参数pos_tagging设置为False:
pynlpir.segment(s, pos_tagging=False)
# Sample output: ['NLPIR', '分词', '系统', '前身', '为', '2000年', '发布', . . . ]
还可以自定义如何显示词性标签。默认情况下,只使用最通用的词性名称部分,即父母(例如 ‘名词’,而不是’转录地名’)。如果希望使用最具体的演讲名称部分,即儿童,请将pos_names设置 为’child’:
pynlpir.segment(s, pos_names='child')
如果你想要了解关于词性标签的更多信息,你可以设置 pos_names为’all’,并且返回一个词性层次结构(例如, ‘noun:toponym:transcribed toponym’):
pynlpir.segment(s, pos_names='all')
默认情况下,词性标记以英语返回。如果您希望看到中文(例如’名词’而不是’名词’),请将pos_english设置为False:
pynlpir.segment(s, pos_english=False)
获取关键词:
另一个有用的函数是get_key_words():
pynlpir.get_key_words(s, weighted=True)
[('NLPIR', 2.08), ('系统', 1.74)]
get_key_words()分析给定的中文文本字符串并返回NLPIR认为关键字的单词。如果权重为 True,则关键字的权重也作为浮点数返回。
关闭API:
现在我们已经看了PyNLPIR辅助函数的简要介绍,让我们看看如何关闭API。
当使用PyNLPIR时,你可以通过调用close()来释放分配的内存 :
pynlpir.close()
ctypes NLPIR接口:
pynlpir.nlpir通过 ctypes提供对NLPIR’C函数的访问。你可以直接调用它们,而不用担心上面的辅助函数。这些函数的工作方式与C语言的对应函数几乎完全相同。
pynlpir.nlpir包含由NLPIR导出的调用其许多函数(例如编码和词性常量)所需的模块级常量。有关更多信息,请参阅 pynlpir.nlpir上的API页面。
以下各节不提供关于如何使用NLPIR的全面说明。NLPIR有它自己的文档。以下部分提供了有关如何开始使用PyNLPIR的基本信息,前提是您熟悉NLPIR。如果你不是,请务必查看下面链接的文档。
分词与词性标注示例:
需要注意的是,使用pynlpir的时候,首先要初始化,也就是需要先open(pynlpir.open()),当执行完成后需要对应的关闭(pynlpir.close())
代码示例:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import pynlpir
pynlpir.open()
s = '因为我比较懒,所以我就只是修改了这句话,代码还是原博客的'
segments = pynlpir.segment(s)
for segment in segments:
print segment[0], '\t', segment[1]
pynlpir.close()
运行结果:
因为 preposition
我 pronoun
比较 adverb
懒 adjective
, punctuation mark
所以 conjunction
我 pronoun
就 adverb
只 adverb
是 verb
修改 verb
了 particle
这 pronoun
句 classifier
话 noun
, punctuation mark
代码 noun
还 adverb
是 verb
原 distinguishing word
博客 noun
的 particle
Process finished with exit code 0
NLPIR还可以更加详细的输出词性信息,做如下修改:
segments = pynlpir.segment(s)
改为:
segments = pynlpir.segment(s,pos_names='all')
你可以在segment时同时配置如下参数,调整结果,请自行选择:
pos_names='all' / 'child' / 'parent' #默认是parent, 表示获取该词性的最顶级词性,child表示获取该词性的最具体的信息,all表示获取该词性相关的所有词性信息,相当于从其顶级词性到该词性的一条路径
pos_english=False # 词性标注结果以中文的形式显示
pos_tagging=False # 只做分词,而不显示词性
运行后可以得到更加详细的结果:
因为 preposition
我 pronoun:personal pronoun
比较 adverb
懒 adjective
, punctuation mark:comma
所以 conjunction
我 pronoun:personal pronoun
就 adverb
只 adverb
是 verb:verb 是
修改 verb
了 particle:particle 了/喽
这 pronoun:demonstrative pronoun:predicate demonstrative pronoun
句 classifier
话 noun
, punctuation mark:comma
代码 noun
还 adverb
是 verb:verb 是
原 distinguishing word
博客 noun:other proper noun
的 particle:particle 的/底
关键词提取代码:
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import pynlpir
pynlpir.open()
s = '因为我比较懒,所以我就只是修改了这句话,代码还是原博客的'
print '关键词测试:\n'
key_words = pynlpir.get_key_words(s, weighted=True)
for key_word in key_words:
print key_word[0], '\t', key_word[1]
pynlpir.close()
运行后提取出来的关键词应该是:
关键词测试:
修改 2.0
代码 2.0
博客 2.0
Process finished with exit code 0
本篇工具介绍参考:
https://blog.csdn.net/MebiuW/article/details/52232562?locationNum=12
http://www.shareditor.com/blogshow/?blogId=74