python jieba库的基本使用
一、jieba库概述
jieba是优秀的中文分词第三方库
- 中文文本需要通过分词获得单个的词语
- jieba是优秀的中文分词第三方库,需要额外安装
- jieba库提供三种分词模式,最简单只需要掌握一个函数
二、jieba库安装
pipinstalljieba
三、jieba分词的原理
jieba分词依靠中文词库
- 利用一个中文词库,确定汉字之间的关联概率
- 汉字间概率大的组成词组,形成分词结果
四、jieba分词的3种模式
- 精确模式:把文本精确地切分开,不存在冗余单词(最常用)
- 全模式:把文本中所有可能的词语都扫描出来,有冗余
- 搜索引擎模式:在精确模式的基础上,对长词再次切分
五、jieba库常用函数
函数 | 描述 |
---|---|
jieba.lcut(s) | 精确模式,返回一个列表类型的分词结果 |
jieba.lcut(s,cut_all=True) | 全模式,返回一个列表类型的分词结果,存在冗余 |
jieba.lcut_for_search(s) | 搜索引擎模式,返回一个列表类型的分词结果,存在冗余 |
jieba.lcut(s) | 精确模式,返回一个列表类型的分词结果 |
jieba.add_word(s) | 向分词词典增加新词w |
例子:
>>>jieba.lcut("中国是一个伟大的国家") ['中国','是','一个','伟大','的','国家'] >>>jieba.lcut("中国是一个伟大的国家",cut_all=True) ['中国','国是','一个','伟大','的','国家'] >>>jieba.lcut_for_search("中华人民共和国是伟大的") ['中华','华人','人民','共和','共和国','中华人民共和国','是','伟大','的']
六、文本词频示例
问题分析
- 英文文本:Hamlet分析词频
https://python123.io/resources/pye/hamlet.txt
- 中文文本:《三国演义》分析人物
https://python123.io/resources/pye/threekingdoms.txt
代码如下:
defgetText(): #打开hamlet.txt这个文件 txt=open("hamlet.txt","r").read() #避免大小写对词频统计的干扰,将所有单词转换为小写 txt=txt.lower() #将文中出现的所有特殊字符替换为空格 forchin'|"#$%^&*()_+-=\\`~{}[];:<>?/': txt=txt.replace(ch,"") #返回一个所以后单词都是小写的,单词间以空格间隔的文本 returntxt hamletTxt=getText() #split()默认使用空格作为分隔符 words=hamletTxt.split() counts={} forwordinwords: counts[word]=counts.get(word,0)+1 items=list(counts.items()) items.sort(key=lambdax:x[1],reverse=True) foriinrange(10): word,count=items[i] print("{0:<10}{1:>5}".format(word,count))
上面代码中的
items.sort(key=lambdax:x[1],reverse=True)
是根据单词出现的次数进行排序,其中使用了lambda函数。更多解释请看:
https://www.runoob.com/python/att-list-sort.html
下面使用jieba库来统计《三国演义》中任务出场的次数:
importjieba txt=open("threekingdoms.txt","r",encoding="utf-8").read() words=jieba.lcut(txt) counts={} forwordinwords: iflen(word)==1: continue else: counts[word]=counts.get(word,0)+1 items=list(counts.items()) items.sort(key=lambdax:x[1],reverse=True) foriinrange(15): word,count=items[i] print("{0:<10}{1:>5}".format(word,count))
运行结果:
曹操953 孔明836 将军772 却说656 玄德585 关公510 丞相491 二人469 不可440 荆州425 玄德曰390 孔明曰390 不能384 如此378 张飞358
我们可以看到得出的结果与我们想象的有些差异,比如
- “却说”、“二人”等与人名无关
- “诸葛亮”、“孔明”都是同一个人
- “孔明”和“孔明曰”分词不符合我们的需求
所以我们需要对上面代码进行优化,在词频统计的基础上,面向问题改造我们的程序。
下面是《三国演义》人物数量统计代码的升级版,升级版中对于某些确定不是人名的词,即使做了词频统计,也要将它删除掉。使用寄一个集合excludes来接收一些确定不是人名但是又排序比较靠前的单词列进去。
importjieba txt=open("threekingdoms.txt","r",encoding="utf-8").read() excludes={"将军","却说","荆州","二人","不可","不能","如此"} words=jieba.lcut(txt) counts={} forwordinwords: iflen(word)==1: continue elifword=="诸葛亮"orword=="孔明曰": rword=="孔明" elifword=="关公"orword=="云长": rword=="关羽" elifword=="玄德"orword=="玄德曰": rword=="刘备" elifword=="孟德"orword=="丞相": rword=="曹操" else: rword=word counts[rword]=counts.get(rword,0)+1 items=list(counts.items()) items.sort(key=lambdax:x[1],reverse=True) foriinrange(15): word,count=items[i] print("{0:<10}{1:>5}".format(word,count))
运行结果:
曹操963 孔明847 张飞366 商议359 如何352 主公340 军士320 吕布303 左右298 军马297 赵云283 刘备282 引兵279 次日278 大喜274
可以看出还是有像“商议”、“如何”等不是人物的词出现在统计结果,我们将这些词加入到excludes中,多次运行程序后最后得到《三国演义》任务出场顺序前20:
七、文本词频统计问题举一反三
应用问题扩展
- 《红楼梦》、《西游记》、《水浒传》...等名著都可以统计它的任务出场次数
- 政府工作报告、科研论文、新闻报道...中出现的大量的词频进行分析,进而找到每篇文章的重点内容
- 进一步,对文本的词语或词汇绘制成词云,使其展示的效果更加直观
以上内容资料均来源于中国大学MOOC网-北京理工大学Python语言程序设计课程
课程地址:https://www.icourse163.org/course/BIT-268001
以上就是pythonjieba库的基本使用的详细内容,更多关于pythonjieba库的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。