【自然语言处理系列】掌握jieba分词器:从基础到实战,深入文本分析与词云图展示

 本文旨在全面介绍jieba分词器的功能与应用,从分词器的基本情况入手,逐步解析全模式与精确模式的不同应用场景。文章进一步指导读者如何通过添加自定义词典优化分词效果,以及如何利用jieba分词器进行关键词抽取和词性标注,为后续的文本分析打下坚实基础。以十九大报告为例,我们将展示如何将分析结果以词云图的形式直观展现,使读者能够更加深入理解和掌握文本分析的实际操作,进而提升处理中文文本数据的能力。此博客适合NLP初学者及对文本分析感兴趣的专业人士。

目录

 

一、jieba分词器介绍

二、 jieba分词器的全模式和精确模式

三、jieba分词器添加自定义词典

四、 jieba分词器实现关键词抽取

五、jieba分词器进行词性标注

六、文本分析之词云图展示------以十九大报告为例

 


一、jieba分词器介绍

结巴分词器,全称为jieba分词器,是一个广泛应用于中文自然语言处理的开源库,由Python语言编写。它主要功能是将连续的中文文本切分成单个词语,也就是进行中文词语的词法分析。jieba分词器采用了基于词频统计和HMM(隐马尔可夫模型)的混合算法,能够处理大量的中文文本,支持用户自定义词典,对于网络语言、口语、外来词等有较好的处理能力。它提供了多种分词模式,如精确模式、全模式和搜索引擎模式,以适应不同的应用场景需求。

二、 jieba分词器的全模式和精确模式

下方代码演示了使用jieba分词库对中文文本进行分词的两种主要模式:全模式和精确模式。首先,通过全模式(cut_all=True)对句子‘我来到北京清华大学’进行分词,该模式会尽可能地切分出所有可能的词汇,全模式会生成较多的分词结果,包括一些较短的词汇。接着,使用精确模式(cut_all=False),该模式会尝试将句子最精确地切开,这时的分词更加符合实际的词语使用习惯。最后,对于句子‘他来到了网易杭研大厦’,默认使用精确模式进行分词,得到的结果为‘他/ 来到/ 了/ 网易/ 杭研/ 大厦’,这一结果同样体现了精确模式在中文分词中的有效性。

import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("全模式: " + "/ ".join(seg_list))  # 全模式

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

seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
print(", ".join(seg_list))

三、jieba分词器添加自定义词典

在自然语言处理领域,分词是基础且关键的一步。为了确保分词的准确性和适应性,jieba分词器不仅提供了内置的词典,还允许用户添加自定义词典,以适应特定的分词需求。自定义词典的用途包括提高分词准确性、增强模型适应性、处理专业术语等。例如,在金融领域,有许多专业术语和名称无法被默认词典所覆盖,此时添加自定义词典可以提高分词的准确率。在文本分析和挖掘中,通过简单的文本文件或数据库等形式来构建自定义词典,并将其导入到jieba分词器中,可以让分词器更好地理解和处理特定的文本内容,从而帮助用户更好地识别和处理实体、事件和情感等语言实体。 

text = "故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"
# 全模式
seg_list = jieba.cut(text, cut_all=True)
print(u"[全模式]: ", "/ ".join(seg_list))
# 精确模式
seg_list = jieba.cut(text, cut_all=False)
print(u"[精确模式]: ", "/ ".join(seg_list))

在处理句子“故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等”时,jieba分词器未能将“乾清宫”和“黄琉璃瓦”识别为独立的整体。鉴于这两个词汇实际上应被视作单独的实体,我们考虑通过引入自定义词典来改进分词结果,确保这些专有名词能够被正确分辨和处理。 

jieba.load_userdict("./data/mydict.txt") #需UTF-8,可以在另存为里面设置
#这是用户自定义的一个词典

#也可以用jieba.add_word("乾清宫")
text = "故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"
# 全模式
seg_list = jieba.cut(text, cut_all=True)
print(u"[全模式]: ", "/ ".join(seg_list))
# 精确模式
seg_list = jieba.cut(text, cut_all=False)
print(u"[精确模式]: ", "/ ".join(seg_list))

为解决jieba分词器在处理“乾清宫”和“黄琉璃瓦”时的问题,创建了一个包含这两个词汇的自定义词典(txt格式)。通过将此词典导入jieba分词器,同时对句子“故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等”进行全模式和精确模式下的分词,结果显示“乾清宫”和“黄琉璃瓦”被成功识别为独立的实体。这一改进显著提升了分词的准确性,确保了专有名词的恰当识别。

创建的自定义字典是一个txt格式,如下,主要要将其保存为utf-8格式。

四、 jieba分词器实现关键词抽取

下方代码通过使用jieba库的分词功能(jieba.cut)将文本分解成如'故宫'、'著名景点'、'乾清宫'等有意义的词语(分词结果)。然后运用关键词提取技术(jieba.analyse.extract_tags),选取了文本中最具代表性的五个词(关键词),这些关键词有助于读者快速理解文本的主题和关键内容。结果显示,前五个关键词中分为是”著名景点”、”乾清宫”、”黄琉璃瓦”、”太和殿”、”故宫”。同时输出了这五个关键词在文本中的重要程度。

权重的定义:权重在这里指的是每个关键词在文本中的TF-IDF值,即词频-逆文档频率。这是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的一个文件的重要程度。
权重的计算:TF-IDF值由两部分组成。第一部分是词频(TF),即词语在文本中出现的次数;第二部分是逆文档频率(IDF),这部分衡量的是词语的罕见程度,即如果一个词语在许多文档中都出现,则其IDF值会较低。这两部分的乘积形成了最终的权重值。
权重的应用:通过这种方式计算得出的权重有助于我们了解每个关键词在文本中的重要性。权重越高,表明该词在文本中越重要,这可以用于文本摘要、信息检索等多种NLP任务。
权重的应用场景:关键词提取的结果可以用在很多场景,比如自动摘要、搜索引擎优化、舆情分析等。在这些应用中,准确地了解关键词的重要性是非常关键的一点。
权重的优劣势:虽然TF-IDF是一种有效的关键词权重计算方法,但它也有局限性,比如无法捕捉词语之间的语义关系。因此,在使用这种方法时,通常需要根据具体任务调整或结合其他方法使用。

import jieba.analyse
text = "故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"
seg_list = jieba.cut(text, cut_all=False)
# print (u"分词结果:")
# print ("/".join(seg_list))
#获取关键词
tags = jieba.analyse.extract_tags(text, topK=5)
print (u"关键词:")
print (" ".join(tags))
tags = jieba.analyse.extract_tags(text, topK=5, withWeight=True)
for word, weight in tags:
    print(word, weight)

五、jieba分词器进行词性标注

下方是使用jieba库的posseg模块对中文句子进行分词和词性标注的示例。

import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for word, flag in words:
    print("%s %s" % (word, flag))

六、文本分析之词云图展示------以十九大报告为例

import jieba
from wordcloud import WordCloud
import imageio
from collections import Counter
import matplotlib.pyplot as plt

data={}

#读入数据
text_file = open('./data/19Congress.txt','r',encoding='utf-8')#文本数据是十九大报告
text = text_file.read()
#加载停用词表
with open('./data/stopwords.txt',encoding='utf-8') as file:
    stopwords = {line.strip() for line in file}

#分词
seg_list = jieba.cut(text, cut_all=False)
for word in seg_list:
    if len(word)>=2:
        if not data.__contains__(word):
            data[word]=0
        data[word]+=1
#这个词在词典之中,每出现一次就加1;如果没有出现在词典中,则置为0
#print(data)      
 
my_wordcloud = WordCloud(  
    background_color='white',  #设置背景颜色
    max_words=400,  #设置最大实现的字数
    #font_path=None,
    font_path=r'./data/SimHei.ttf',  #设置字体格式,如不设置显示不了中文
    mask=imageio.imread('./data/mapofChina.jpg'), #指定在什么图片上画
    width=1000,
    height=1000,
    stopwords = stopwords
).generate_from_frequencies(data)

plt.figure(figsize=(18,16))
plt.imshow(my_wordcloud)
plt.axis('off')
plt.show()  # 展示词云
# my_wordcloud.to_file('result.jpg')
text_file.close()

上述Python代码实现了基于“十九大报告”文本数据的中文词云可视化。具体而言,步骤如下:step1:从“./data/19Congress.txt”文件中读入文本数据;step2: “./data/stopwords.txt”文件中加载停用词表;step3:对文本数据进行分词,这里使用了jieba分词工具;step4:对分词后的数据进行词频统计,统计每个词在文本数据中出现的次数,并存储在字典data中;step5:基于词频统计数据,使用WordCloud工具生成词云图片,词云图片中单词的大小与其词频成正比;Step6:展示词云:使用matplotlib工具将生成的词云图片展示出来。同时根据实际需求,调整背景图片这个参数,将词云图的背景设为白色,形状为中国地图,以生成更符合需求的词云图片。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/756464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析案例48——二手房价格影响因素分析

案例背景 房价影响因素也是人们一直关注的问题,本次案例也适合各种学科的同学,无论你是经济管理类还是数学统计,还是电商物流类,都可以使用回归分析。通过数据分析回归分析分组聚合可视化等方法进行研究房价影响因素。 数据介绍 …

【C++】数组、字符串

六、数组、字符串 讨论数组离不开指针,指针基本上就是数组的一切的基础,数组和指针的相关内容参考我的C系列博文:【C语言学习笔记】四、指针_通过变量名访问内存单元中的数据缺点-CSDN博客【C语言学习笔记】三、数组-CSDN博客 1、数组就是&…

高精密机械设备中滚珠导轨的表面处理工艺有哪些?

滚珠导轨是机床传动和定位的传动元件,其表面处理方式对机床性能和使用寿命起着决定性的作用,不同的表面处理方法可以提高导轨的耐磨性、抗腐蚀性和整体性能。那么,滚珠导轨的表面处理方式有哪几种呢? 1、磨削法:磨削技…

数据结构--队列(图文)

队列是一种特殊的线性表,其核心特点是先进先出。 概念及特点: 概念 队列是一种只允许在一端进行插入数据操作,在另一端进行删除数据操作的线性表。进行插入操作的一端被称为队尾(Tail 或 Rear),进行删除…

测定分子结构丨核磁共振(NMR)测试原理、制样要求以及常见问题深度解密!...

✨【元素魔方学术俱乐部】✨ 👩‍🏫👨‍🏫我们创建了一个学术交流群 给全国各地以及各种研究方向的硕博 和老师们提供一个交流的平台📚🧪 感兴趣的话欢迎加入 📲本公众号中回复“社群” 会自动发…

短剧APP平台开发,互联网下的市场发展前景

近几年,短剧作为当下的热门行业之一,具有非常大的发展空间,市场前景一片大好,成为了一个新的的蓝海赛道。 随着互联网科技的不断发展,行业数字化发展已经成为了必然趋势。短剧APP系统的开发让观众拥有了一个在线观看短…

Windows 中的 Hosts 文件是什么?如何找到并修改它?

什么是 Hosts 文件 Hosts 文件是一个纯文本文件,存在于几乎所有的操作系统中,用于将主机名映射到 IP 地址。在域名系统(DNS)尚未普及之前,Hosts 文件是计算机网络中唯一用于主机名解析的方式。随着网络规模的扩大和 D…

Mac可以读取NTFS吗 Mac NTFS软件哪个好 mac ntfs读写工具免费

在跨操作系统环境下使用外部存储设备时,特别是当Windows系统的U盘被连接到Mac电脑时,常常会遇到文件系统兼容性的问题。由于Mac OS原生并不完全支持对NTFS格式磁盘的读写操作,导致用户无法直接在Mac上向NTFS格式的U盘或硬盘写入数据。下面我们…

架构师必知的绝活-JVM调优

前言 为什么要学JVM? 首先:面试需要 了解JVM能帮助回答面试中的复杂问题。面试中涉及到的JVM相关问题层出不穷,难道每次面试都靠背几百上千条面试八股? 其次:基础知识决定上层建筑 自己写的代码都不知道是怎么回事&a…

[ROS 系列学习教程] 建模与仿真 - 使用 ros_control 控制差速轮式机器人

ROS 系列学习教程(总目录) 本文目录 一、差速轮式机器人二、差速驱动机器人运动学模型三、对外接口3.1 输入接口3.2 输出接口 四、控制器参数五、配置控制器参数六、编写硬件抽象接口七、控制机器人移动八、源码 ros_control 提供了多种控制器,其中 diff_drive_cont…

揭示隐藏的模式:秩和检验和单因素方差分析的实战指南【考题】

1.研究一种新方法对于某实验结果准确性提高的效果,并将其与原有方法进行比较,结果见下表,请评价两者是否有不同? (行无序,列有序)-->单方向有序-->两独立样本的秩和检验) 如下图所示,先将相关数据导入spss。 图…

springboot注解@ComponentScan注解作用

一 ComponentScan作用 1.1 注解作用 项目会默认扫描SpringBootApplication注解所在路径的同级和下级的所有子包,使用ComponentScan后他会取代掉默认扫描。 ComponentScan 是Spring框架的注解,它的作用是扫描指定的包路径下的标有 Component、Service、…

docker-mysql主从复制

MySQL主从复制 安装docker和拉取镜像不再赘述 一.主服务器 1.新建主服务器容器-3307 (这里设置的密码可能不生效,若未生效请看问题中的2) docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \…

mindspore打卡第9天 transformer的encoder和decoder部分

mindspore打卡第9天 transformer的encoder和decoder部分 import mindspore from mindspore import nn from mindspore import ops from mindspore import Tensor from mindspore import dtype as mstypeclass ScaledDotProductAttention(nn.Cell):def __init__(self, dropout_…

13017.win10安装WSL2及CUDA开发环境

文章目录 1 win10版本1.1 关键项不能忽略 2 安装WSL2 ubuntu20.042.1 打开控制面板,开启虚拟子系统功能2.2 离线安装ubuntu2.2 WSL2 启动 ubuntu2.3 修改默认启动用户 3 ubuntu中安装vscode-server3.1 win10 中安装vscode3.2 ubuntu中安装vscode-server3.3 启动WSL2…

嵌入式学习(Day 51:ARM指令/汇编与c语言函数相互调用)

1.Supervisor模式与SVC模式 Supervisor模式是ARM处理器的一个特权工作模式,允许执行特权指令和访问特权资源。SVC模式(Supervisor Call)是与Supervisor模式相关的一个功能或指令,用于从用户模式切换到Supervisor模式,…

【C++ | 类型转换】转换构造函数、类型转换运算符 详解及例子源码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 本文未经允许…

认识100种电路之稳压电路

在电子电路中,稳压电路扮演着至关重要的角色。那么,为什么电路需要稳压?稳压的原理又是什么?以及稳压需要用到哪些元器件,数量又有多少呢?今天,就让我们一同揭开稳压电路的神秘面纱。 【电路为什…

【原创图解 算法leetcode 146】实现一个LRU缓存淘汰策略策略的数据结构

1 概念 LRU是Least Recently Used的缩写,即最近最少使用,是一种常见的缓存淘汰算法。 其核心思想为:当内存达到上限时,淘汰最久未被访问的缓存。 2 LeetCode LeetCode: 146. LRU缓存 3 实现 通过上面LRU的淘汰策略可知&#…

Zookeeper节点ACL权限设置—digest模式

ACL全称为Access Control List(访问控制列表),用于控制资源的访问权限。ZooKeeper使用ACL来控制对其znode(ZooKeeper数据树的数据节点)的访问。 zk利用ACL策略控制节点的访问权限: CREATE c 可以创建子节点 DELETE …