文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python——jieba优秀的中文分词库(基础知识+实例)

2023-09-18 13:23

关注

Hello,World!

从去年开始学习Python,在长久的学习过程中,发现了许多有趣的知识,不断充实自己。今天我所写的内容也是极具趣味性,关于优秀的中文分词库——jieba库。

        🐒什么是jieba?

jieba 是目前表现较为不错的 Python 中文分词组件,它主要有以下特性:

jieba库的分词原理:利用一个中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果。除了分词,用户还可以添加自定义的词组。【这一点是很有趣的😄!】

3、jieba库支持四种分词模式:精确模式、全模式、搜索引擎模式、paddle模式,并且支持繁体分词,以及自定义词典。具体介绍:

        算法

正文来了!!!

🏔一、安装jieba库

        🐒1.  此次内容创作,我主要使用的软件有Anaconda,Jupyter Notebook,Pycharm等,看过我之前文章的大佬们,相信对Anaconda都有一个简单的了解,这里就不一一叙述了,直接安装🙂。

因为jieba库不是Anaconda中自带的,所以需要我们自己下载,首先进入jieba库官网:jieba · PyPIhttps://pypi.org/project/jieba/

如下图:

 点击官网中文件下载即可(如果下载速度比较慢,可以私聊我!💪)

        🐒2.  将压缩包解压到anaconda的pkgs目录。

        🐒3.  打开anaconda prompt,切换目录至比如我的D:/anaconda/pkgs/jieba-0.42,输入cmd进入命令行模式
执行  python setup.py install   即可。

        🐒4.  再次打开jupyter notebook 测试

import jieba,正常。pycharm中 import jieba ,正常。由此,我们的第一步安装完成!

pip install jiebaimport jieba

 🏔二、jieba库的使用

        🐒1.  精确模式

        将语句最精确的切分,不存在冗余数据,适合做文本分析。

        #精确模式

        jieba.cut(text, cut_all=False)

        案例分析:

        精确模式分析是不存在冗余数据的,把完整的text文本按照中文词库的标准完成拆分。如图所示:

import jiebaseg_list = jieba.cut("我来到北京清华大学", cut_all=False)print("Default Mode: " + "/ ".join(seg_list))  # 精确模式

      🐒 2.  全模式

        将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据。

        #全模式

        jieba.cut(text, cut_all=True)

        案例分析:

        全模式与精确模式的不同在于,全模式存在冗余数据,是将存在可能的词语全部切分出来,从第一个字到最后一个字遍历作为词语第一个字。例如:以“吉”开头的词语包括“吉林”,“吉林省”,以“长”开头的名词包括“长春”“长春市”等等。如图所示:

 不难看出,输出的内容存在冗余数据。

seg_list = jieba.cut("我来到吉林省长春市高新技术产业开发区光谷大街1188号", cut_all=True)print("Full Mode: " + "/ ".join(seg_list))  # 全模式

      🐒 3、搜索引擎模式

        在精确模式的基础上,对长词再次进行切分,提高召回率,适合用于搜索引擎分词。

        #搜索引擎模式

        jieba.lcut_for_search(text)

        案例分析:

        搜索引擎模式是将精确模式中的长词,再次按照全模式切分。如图所示:

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式print(", ".join(seg_list))

        🐒4、Viterbi算法

 此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了。

        🐒5、自定义词典

        在jieba自定义字典方面,目前我所了解到的常见的应用环境是各网络平台对违禁词的查询搜索处理,以及网站也对用户个人信息的处理,对购物方面评价信息的处理等等。因此,我同样也使用了jupyter notebook尝试了自定义词典的使用,text文本文件及运行结果如下图所示:

 

//自定义词典使用import jiebatest_sent = "李小福是创新办主任也是云计算方面的专家"jieba.load_userdict("E://userdict.txt")words = jieba.cut(test_sent)print(list(words))

         可以看出,我的自定义词典在运行过程中,起到了具体的作用。可想而知,当我们在对一篇文章进行内容的分析处理是,也是可以使用jieba库的!可以通过用户自定义词典来增强歧义纠错能力!

部分文本解析语法:

def getext():    fname=input("请输入要打开的文件路径及名称,以txt结尾:")    fo=open(fname)      #打开该文件,默认是文本文件,文本文件其实就是一个字符串    txt=fo.read()       #<文件名>.read()  默认是读取文件全部内容    txt=txt.lower()     #将文本所有字母小写    for ch in '!"#$%()*+<_>/:;<>=?@[\]\^_{}|~':        txt=txt.replace(ch,'')       #将文本中含有的所有上述字符都变为空格    return txthamlettxt=getext()words=hamlettxt.split()      #默认值,是将文本中单词按照空格分成一个一个的单词,并将结果保存成列表类型counts={}                    #定义一个空字典类型,因为我们希望单词和该单词出现的次数作为一个键值对for word in words:           #遍历words列表的每一个值    counts[word]=counts.get(word,0)+1items=list(counts.items())      #将该字典转化成一个列表,其中的键值对是以元组的形式存在items.sort(key=lambda x:x[1],reverse=True)for i in range(10):    word,count=items[i]       #items[i] 是个元组,元组可以带括号,可以不带括号;赋值    print("{:<10}{:>5}".format(word,count))

  🏔三、 使用语法

                🐒1.  对词组的基本操作

         添加

str = "你好呀,我叫李华!多多关照!"jieba.add_word("你")print(jieba.lcut(str))

         删除

str = "你好呀,我叫李华!多多关照!"jieba.del_word("李华")print(jieba.lcut(str))

         调整词出现的频率

str = "你好呀,我叫李华!多多关照!"jieba.suggest_freq(("李", "华"), True)print(jieba.lcut(str))

               🐒 2.  关键字提取

        TFIDF算法

import jieba.analyse # 导包jieba.analyse.extract_tags(sentence, topK=20, withWeight=False,allowPOS=())jieba.analyse.TFIDF(idf_path=None) # 创建一个新的 TFIDF 实例,idf_path是指指定 IDF 频率文件的路径

参数:

  • sentence:要提取的文本
  • topK:返回多少个具有最高TF/IDF权重的关键字。默认值为 20
  • withWeight:是否返回关键字的TF/IDF权重。默认为假
  • allowPOS:过滤包含POS(词性)的单词。空无过滤,可以选择['ns', 'n', 'vn', 'v','nr']

        TextRank算法

jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) # 有默认词性jieba.analyse.TextRank() # 新建自定义 TextRank 实例

                🐒3.  词性标注

jieba.posseg.POSTokenizer(tokenizer=None)

新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器

jieba.posseg.dt 为默认词性标注分词器

import jieba.possegstr = "你好呀,我叫李华!多多关照!"pt = jieba.posseg.POSTokenizer()print(pt.lcut(str)) # 得到 pair键值对,使用遍历取值# print(jieba.posseg.cut(str)) # 作用一样for i, k in ps.lcut(str):print(i, k)

                🐒4.  Tokenize:返回词语在原文的起止位置

默认模式

result = jieba.tokenize(u'永和服装饰品有限公司')for tk in result:    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

搜索模式

result = jieba.tokenize(u'永和服装饰品有限公司', mode='search')for tk in result:    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

         如上文所示,关于Pyhton中文分词库——jieba库的介绍,暂时结束,如果后续学习到了新的内容,会再次进行介绍!各位大佬们,如果发现文章内容错误,希望可以指出,评论或私信都可🙂

部分内容来源:GitHub - fxsjy/jieba: 结巴中文分词

来源地址:https://blog.csdn.net/m0_63244368/article/details/126837925

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯