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进行中文分词并进行词频统计》对你有帮助,请点赞、收藏,并留下你的观点哦!