基于中文分词工具pkuseg-python,我用张小龙的3万字演讲作了测试

作过搜索的同窗都知道,分词的好坏直接决定了搜索的质量,在英文中分词比中文要简单,由于英文是一个个单词经过空格来划分每一个词的,而中文都一个个句子,单独一个汉字没有任何意义,必须联系先后文字才能正确表达它的意思。python

所以,中文分词技术一直是nlp领域中的一大挑战。Python 中有个比较著名的分词库是结巴分词,从易用性来讲对用户是很是友好的,可是准确度不怎么好。这几天发现另一个库,pkuseg-python,看起来应该是北大的某个学生团队弄出来的,由于这方面没看到过多的介绍,pkuseg-python 的亮点是领域细分的中文分词工具,简单易用,跟现有开源工具相比提升了分词的准确率。小程序

因而我想起用张小龙的3万字演讲作下测试,前几天在朋友圈流传了一张图,采铜统计出张小龙演讲中各个词出现的频率,不知他是怎么统计的,不过做为技术人,咱们用更专业的工具来试试会是什么效果。微信

安装 pkuseg

pip3 install pkuseg
复制代码

第一步是将演讲内容下载下来,保存到一个txt文件中,而后将内容加载到内存app

content = []
with open("yanjiang.txt", encoding="utf-8") as f:
    content = f.read()
复制代码

我统计了一下,文字总数是32546个。工具

接下来咱们用pkuseg对内容进行分词处理,并统计出现频率最高的前20个词语是哪些。测试

import pkuseg
from collections import Counter
import pprint

content = []
with open("yanjiang.txt", encoding="utf-8") as f:
    content = f.read()

seg = pkuseg.pkuseg()
text = seg.cut(content)
counter = Counter(text)
pprint.pprint(counter.most_common(20))
复制代码

输出结果:spa

[(',', 1445),
 ('的', 1378),
 ('。', 755),
 ('是', 707),
 ('一', 706),
 ('个', 591),
 ('我', 337),
 ('咱们', 335),
 ('不', 279),
 ('你', 231),
 ('在', 230),
 ('会', 220),
 ('了', 214),
 ('有', 197),
 ('人', 190),
 ('就', 178),
 ('这', 172),
 ('它', 170),
 ('微信', 163),
 ('作', 149)]
复制代码

什么鬼,这都是些啥玩意,别急,其实啊,分词领域还有一个概念叫作停用词,所谓停用词就是在语境中没有具体含义的文字,例如这个、那个,你我他,的得地,以及标点符合等等。由于没人在搜索的时候去用这些没意义的停用词搜索,为了使得分词效果更好,咱们就要把这些停用词过去掉,咱们去网上找个停用词库。设计

第二版代码:code

import pkuseg
from collections import Counter
import pprint

content = []
with open("yanjiang.txt", encoding="utf-8") as f:
    content = f.read()

seg = pkuseg.pkuseg()
text = seg.cut(content)


stopwords = []

with open("stopword.txt", encoding="utf-8") as f:
    stopwords = f.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))
复制代码

打印的结果:cdn

[('微信', 163),
 ('用户', 112),
 ('产品', 89),
 ('朋友', 81),
 ('工具', 56),
 ('程序', 55),
 ('社交', 55),
 ('圈', 47),
 ('视频', 40),
 ('但愿', 39),
 ('时间', 39),
 ('游戏', 36),
 ('阅读', 33),
 ('内容', 32),
 ('平台', 31),
 ('文章', 30),
 ('信息', 29),
 ('团队', 27),
 ('AI', 27),
 ('APP', 26)]
复制代码

看起来比第一次好多了,由于停用词都过滤掉了,跟采铜那张图片有点像了,不过他挑出来的词多是从另一个维度来的,毕竟人家是搞心理学的。可是咱们选出来的前20个高频词仍是不许确,有些不该该分词的也被拆分了,例如朋友圈,公众号,小程序等词,咱们认为这是一个总体。

对于这些专有名词,咱们只须要指定一个用户词典, 分词时用户词典中的词固定不分开,从新进行分词。

lexicon = ['小程序', '朋友圈', '公众号']  #
seg = pkuseg.pkuseg(user_dict=lexicon)  # 加载模型,给定用户词典
text = seg.cut(content)
复制代码

最后的出来的结果前50个高频词是这样的

163 微信
112 用户
89 产品
72 朋友圈
56 工具
55 社交
53 小程序
40 视频
39 但愿
39 时间
36 游戏
33 阅读
32 内容
31 朋友
31 平台
30 文章
29 信息
27 团队
27 AI
26 APP
25 公众号
25 服务
24 好友
22 照片
21 时代
21 记录
20 手机
20 推荐
20 企业
19 原动力
18 功能
18 真实
18 生活
17 流量
16 电脑
15 空间
15 发现
15 创意
15 体现
15 公司
15 价值
14 版本
14 分享
14 将来
13 互联网
13 发布
13 能力
13 讨论
13 动态
12 设计
复制代码

张小龙讲得最多的词就是用户、朋友、原动力、价值、分享、创意、发现等这些词,这些词正是互联网的精神,若是咱们把这些作成词云的话,可能效果会更好

本文首发于公众号:Python之禅

相关文章
相关标签/搜索