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

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

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

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

安装 pkuseg

pip3 install pkuseg

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

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))

输出结果:

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

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

第二版代码:

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))

打印的结果:

[(‘微信‘, 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 设计

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

代码传送门:https://github.com/lzjun567/crawler_html2pdf/tree/master/fencitongji

原文地址:https://www.cnblogs.com/zhijun/p/10270504.html

时间: 2024-10-11 07:29:13

基于开源中文分词工具pkuseg-python,我用张小龙的3万字演讲做了测试的相关文章

中文分词工具简介与安装教程(jieba、nlpir、hanlp、pkuseg、foolnltk、snownlp、thulac)

2.1 jieba 2.1.1 jieba简介 Jieba中文含义结巴,jieba库是目前做的最好的python分词组件.首先它的安装十分便捷,只需要使用pip安装:其次,它不需要另外下载其它的数据包,在这一点上它比其余五款分词工具都要便捷.另外,jieba库支持的文本编码方式为utf-8. Jieba库包含许多功能,如分词.词性标注.自定义词典.关键词提取.基于jieba的关键词提取有两种常用算法,一是TF-IDF算法:二是TextRank算法.基于jieba库的分词,包含三种分词模式: 精准

NLP(十三)中文分词工具的使用尝试

??本文将对三种中文分词工具进行使用尝试,这三种工具分别为哈工大的LTP,结巴分词以及北大的pkuseg. ??首先我们先准备好环境,即需要安装三个模块:pyltp, jieba, pkuseg以及LTP的分词模型文件cws.model.在用户字典中添加以下5个词语: 经 少安 贺凤英 F-35战斗机 埃达尔·阿勒坎 ??测试的Python代码如下: # -*- coding: utf-8 -*- import os import jieba import pkuseg from pyltp i

中文分词工具——jieba

汉字是智慧和想象力的宝库. --索尼公司创始人井深大 简介 在英语中,单词就是"词"的表达,一个句子是由空格来分隔的,而在汉语中,词以字为基本单位,但是一篇文章的表达是以词来划分的,汉语句子对词构成边界方面很难界定.例如:南京市长江大桥,可以分词为:"南京市/长江/大桥"和"南京市长/江大桥",这个是人为判断的,机器很难界定.在此介绍中文分词工具jieba,其特点为: 社区活跃.目前github上有19670的star数目 功能丰富,支持关键词提

在Hadoop上运行基于RMM中文分词算法的MapReduce程序

原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词算法的MapReduce程序 23条回复 我知道这个文章标题很“学术”化,很俗,让人看起来是一篇很牛B或者很装逼的论文!其实不然,只是一份普通的实验报告,同时本文也不对RMM中文分词算法进行研究.这个实验报告是我做高性能计算课程的实验里提交的.所以,下面的内容是从我的实验报告里摘录出来的,当作是我学

java读取中文分词工具(三)

import java.io.EOFException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; /* * 文件格式:已分词的文本,词语之间用空格,换行等空白符分割. * 到了文件末尾就结束 * 适合读取一行很大的文本,因为这里的缓冲不是一行,

java读取中文分词工具(四)

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.Serializable; import java.util.ArrayList; import java.ut

11大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断. 11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /** * 获取文本的所有分词结果, 对比不同分词器结果 * @author 杨尚川 */ public interface WordSegmenter {

9大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用9大Java开源中文分词器 2.对比分析9大Java开源中文分词器的分词效果 9大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /**  * 获取文本的所有分词结果, 对比不同分词器结果  * @author 杨尚川  */ public interface WordSegmenter {     /**      * 获取文本的所有分词结果      * @param text 文本      * @retur

java读取中文分词工具(2)

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; /* * 文件格式:已分词的中文文本,每个词语空格分割,每行一个段落. * 这个类适