jieba库(jieba库的介绍以及分词原理,jieba的三种模式和常用函数,利用Jieba模块进行中文词语的统计)[通俗易懂]

jieba库(jieba库的介绍以及分词原理,jieba的三种模式和常用函数,利用Jieba模块进行中文词语的统计)[通俗易懂]环境:Python3.6+windows10jieba介绍以及分词的原理1.jieba是Python中的优秀的中文分词第三方库–中文文本需要通过分词获得单个的词语2.jieba库提供三种分词模式,最简单只需要掌握一个函数3.jieba库的安装只需要在cmd中,pipinstalljieba4..jieba分……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

环境:  Python3.6 +  windows10

jieba介绍以及分词的原理

1. jieba 是Python中的优秀的中文分词第三方库

    –中文文本需要通过分词获得单个的词语

2. jieba 库提供三种分词模式 ,最简单只需要掌握一个函数

3.jieba库的安装

   只需要在cmd 中,   pip  install jieba     

4.. jieba分词的原理    

        通过中文词库的方式来识别分词的

        — 利用一个中文词库,确定汉字之间的关联概率

       — 通过计算汉字之间的概率,汉字间概率大的组成词组,形成分词结果

       — 除了分词,用户还可以添加自定义的词组

 jieba的三种模式以及函数介绍

 1.jieba分词的三种模式     

      精确模式 : 把文本精确的切分开,不存在冗余单词   (就是切分开之后一个不剩的精确组合) 常用

     全模式 : 把文本中所有可能的词语都扫描出来,有冗余

                  即: 可能有一个文本,可以从不同的角度来切分,变成不同的词语。在全模式下把不同的词语都挖掘出来

    搜索引擎模式:在精确 模式基础上,对长词语再次切分

2. jieba库的常用函数

   (1)精确模式 函数  jieba.lcut(str)     返回列表类型

import jieba
"""jieba.lcut(str)"""
s = "中国是一个伟大的国家"
print(jieba.lcut(s))
"""
    输出结果: ['中国', '是', '一个', '伟大', '的', '国家']

"""

  (2)全模式    jieba.lcut(str,cut_all=True)     返回列表类型 ,有冗余

print(jieba.lcut(s,cut_all=True))
"""输出结果:['中国', '国是', '一个', '伟大', '的', '国家']"""

(3) 搜索引擎模式: jieba.lcut_for_search(str)  返回列表类型,有冗余

     先按照精确模式进行分词,然后把把比较长的词进行再次分词

s1 = "中华人民共和国是伟大的"
print(jieba.lcut_for_search(s1))
'''
输出结果 : ['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']
'''

(4) jieba.add_word(str)   向分词词典添加新词 str

 

 jieba使用实例

文本词频的统计 :  一篇文章中,出现了哪些词?哪些词出现的最多?

 1. 首先是英文文本 ,对照英文的分词,进行中文分词   用到的英文文本的网站   网站的文本赋全部赋值下来,然后进行保存,: https://python123.io/resources/pye/hamlet.txt

def getText():
    txt = open("E:\\\shuju\\hamelet.txt", "r").read()
    # 文章中的所有单词转化为小写
    txt = txt.lower()
    # 使用空格个来替换掉所有的符号
    for ch in "!\"#$%&()*+,-./:;<>=?@[\\]_'{|}~":
        txt = txt.replace(ch, " ")
    return txt


def main():
    hamletTxt = getText()
    words = hamletTxt.split()
    counts = {}
    for word in words:
        # 获取键对应的值,如果键不存在,给出默认值0
        # 获取 每个单词出现的次数
        counts[word] = counts.get(word, 0) + 1
    # 把字典的键值对转化为元组,全部存放在列表里面
    items = list(counts.items())
    # 进行排序,按照每个元组的第二个值,即字典的值,进行降序排序
    items.sort(key=lambda x:x[1],reverse=True)
    # 对降序排序的前10个进行处理,
    # 格式化输出 : word: 最低长度为10,不够补空格    counts: 最低长度为5,不够的话补空格
    # print(items)
    for i in range(10):
        word,counts = items[i]
        print("{0:<10}{1:>5}".format(word,counts))


if __name__ == '__main__':
    main()

运行结果:

the        1143
and         966
to          762
of          669
i           631
you         554
a           546
my          514
hamlet      471
in          451

2.中文的文本进行分析,和英文的相比不同,中文中的有名称、词语成语等

   现在只统计三国演义中的人物的出现次数,取出排行前10的人物出现的次数

    中文的文本网站: 三国演义的片段文本: https://python123.io/resources/pye/threekingdoms.txt

   详细看代码的注释

"""人物出场统计"""
import jieba

# 读取所有的文件
txt = open("E:\\shuju\\threekingdoms.txt","r",encoding="utf-8").read()
# 使用jieba分词的精确模式
words = jieba.lcut(txt)
counts = {}
'''对进行分词的之后的结果进行处理,解决类似于孔明和诸葛亮是一个人物的问题,给其重新赋值'''
for word in words:
    # 排除长度为1的
    if len(word) == 1:
        continue
    elif word == "诸葛亮" or word == "孔明曰":
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word == "丞相":
        rword = "曹操"
    elif word == "周瑜" or word == "都督":
        rword = "周瑜"
    else:
        rword = word
        # 统计出场的次数
    counts[rword] = counts.get(rword,0) + 1
'''因为分词之后,可能不是人物的词要比人物的次数多,
    所以进行处理,如果统计的结果里面出现了不是人物的结果,
    就对其进行删除,可以先不进行处理,看看会出现哪些值,
    然后把这些值放在一个集合里面,然后可以进行相应的删除
    多次进行运行,然后添加之后,就可以得到想要的结果'''
excludes = {"将军","却说","二人","不可","荆州","不能","如此","商议","如何","主公",
            "军士","左右","军马","引兵","次日","大喜","东吴","天下","于是","今日",
            "不敢","魏兵","陛下","不知","一人","人马","汉中","只见","众将","后主",
            "大叫","上马","蜀兵"}
for ex in excludes:
    del counts[ex]   # 删除不是人物的值
items = list(counts.items())
# 安装从大到小进行排序
items.sort(key=lambda x:x[1],reverse=True)
# 只要前排序时候出场次数最多的前10个
for i in range(10):
    word,count = items[i]
    print("{0:<10}{1:>5}".format(word,count))

运行结果:

曹操         1451
孔明         1383
刘备         1252
关羽          784
周瑜          438
张飞          358
吕布          300
赵云          278
孙权          264
司马懿         221

3.同样的道理,我们可以进行西游记等,还有其他的中文文本的统计,

    还有中文的期刊。新闻等,都是可以进行统计的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190913.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ssl证书怎么用_为什么会ssl证书无效

    ssl证书怎么用_为什么会ssl证书无效1.打开网站:https://freessl.cn/按提示操作,验证类型:离线验证;2.会给出一个域名的访问路径和一个文件内容,按照域名解析的主机配置nginx或其它的web服务,返回文件给出的内容;3.确认文件url和内容无误后点验证;4.通过后可以在KeyManager里的证书管理里看到颁发的证书;5.点更多然后选择导出Nginx证书,crt为证书,key为密钥;6.将文件分发到nginx等其它需要证书的服务上去使用;注意:这里最关键的一步就是,你的域…

    2022年10月23日
    0
  • Unity 3D 游戏引擎

    Unity 3D 游戏引擎简介Unity3D也称Unity,是由UnityTechnologies公司开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具。Unity3D可以运行在Windows和MacOSX下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、WindowsPhone8和Android平台。也可以利用UnityWebPlayer插件发布网页游戏,支持Mac和Windo…

    2022年5月9日
    42
  • dedecms 图集标签{dede:productimagelist} {dede:field name=’imgurls’}&nbs

    dedecms 图集标签{dede:productimagelist} {dede:field name=’imgurls’}&nbs

    2021年9月22日
    40
  • IDEA2022.03激活码【在线注册码/序列号/破解码】

    IDEA2022.03激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    50
  • 模块和包[通俗易懂]

    模块什么是模块:但其实import加载的模块分为四个通用类别:1使用python编写的代码(.py文件)2已被编译为共享库或DLL的C或C++扩展3包好一组模块的包4使用C编写并链

    2022年3月29日
    67
  • 跨平台应用开发进阶(十五) :uni-app 自定义 showToast并实现下载进度条

    跨平台应用开发进阶(十五) :uni-app 自定义 showToast并实现下载进度条大话设计模式(四)单例模式的优与劣前言首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了,比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,即在整个的打印过程中我只有一个打印程序的实例。简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,

    2022年6月20日
    256

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号