失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 利用jieba进行中文分词并进行词频统计

利用jieba进行中文分词并进行词频统计

时间:2021-05-12 13:03:28

相关推荐

利用jieba进行中文分词并进行词频统计

1.安装jieba库

在windows的Anaconda环境下如果没有设置环境变量,则从Dos命令先进入...\Anaconda3\Scripts目录中,然后运行以下命令即可:

pip install jieba

2.分词示例

我们先用一段文本来进行分词并做词频统计:

央视网消息:当地时间11日,美国国会参议院以88票对11票的结果通过了一项动议,允许国会“在总统以国家安全为由决定征收关税时”发挥一定的限制作用。这项动议主要针对加征钢铝关税的232调查,目前尚不具有约束力。动议的主要发起者——共和党参议员鲍勃·科克说,11日的投票只是一小步,他会继续推动进行有约束力的投票。

可以看到,这段文本当中还包含了很多标点符号和数字,显然这不是我们想要的,所以在分词的时候要去掉这些。

2.1 普通分词模式

import jiebaimport recut_words=[]for line in open('./text1.txt',encoding='utf-8'):line.strip('\n')line = re.sub("[A-Za-z0-9\:\·\—\,\。\“ \”]", "", line)seg_list=jieba.cut(line,cut_all=False)cut_words.append(" ".join(seg_list))print(cut_words)>> 结果['央视网 消息 当地 时间 日 美国国会参议院 以票 对票 的 结果 通过 了 一项 动议 允许 国会 在 总统 以 国家 安全 为 由 决定 征收 关税 时 发挥 一定 的 限制 作用 这项 动议 主要 针对 加征 钢铝 关税 的 调查 目前 尚 不 具有 约束力 动议 的 主要 发起者 共和党 参议员 鲍勃 科克 说 日 的 投票 只是 一 小步 他会 继续 推动 进行 有 约束力 的 投票']

2.1 全分词模式

import jiebaimport recut_words=[]for line in open('./text1.txt',encoding='utf-8'):line.strip('\n')line = re.sub("[A-Za-z0-9\:\·\—\,\。\“ \”]", "", line)seg_list=jieba.cut(line,cut_all=True)cut_words.append(" ".join(seg_list))print(cut_words)>> 结果['央视 央视网 视网 消息 当地 时间 日 美国 美国国会 美国国会参议院 国会 参议 参议院 议院 以 票 对 票 的 结果 通过 了 一项 动议 允许 许国 国会 在 总统 以国家 家安 安全 为 由 决定 征收 关税 时 发挥 一定 的 限制 制作 作用 这项 动议 的 主要 发起 发起者 共和 共和党 党参 参议 参议员 议员 鲍 勃 科克 说 日 的 投票 只是 一小 小步 他 会 继续 推动 进行 有 约束 约束力 的 投票']

3.词频统计

做词频统计需要用到另外一个包collection中的Counter计数器(如果没有自行安装,安装方法同jieba一样)。但是需要注意的是,像上面那样分词后的形式不能做词频统计,因为Counter是将list中的一个元素视为一个词,所以在上面要略微修改。

import jiebaimport refrom collections import Countercut_words=""for line in open('./text1.txt',encoding='utf-8'):line.strip('\n')line = re.sub("[A-Za-z0-9\:\·\—\,\。\“ \”]", "", line)seg_list=jieba.cut(line,cut_all=False)cut_words+=(" ".join(seg_list))all_words=cut_words.split()print(all_words)c=Counter()for x in all_words:if len(x)>1 and x != '\r\n':c[x] += 1print('\n词频统计结果:')for (k,v) in c.most_common(2):# 输出词频最高的前两个词print("%s:%d"%(k,v))>> 结果['央视网', '消息', '当地', '时间', '日', '美国国会参议院', '以票', '对票', '的', '结果', '通过', '了', '一项', '动议', '允许', '国会','在', '总统', '以', '国家', '安全', '为', '由', '决定', '征收', '主要', '针对', '加征', '钢铝', '关税', '的', '调查', '目前', '尚', '参议员', '鲍勃', '科克', '说', '日', '的', '投票', '只是', '一', '小步', '他会', '继续', '推动', '进行', '有', '约束力', '的', '投票']词频统计结果:动议:3关税:2

4.添加自定义分词规则

什么叫添加自定义规则呢? 比如下面这个词:“南京市”。

import jiebajieba.load_userdict('../data/user_cut_dic.txt')str = "南京市"r = jieba.cut(str,cut_all=False)temp = ' '.join(r)print(temp)

jieba默认会将它看成一个整体。明显这也是大多数情况下我们期望的结果,但真的就不会有“南京”和“市”这种分词方式吗?

jieba提供了两种方式来解决:

第一种:导入用户自定义的分词样例(就像是自定义停用词一样)的本地文件;

比如在此处,我在../data/user_cut_dic.txt中添加了如下样例:

南京 999999999

得到了如下结果:“南京 市”,其中后面的数字是倾向于这种分词的权重(比重),中间用一个空格隔开。

第二种:在代码中添加分词建议;

import jiebajieba.suggest_freq(('南京',"市"), True)str = "南京市"r = jieba.cut(str,cut_all=False)temp = ' '.join(r)print(temp)

更多内容欢迎扫码关注公众号月来客栈!

如果觉得《利用jieba进行中文分词并进行词频统计》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。