龙空技术网

外婆都能学会的Python教程(十六):用Python中的jieba库词频统计

大数据工匠 55

前言:

如今各位老铁们对“pythonhmm”都比较注意,朋友们都想要知道一些“pythonhmm”的相关内容。那么小编在网络上收集了一些对于“pythonhmm””的相关内容,希望咱们能喜欢,同学们快快来学习一下吧!

前言

Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行。

下面是Python的入门教程介绍jieba库的使用,通过实例介绍分词和词频分析来学习该库的使用,太简单了,外婆看完都学会了,你也来看看吧!

从名字上看jieba就是“结巴”的拼音,想一想为啥叫这个名字呢?看下面的例子就知道了[呲牙]

jieba库介绍jieba是优秀的中文分词第三方库。jieba库支持三种分词模式精确模式:试图将句子最精确地切开,适合文本分析全模式:把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。安装jieba库

pip install jieba
jieba库的基本使用jieba.lcut()函数接收三个参数:需要分词的字符串。cut_all参数用来控制是否采用全模式;HMM参数用来控制是否使用HMM模型,返回列表类型的分词结果。jieba.lcut_for_search()函数接收两个参数:需要分词的字符串;HMM参数用来控制是否使用HMM模型,返回列表类型的分词结果。jieba.add_word()函数用来向分词词典增加新词。jieba.del_word()函数用来删除分词词典中的词。例子
import jieba as jb#  分词# 1 精确模式test1 = jb.lcut("中国是一个伟大的国家")print(test1) # ['中国', '是', '一个', '伟大', '的', '国家']# 2 全模式test2 = jb.lcut("中国是一个伟大的国家", cut_all=True)print(test2) # ['中国', '国是', '一个', '伟大', '的', '国家']# 3 搜索引擎模式test3 = jb.lcut_for_search("中华人民共和国是一个伟大的国家")print(test3) # ['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '一个', '伟大', '的', '国家']# 4 添加自定义词典jb.add_word("石墨烯")test4 = jb.lcut("石墨烯是一种新材料")print(test4) # ['石墨烯', '是', '一种', '新材料']
文本词频统计词频统计是指统计一段文本中各个词出现的频率,词频统计是文本分析的基础词频统计的步骤1 读取文本文件2 对文本进行分词3 对分词结果进行词频统计4 对词频结果进行排序5 输出词频统计结果英文文本:《Hamlet》词频分析

文件下载地址:

# 读取文件,并进行噪音处理,归一化处理def getText():  txt = open("D:\\test\\hamlet.txt", "r").read() # 读取文件  txt = txt.lower() # 转换为小写  for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~': # 去除噪音    txt = txt.replace(ch, " ") # 替换为空格  return txthamletTxt = getText() # 调用函数words = hamletTxt.split() # 分词counts = {} # 创建字典for word in words:  counts[word] = counts.get(word, 0) + 1  # 如果字典中没有word,返回0items = list(counts.items()) # 转换为列表items.sort(key=lambda x: x[1], reverse=True) # 排序for i in range(15):  word, count = items[i]  print("{0:<10}{1:>5}".format(word, count)) # 格式化输出
中文文本:《三国演义》人物出场分析

文件下载地址:

# 《三国演义》人物出场统计import jiebatxt = open("D:\\test\\threekingdoms.txt", "r", encoding="utf-8").read()  # 读取文件# 排除分词后非人名的词excludes = {"下马", "军中", "一声", "不敢", "以为", "一人", "因此", "商议", "之计", "大叫", "不如", "然后", "不曾", "何不", "此人",            "令人", "起兵", "蜀兵", "左右", "魏延", "大喜", "天下", "原来", "如何", "背后", "一军", "人马", "都督", "下文", "大事",            "引兵", "天子", "追赶", "赶来", "只见", "喊声", "军士", "今日", "正是", "魏兵", "忽然", "次日", "主公", "先主", "陛下",            "将军", "荆州", "徐州", "却说", "先生", "于是", "接应", "众将", "后主", "引军", "不知", "先锋", "不救", "何故", "大败",            "军马", "心中", "二人", "不免", "上马", "忽报", "可以", "不用", "夫人", "一面", "成都", "江东", "不可", "汉中", "不得",            "不由", "不见", "东吴", "大军", "不能", "之后", "粮草", "大怒", "后人", "不肯", "未知", "不足", "大惊", "进兵", "不禁",            "太守", "城中", "如此"}words = jieba.lcut(txt)  # 分词counts = {}  # 创建字典for word in words:  # 统计词频    if len(word) == 1:        continue    elif word == "诸葛亮" or word == "孔明曰": # 替换同一人物的不同称呼        word = "孔明"    elif word == "关公" or word == "云长":        word = "关羽"    elif word == "玄德" or word == "玄德曰":        word = "刘备"    elif word == "孟德" or word == "丞相":        word = "曹操"    else:        counts[word] = counts.get(word, 0) + 1  # 如果字典中没有word,返回0for word in excludes:    del counts[word]  # 删除不需要统计的词items = list(counts.items())  # 转换为列表items.sort(key=lambda x: x[1], reverse=True)  # 排序for i in range(15):  # 输出前15个    word, count = items[i] 

统计结果如下,看到统计结果是不是有点吃惊,出场最多的居然是“曹操”。[惊呆][惊呆][惊呆]

三国人物出场频次

结束寄语

这两个例子在数据分析上非常有用,以后遇到类似的问题直接拿来用就行,欢迎收藏!

恭喜你看完这篇Python教程,你已经超过99%的人了,关注我带你快速入门Python,提高工作效率!

码字不易[汗],喜欢就关注我给我点个赞吧,精彩内容会第一时间推送给你[心][谢谢]。

有问题可以回复或私信我,看到我会给你耐心解答[给力]!

标签: #pythonhmm