博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python NLPIR(中科院汉语分词系统)的使用 十五分钟快速入门与完全掌握
阅读量:5294 次
发布时间:2019-06-14

本文共 4077 字,大约阅读时间需要 13 分钟。

前叙

博主写这篇文章使用了八十分钟,阅读需要十五分钟,读完之后你将会学会在Python中使用NLPIR2016.如果你花费更多的时间练习后半部分的例子,你将能够在一天内学会在Python中使用NLPIR2016的全部所需知识

如果你想要获取更详细的API翻译,你需要进一步学习ctypes,附赠一篇关于API翻译,虽然是java语言的,但是NLPIR的接口翻译都是一样的
我决定上传一下有关NLP的博客中的源码:

如何使用接口

将打包好的[组合包]下所有内容拖入你的项目,然后开始在你的py文件中通过引用nlpir中的方法使用NLPIR2016

#如果想要使用NLPIR需要的基本的配置from nlpir import *# 在引用nlpir之后就可以按照引用其他py文件的一般方法使用NLPIR2016from ctypes import *import sysreload(sys)sys.setdefaultencoding('utf-8')# 在Python2.x中需要配置文件的默认编码这样可以避免很多编码问题from os import pathd = path.dirname(__file__)# 获取当前路径,在后续的许多代码中可能需要使用该路径text_path = 'txt/lztest.txt' #设置要分析的文本路径stopwords_path = 'stopwords\stopwords1893.txt' # 停用词词表text = open(path.join(d, text_path)).read()txt = seg(text)seg_list =[]for t in txt:    seg_list.append(t[0].encode('utf-8'))    # seg_list += ' '# 使用NLPIR进行中文分词print seg_list# 直接输出 seg_list会出现乱码for j in seg_list:    print j# 显示效果如下图

seg分词后的效果

用户自定义词库的两种方式

1. 修改NLPIR的词库

想要修改NLPIR的词库你可以阅读官方的文档,其方法为”汉语分词20140928\importuserdict\Readme.txt”

下面为其中内容:

采用附件的小工具,可以实现脱机导入用户词典;具体步骤如下:1.与分词Data文件夹同级建立 bin目录,下面建立二级目录ICTCLAS2014;2.将附件的内容解压缩后放在ICTCLAS2014下面;3.编辑bin/ICTCLAS2014下面的userdic.txt,这里放置用户词典与标注;4.执行bin/ICTCLAS2014的批处理文件。即可导入用户词典到Data目录下的field.pdat field.pos。5.30万词条会划分更多的时间,可能需要2小时左右。

2.在代码中动态引用与删除用户自定义词库

#下面代码中loadFun的参数c_int,c_uint等为ctype类型,在下文中我会有部分介绍,其足以满足一般的使用,但是想要深入学习,你需要自己学习该部分# nlpir的源代码ImportUserDict = loadFun('NLPIR_ImportUserDict',c_uint, [c_char_p])# 从txt文件中导入用户词典AddUserWord = loadFun('NLPIR_AddUserWord', c_int, [c_char_p])# 添加用户自定义词语SaveTheUsrDic = loadFun('NLPIR_SaveTheUsrDic', c_int, None)# 将用户词典保存到硬盘DelUsrWord = loadFun('NLPIR_DelUsrWord',c_int, [c_char_p])# 删除用户的自定义词语# 例子AddUserWord('龙族')AddUserWord('路明非')AddUserWord('大和炮')AddUserWord('竞技类')DelUsrWord('竞技类')# 注意在NLPIR的默认分词格式中会识别汉语名字,但是测试发现:即使在某个句子中,将一个名字,比如'路明非'分词成功了,但是在其他句子中并不一定能够正确分词,如果你想更好地使用分词功能,可以和下一个部分中的提取新词配合使用

提取新词与关键字

text_path = 'txt/lztest.txt' #设置要分析的文本路径text = open(path.join(d, text_path)).read()txt = seg(text)kw_list =[]seg_list =[]# 获得新词,第二个参数控制新词的个数,排名按照TF-IDF(term frequency–inverse document frequency排序# 该功能可以和AddUserWord()方法配合使用,以更好地获取分词效果strs1 = GetNewWords(text,c_int(10),[c_char_p, c_int, c_bool])print strs1# 获得新词(从txt文件中),第二个参数控制新词的个数,排名按照TF-IDF(term frequency–inverse document frequency排序# strs10 = GetFileNewWords(text,c_int(10),[c_char_p, c_int, c_bool])# print strs10# WindowsError: exception: access violation reading 0x0000000000000000# 获得关键词,第二个参数控制新词的个数,排名按照TF-IDF(term frequency–inverse document frequency排序strs2= GetKeyWords(text,c_int(10),[c_char_p, c_int, c_bool])print strs2

演示效果如下:

Python中使用NLPIR2016获取新词与提取关键字
其中第一部分(比如”富山雅史”)为词语,第二部分(n_new为新词)为词性,第三部分为权重(TF*IDF)

使用停用词的实例

# - * - coding: utf - 8 -*-## 作者:田丰(FontTian)# 创建时间:'2017/5/31'# 邮箱:fonttian@163.com# CSDN:http://blog.csdn.net/fontthronefrom os import pathfrom nlpir import *from scipy.misc import imreadimport matplotlib.pyplot as pltfrom wordcloud import WordCloud, ImageColorGeneratorfrom ctypes import *import sysreload(sys)sys.setdefaultencoding('utf-8')d = path.dirname(__file__)# 添加用户自定义词语AddUserWord('龙族')AddUserWord('路明非')AddUserWord('大和炮')AddUserWord('竞技类')text_path = 'txt/lztest.txt' #设置要分析的文本路径stopwords_path = 'stopwords\stopwords1893.txt' # 停用词词表text = open(path.join(d, text_path)).read()txt = seg(text)seg_list =[]for t in txt:    seg_list.append(t[0].encode('utf-8'))    # seg_list += ' '# 使用NLPIR进行中文分词# 去除停用词def NLPIRclearText(text):    mywordlist = []    liststr = "/ ".join(seg_list)    f_stop = open(stopwords_path)    try:        f_stop_text = f_stop.read()        f_stop_text = unicode(f_stop_text, 'utf-8')    finally:        f_stop.close()    f_stop_seg_list = f_stop_text.split('\n')    for myword in liststr.split('/'):        if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:            mywordlist.append(myword)    return ''.join(mywordlist)# 去除完停用词的文本s = NLPIRclearText(seg_list)print s

结果如下:

Python使用NLPIR2016进行中文分词

使用中的可能会遇见的一些问题

  1. ctype的问题,想要更好地在Python中使用NLPIR2016,你需要了解该部分
  2. 控制台输出utf-8编码格式中文显示乱码,这个在windows中比较常见,原因是控制台的默认中文编码为gbk或者或者其他格式
  3. 进一步掌握文章中未介绍的部分方法,你可以直接浏览nlpir.py文件或者参考这篇文章:
  4. 在Python3中使用NLPIR2016,这个你只需要参考官网的文档即可,这个我就不再做过介绍了

转载于:https://www.cnblogs.com/fonttian/p/9162828.html

你可能感兴趣的文章
透视ERP会计科目 (转自SAP屠夫的博客)
查看>>
0049 MyBatis关联映射--一对一关系
查看>>
解决ultravnc在win2008 R2下CTRL+ALT+DELETEA组合键发送失败的问题
查看>>
Ceph相关
查看>>
大小写转换
查看>>
AJAX
查看>>
maven项目启动报错ContainerBase.addChild: start
查看>>
笔记2
查看>>
HCNP学习笔记之ICMP协议与ping原理以及用Python实现ping
查看>>
字符函数
查看>>
身份证号码验证 类
查看>>
oracle listagg函数、lag函数、lead函数 实例
查看>>
mongodb测试类
查看>>
jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space
查看>>
ExtAspNet v3.1.8 发布了
查看>>
(分享)C# 绘制统计图(柱状图, 折线图, 扇形图)
查看>>
html学习笔记二
查看>>
CentOS 6.6安装配置CVS
查看>>
测试工具文件4. 数据分析——定义analyseXML
查看>>
【转载】递归算法详解
查看>>