pynlpir

提供者:刘晓
地址: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