pkuseg是由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。pkuseg具有如下几个特点:
高分词准确率。相比于其他的分词工具包,pkuseg的工具包在不同领域的数据上都大幅提高了分词的准确度。当然无法验证。
多领域分词。我们训练了多种不同领域的分词模型。根据待分词的领域特点,用户可以自由地选择不同的模型。
支持用户自训练模型。支持用户使用全新的标注数据进行训练。
git链接:https://github.com/lancopku/PKUSeg-python
本文主要包括几个版本的wordcloud输出方式
版本一是标准的pkuseg进行分词和展现
可以看出直接采用pkuseg也能分词,但分词效果不佳,不比jieba好多少。
版本二是追加停用词库后,再使用pkuseg进行分词和展现
增加停用词库后,再解析,效果增强不少,但一些新词汇未出现。
版本三加入自定义词库后,再使用pkuseg进行分词和展现
加入自定义词库后,可以看到pkuseg又提升了一些解析效率,但无关的词汇还是未过滤。
通过版本一、二、三演示了如何一步步提升分词的可用性,当然一两天的功夫很难全部了解pkuseg的全部功能。从用法上pkuseg和jieba相差无几,pkuseg不支持直接使用自定义词库,当然通过函数也能扩展;从分词的实际效果上也相差不大。
jieba分词 | 词频 | pkuseg分词 | 词频 |
---|---|---|---|
('微信', | 77), | ('微信', | 84), |
('小程序', | 64), | ('小程序', | 64), |
('用户', | 53), | ('游戏', | 56), |
('小游戏', | 32), | ('用户', | 54), |
('平台', | 32), | ('希望', | 32), |
('希望', | 32), | ('平台', | 30), |
('事情', | 30), | ('事情', | 30), |
('一种', | 27), | ('信息', | 22), |
('公众', | 24), | ('公众号', | 20), |
('游戏', | 23), | ('产品', | 18), |
('信息', | 20), | ('手机', | 17), |
('产品', | 18), | ('企业', | 17), |
('手机', | 17), | ('App', | 14), |
('企业', | 17), | ('生活', | 13), |
('App', | 14), | ('赞赏', | 13), |
('生活', | 13), | ('思考', | 12), |
('订阅', | 13), | ('版本', | 12), |
('赞赏', | 13), | ('系统', | 12), |
('思考', | 12), | ('工具', | 12), |
('版本', | 12) | ('发布', | 11) |
代码示例
import pkuseg
import pprint
import matplotlib.pyplot as plt
from collections import Counter
from os import path
from PIL import Image
from wordcloud import WordCloud, STOPWORDS,ImageColorGenerator
#--------------------------版本一,标准的pkuseg输出-------------------------------
#此处下载并读取张小龙关于微信产品的演讲
d = path.dirname(__file__)
content = open(path.join(d,'speechchinese.txt')).read()
# 使用pkuseg缺省的词库进行分词处理
# 初始化pkuseg实例,和网上的不一样要大写pku
seg = pkuseg.PKUSeg()
#进行分词
text = seg.cut(content)
#输出格式为['张小龙', '演讲', '全文', ':', '刚刚', '出现', '的', '是', '我', '打', '游戏', '的', '画面']
#初始化wordcloud实例,并指定字体类型
wc = WordCloud(font_path='/home/djh/win_font/simhei.ttf',max_words=50)
wc.generate_from_text(" ".join(text)) #根据文本绘制云图
#输出<wordcloud.wordcloud.WordCloud object at 0x000001F060600208>
# 词云展示
plt.imshow(wc)
plt.axis("off")
plt.show()
# 使用pkuseg缺省的词库进行分词处理的词频情况
counter = Counter(text)
pprint.pprint(counter.most_common(20))
#[(',', 627), ('的', 526), ('一', 305), ('个', 255), ('我们', 250), ('是', 245)]
#----------------------------版本二,追加停用词库---------------------------------
#从网上下载了停用词词库,并追加了一些中英文标点符号,当然也可以自己再补充
stopwords = open(path.join(d,'stopword.txt'),encoding='gbk',errors='ignore').read()
#此处使用遍历停用词库生成新的分词
new_text = []
for w in text:
if w not in stopwords:
new_text.append(w)
#输出使用停用词库后的分词处理的词频情况
counter = Counter(new_text)
pprint.pprint(counter.most_common(20))
#比之前要出色一些,不过还是缺乏一些新词
#('微信', 84), ('程序', 63), ('游戏', 56), ('用户', 54), ('希望', 32), ('平台', 30), ('事情', 30), ('信息', 22)]
#---------------------------版本三,增加自定义词库--------------------------------
#根据语义背景补充一些自定义词库
lexicon = ['小程序', '朋友圈', '公众号','大数据','云计算','去中心化'] #
## 初始化pkuseg实例,初始化的时候要指定自定义词库字典
seg = pkuseg.PKUSeg(user_dict=lexicon) # 加载模型,给定用户词典
#分词
text = seg.cut(content)
#此处使用遍历停用词库生成新的分词
stopwords = open(path.join(d,'stopword.txt'),encoding='gbk',errors='ignore').read()
new_text = []
for w in text:
if w not in stopwords:
new_text.append(w)
counter = Counter(new_text)
pprint.pprint(counter.most_common(20))
#[('微信', 84), ('小程序', 64), ('游戏', 56), ('用户', 54), ('希望', 32), ('平台', 30), ('事情', 30), ('信息', 22)]
#初始化wordcloud实例,并指定字体类型
wc = WordCloud(font_path='/home/djh/win_font/simhei.ttf',max_words=50)
#根据文本绘制云图
wc.generate_from_text(" ".join(new_text))#根据文本绘制云图
# 词云展示
plt.imshow(wc)
plt.axis("off")
plt.show()
本文分享自 python与大数据分析 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!