现有的分词工具包概览
现有的分词工具包种类繁多,我选取了几个比较常见的开源中文分词工具包进行了简单的调查。有感兴趣的同学可以通过下表中的Giuthub链接进行详细地了解。
常见开源的中文分词工具
接下来,我具体介绍Jieba和IK Analyzer的使用。
一、jieba的分词使用
1、安装jieba
安装jieba
2、三种分词模式及比较
编写代码对 “古蜀青铜艺术与蜀绣非遗技艺结合创新的探讨——现代首饰设计” 进行分词
import jieba
seg_list1 = jieba.cut("古蜀青铜艺术与蜀绣非遗技艺结合创新的探讨——现代首饰设计", cut_all=True) # 全模式
seg_list2 = jieba.cut("古蜀青铜艺术与蜀绣非遗技艺结合创新的探讨——现代首饰设计", cut_all=False) # 精确模式
seg_list3 = jieba.cut_for_search("古蜀青铜艺术与蜀绣非遗技艺结合创新的探讨——现代首饰设计") # 搜索引擎模式
print("Full Mode: " + "/ ".join(seg_list1)) # 全模式
print("Default Mode: " + "/ ".join(seg_list2)) # 精确模式
print(", ".join(seg_list3)) # 搜索引擎模式
结果如下图所示:
分词结果1可以看到精确模式与搜索引擎模式的分词结果比全模式更准确。
3、添加自定义词典
在对“互联网+背景下古代娱乐项目综合体验平台的设计与实现——基于微信小程序和Web网页”这一文本进行分词的时候,发现“互联网+”与“微信小程序”没有被正确分出来,如下图所示:
添加词典前
添加自定义词典的方式帮助jieba正确地分出这些新词。
- ①载入词典
- 用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
- 自定义词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
- 词频省略时使用自动计算的能保证分出该词的词频
新建自定义词典文件self_dict.txt
self_dict.txt
编写代码导入自定义词典,并重新分词
import jieba
jieba.load_userdict('/home/lly/self_dict.txt') #载入自定义词典
str='互联网+背景下古代娱乐项目综合体验平台的设计与实现——基于微信小程序和Web网页'
print("/".join(jieba.cut(str)))
添加自定义词典之后的分词结果如下图所示:
添加字典后
可以看到“互联网+”与“微信小程序”被完整地分了出来。
-
② 使用 add_word() 和 del_word() 动态修改词典
add_word使用示例
del_word使用示例 -
③使用 suggest_freq() 调节单个词语的词频,使其能(或不能)被分出来
suggest_freq使用示例
4、关键词提取
jieba中有两种抽取关键词的方法,一种是基于 TF-IDF 算法的关键词抽取,另外一种是基于 TextRank 算法的关键词抽取。
编写代码查看两种关键词提取算法的区别:
import jieba
import jieba.analyse
s = "1933年巴黎中国美展上的古画和他者视野,古蜀青铜艺术与蜀绣非遗技艺结合创新的探讨——现代首饰设计,迈克尔·苏立文1940年代在四川大学任职期间艺术交游与活动研究,基于高频金融市场订单流的极端事件研究以及相应交易策略开发"
for x, w in jieba.analyse.extract_tags(s, withWeight=True): #基于 TF-IDF 算法的关键词抽取
print('%s %s' % (x, w))
for x, w in jieba.analyse.textrank(s, withWeight=True): #基于 TextRank 算法的关键词抽取
print('%s %s' % (x, w))
结果如下图所示:
两种算法结果比较
可以看到两者的差别还是比较大的。
两种算法的一个区别就是TF-IDF算法需要依赖于语料库,但是TextRank不需要。
5、词性标注
词性标注结果jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
二、IK Analyzer的分词使用
1、检查java环境
输入指令:java -version
2、检查solr
-
输入
bin/solr start -force
启动服务 -
在浏览器地址栏输入http://云主机IP:端口号(默认为8983)/solr,出现以下界面则solr可用
solr界面
3、添加IK Analyzer中文分词工具包
-
下载对应版本的IK Analyzer,下载地址,仅供参考
解压后的文件
-
将两个jar包添加到solr文件目录下的/server/solr-webapp/webapp/WEB-INF/lib文件夹中
-
新建core
输入bin/solr create -c lycore -p 8983 -force
新建一个名为lycore的core -
修改配置文件
在server/solr/lycore/conf文件夹中的managed-schema文件中加入以下代码:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
</analyzer>
</fieldType>
- 重启solr
输入bin/solr restart -forc
重启solr
4、开始分词 -
在浏览器中打开分词窗口
打开分词窗口 - 输入文本进行分词
对“古蜀青铜艺术与蜀绣非遗技艺结合创新的探讨”进行分词
分词结果:
分词结果古 /蜀 /青铜 /艺术 /蜀绣 /非 /遗 /技艺 /结合 /创新 /探讨
可以看到“非遗技艺”没有被正确分出来。
5、设置自定义词典
将文件夹下的IKAnalyzer.cfg.xml , ext.dic和stopword.dic 三个文件 复制到/server/solr-webapp/webapp/WEB-INF/classes 目录下,并在 ext.dic中添加自定义词典,
添加“非遗技艺”
-
重启solr,重新分词
重新分词结果
可以看到非遗技艺被成功分了出来。
三、词频统计与词云生成
1、准备待分词的文本
正好最近教务处公布了今年的大创立项名单,我就想要提取项目名称中的关键字并进行词频统计,来看看今年大家的研究重点。
提取《2018年四川大学“大学生创新创业训练计划”立项项目名单》里的项目名称,保存为proTitle.csv文件.
2、准备自定义词典
因为项目名称中涉及到很多专业名词,为了提高分词的正确率,需要在自定义词典中加入这些词。我找了一些专业名词的词库,将里面的词都加入了自定义词典文件self_dict.txt
使用的词库
3、准备停用词表
因为项目名称中包含很多“的”、“一个”等意义不大的连词、数量词,因此将这些词作为停用词。我参考了几个常见的停用词表,制作了本次的停用词表stop_words.data
停用词表
4、编写代码并运行
import jieba
import codecs
import csv
from jieba import analyse
analyse.set_stop_words("stop_words.data") #引入停用词表
jieba.load_userdict('self_dict.txt') #载入自定义词典
#读入待分词文件
f = open('2018dc.csv','r')
myfile=f.read()
#分词并将结果写入文件
seg_list = jieba.cut(myfile, cut_all = False)
sentence = '/' .join(seg_list)
f = codecs.open('result1.txt','w','utf-8')
f.write(sentence)
f.close()
#提取前200个关键词并写入文件
keyWord = analyse.extract_tags(myfile, topK=100, withWeight=True)
csv=open('result2.csv','w')
for wd, weight in keyWord:
print int(weight*1000),wd
csv.write(wd.encode('utf-8')+','+str(weight*1000)+'\n')
-
分词结果
分词结果部分截图
关键抽取即按词频排序结果
5、生成词云
生成词云的方式有很多。基于python的wordcloud模块完成分词、设置停用词表、绘制图云等一系列功能。
因为前面已经完成了关键词的抽取与权重排序,因此在这里直接采用在线词云生成工具,比如易词云、图悦等,操作很简单。
6、小结
从以上词云图中可以看出,今年的大创立项名单中出现得比较多的词汇是“制备”、“机制”、“系统”、“平台”、“分析”等,这些词大多是与医学、理学、工学的实验相关的。“调查”、“现状”这些词更有可能与人文社科相关的研究有关。
网友评论