python库之jieba 库

 jieba 库

 jieba 库的原理分析

jieba库可用于将中文的一段语句分解为单词,通常用于解析中文语句的含义。例如外国人需要学习中文而中文语句是一直连续的文字组合。例如“我们在学习Python办公自动化”这句话,外国人在理解这句话的含义时,首先需要将这句话正确地分解为一个个单词,即“我们”“在”“学习”“Python”“办公”“自动化”,如单词分解错误就无法理解这句话的含义,例如“我”“们在”。

将一段文字分解为一个个单词的原理是库中已经建立了“词典”,“词典”收集了汉语中的所有词语,当需要对一段文字进行分词时,会将文字的所有内容和词典进行匹配,当匹配成功时即得到一个单词。但还是会在有歧义的问题,例如“路上行人行路上”,代码可能会将其分词为“路上”“行”“人行路”“上”,但实际的分词应该为“路上”“行人”“行”“路上”,而jieba库会使用概率最大化来决定选择哪个词。因此在建立“词典”时还需对每个词设置使用概率,概率最大的词表示使用率最高。由于一段文字中每个词的概率不同,因此jieba库中还设置了最优化算法,即选择一段文字中概率最大的词。
综上所述,jieba库分词不能保证所有的分词都是正确的,读者在后面的学习过程中可能会发现分词错误的情况。关于jieba库的安装已经在8.5.3小节进行了演示,读者可按照如图8-4所示的命令进行安装。

iieba 库的解析

在8.6节介绍的Pyinstaller库是使用命令的形式来运行代码的,但是并没有使用代码,在iieba库中将使用代码的形式实现分词功能。
接下来对jieba库做一个简单的分析。使用pip工具下载、安装完jieba库后,打开iieba库安装目录(可通过命令pip show jieba返回的Location获取到安装目录地址)后

其中最为关键的是__init_-.py文件,包含用于创建分词对象的类Tokenizer,类Tokenizer包含大量与分词相关的方法。analyse文件夹中是用于设计算法以实现分析词语的相关代码。finalseg文件夹中是用于词完成后处理的相关代码。lac_small文件夹中是用于创建词法分析模型和模型数据读取器的相关代码。main_-·py文件可以实现使用命令的形式运行jieba库中函数的功能(与Pyinstaller库的使用方法相同)dict.txt文件是iieba库中的词典,用于保存所有的词语。

__init__.py文件中的类Tokenizer包含处理分词的方法。本书第6保细介绍了__init__.py文件的组成和原理,读者需要进入此文件中观察代码文件的组成,获取关键函数和类。

类Tokenizer的简洁定义:

Elass Tokenizer(object):#位于库jieba\ init .py中definit__(self,dictionary=DEFAULT DICT):...#初始化类def gen pfdict(f):...
def initialize(self,dictionary=None):...#检查初始化
def check initialized(self):...
def calc(self,sentence,DAG,route):...#计算分词def get DAG(self,sentence):...def cut(self,sentence,cut_all=False,HMM=True, use paddle=False):..#精确模式分词,返回一个分词对象
def cut_for_search(self,sentence,H=True):...#搜索引擎模式分词,返回一个分词对象def lcut(self,*args,**kwargs):...#精确模式分词,返回一个列表
def lcut_for_search(self,*args,**kwargs):...#搜索引擎模式分词,返回一个列表
def get dict_file(self):...#获取词典def load userdict(self,):...#加载个性化词典,提高分词正确率
def add word(self,word,freq=None,tag=None):...#向词典中添加单词def del word(self,word):...#删除一个单词
def suggest freq(self,segment,tune=False):...#调节单词的频率def tokenize(self,unicode sentence, mode="default",HMM=True):#对一个句子进行标记并生成元组
def set dictionary(self,dictionary path):...#设置分词依赖的词典

这里仅列举类名和方法名,以便于读者快速掌握类Tokenizer的使用方法,而对于方法的代码实现,读者并不需要过于关心,在此后的所有章节中均按照该形式列举类的定义。

jieba 库的使用

jieba库中提供了3种分词模式,即精确模式、全模式和搜索引擎模式。

精确模式

精确模式指对句子进行精确的切分,是文本分析中较为常用的一种模式。其使用形式如下:

cut(sentence,cut all=False,HMM=True,use_paddle=False)

参数sentence:需要分词的中文句子,值的数据类型为字符串类型。

参数cut_all:参数值的数据类型为布尔值类型,值为False表示使用精确模式,值为True表示使用全模式。

参数HMM:是否使用隐马尔可夫模型(一种优化模型算法)。

示例代码:

import jieba
s = '我们在学习Python办公自动化'
jb_a = jieba.Tokenizer()    #类Tokenizer所包含的处理分词的方法
result = jb_a.cut(sentence = s) #精确模式
print(result,list(result))

第3行代码使用iieba库中的类Tokenizer初始化一个分词对象jb_a。第4行代码使用了分词对象中的cut()方法,并对第2行代码中的字符串内容进行了精确模式分词。第5行代码输出结果,由于cut()方法分词后会返回一种Python内部数据,因此可以使用list()函数将该数据
转换为列表类型数据。

输出结果:

<generator object Tokenizer.cut at 0x0000022B1C26EF80> ['我们', '在', '学习', 'Python', '办公自动化']

执行代码后的输出结果如图8-21所示,标注框中的红色字为分词过程所产生的信息,用于告诉当前用N行分词的状态、消耗的时间(寻找最优化分词的过程需要消耗大量的时间,因此通过消耗时间可以对比不圆最优化算法的性能)等。蓝色字为分词后的内容,转换为列表数据后表明jieba库将'我们在学习Python办公动化'分词为了'我们'在'学习’'Python'办公自动化。

全模式

全模式指把句子中所有可以成词的词语都扫描出来,这种分词模式虽然速度快,但不能解决歧义问题。将cut()方法中的参数cut_all的值设置为True即可使用全模式。

示例代码:

import jieba
s = '我们在学习Python办公自动化'
jb_a = jieba.Tokenizer()
result = jb_a.cut(sentence = s,cut_all=True)#全模式
print(list(result))

代码执行结果:

['我们', '在', '学习', 'Python', '办公', '办公自动化', '自动', '自动化']

结果中每个可以作为一个单词的文字都将展示出来。

搜索引擎模式

搜索引擎模式指在精确模式基础上,对长词再次切分,适用于搜索引警分词。其使用形式如下:

cut for search(sentence,HMM=True)

参数sentence:需要分词的中文句子,值的数据类型为字符串类型。
参数HMM:是否使用隐马尔可夫模型。
示例代码:

import jieba
s = '我们在学习Python办公自动化'
jb_a = jieba.Tokenizer()
result = jb_a.cut_for_search(sentence = s)#搜索引擎模式
print(list(result))

第4行代码使用cut_for_search()对第2行代码中的文字进行搜索引擎模式分词,分词后的结果如下,表明在精确模式的基础上再次对“办公自动化”进行分词。

['我们', '在', '学习', 'Python', '办公', '自动', '自动化', '办公自动化']

添加新词

除了U上3种分词模式,由于社会还会不断地创造出新的间语,因此为子满是当前社会对分司的需求,还可以使用add-word()方法向词典中添加新词(添加的词语不是永久的:仪当前代码中有效)。其使用形式如下:

add word(word, freq=None, tag=None)

参数word:需要添加到词典中的词语。示例代码:

import jieba
s = '我们在学习Python办公自动化'
jb_a = jieba.Tokenizer()
jb_a.add_word('Python办公自动化')#添加新词
result = jb_a.cut(sentence = s)
print(list(result))

第4行代码使用add_word()方法将单词“Python办公自动化”添加到词典中。
第5行代码使用cut()方法进行精确模式分词。
执行代码后的输出结果如下,可以看出“Python办公自动化”并没有分开,而是作为一个词。

['我们', '在', '学习', 'Python办公自动化']

在__init--.py文件中对类Tokenizer的使用进行简化,并重新对该类中的方法进行赋值,代码如下:

dt = Tokenizer()get FREQ=lambda k,d=None:dt.FREQ.get(k,d)add word = dt.add wordcut =dt.cut
lcut = dt.lcut
cut for search=dt.cut for search
lcut for search =dt.lcut for search
del word = dt.del wordget dict file= dt.get dict file

也可以直接使用iieba.cut()、jieba.cut_for_search()和jieba.add_word()实现以上介绍的4个功能(8.7.4小节的代码中有此种用法)。

小项目案例:实现判断评论为好评或差评

项目描述
为了自动识别例如抖音的某个视频、微博的某个文案、淘宝的某个商品的评论为好评或差评,需要设计一个可以自动判断用户评论好坏的代码程序。
项目任务
任务1:使用jieba库将用户的评论分词为一个个单词,并建立一套好评、差评词库,例如在以下代码中,列表good中为好评词语,列表bad中为差评词语。
任务2:将用户评论分词后的单词分别与列表good、bad进行匹配,并统计好评词语和差评词语的个数

项目实现代码:

import jieba
good = ['好评','好看']
bad = ['差评','垃圾']
s_1 = '衣服好看,显得皮肤白'
s_2 = '尺寸不差评分必须高'
s_3 = '差评买过最垃圾的东西'
def get_value(s):good_value = bad_value = 0result = list(jieba.cut(sentence=s))print(result)for r in result:if r in good:good_value += 1if r in bad:bad_value += 1print('好评词语个数:',good_value,'差评词语个数:',bad_value)if good_value > bad_value:print('此条评论为好评')elif good_value == bad_value:print('此条评论暂无法判断')else:print('此条评论为差评')
get_value(s_1)
get_value(s_2)
get_value(s_3)

第2、3行代码中的good和bad分别保存好评词语和差评词语。在实际开发中的词语可能会远远多于以上代码中的词语,读者在实际开发中可以自行增加。
第4~6行代码中为3条待分析的评论。
第7~22行代码创建了一个用于分析评论的函数get_value()。其中第8行代码中的good_value和 badvalue用于统计好评词语和差评词语的个数。第9行代码使用iieba.cut()方法将评论解析为单词。第11~16代码使用for循环依次判断解析后的词语中是否有好评词语或差评词语,如果有好评词语则good_value值加I如果有差评词语则bad_value值加1。第17~22行代码用于判断good_value和bad_value的大小,如果好评词语的个数大于差评词语的个数,则表明评论为好评;如果个数相同则暂时无法判断评论是好评还是差评;如果好评词语的个数小于差评词语的个数,则表明评论为差评。
执行代码后的输出结果如图8-22所示,解析后的第1条评论为好评、第2条评论暂时无法判断、第3条评论为差评,解析后的结果基本是正确。本小节的代码仅用于演示效果,对于实际中广泛的、真实的评论来说,需要完全分辨出好评或差评是一件较为困难的事情目前的常用方法是结合人工智能深度学习算法并解析每条评论的语义,但仍然只能是尽可能提高识别的正确率。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Hadoop的航空公司客户数据分析与客户群体K-measn聚类分析(含LRFMC模型)

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍数据源介绍数据预处理hadoop集群分析建模分析总结每文一语有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本研究依托全国范围内的航空公司…

实习内容总结

相关来自AI非内部资料 Monorepo 大仓 + pnpm + Turborepo 工程化实践原理 核心概念解释 1. Monorepo (单仓库架构) 概念:将多个项目(packages)放在同一个代码仓库中管理,而非分散在多个仓库。优势:统一管理依赖、版本一致性、跨项目复用代码、原子化提交、简化CI/CD流程…

余电快速泄放电路

余电快速泄放电路&#xff0c;即放电电路&#xff0c;用在需要快速反复开关电源&#xff0c;且负载电路上有大容量电容的场景。 断开电源开关后&#xff0c;如果负载电路有大电容&#xff0c;会引起负载电路上的电压下降缓慢。此时如果重新接上电源开关&#xff0c;负载电路在未…

MOSFET驱动电路设计时,为什么“慢”开,“快”关?

MOSFET作为开关器件&#xff0c;在驱动电路中主要用于控制电流的通断&#xff0c;比如在DC-DC转换器、电机驱动或者功率放大电路中。它的开关过程&#xff08;开和关&#xff09;会直接影响电路的效率、发热和可靠性。“慢开快关”的这个设计原则&#xff0c;背后有什么电路设计…

分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读

分音塔科技&#xff08;BABEL Technology&#xff09; 的公司背景、股权构成、产品类型及技术能力的全方位解读 文章目录**分音塔科技&#xff08;BABEL Technology&#xff09;** 的公司背景、股权构成、产品类型及技术能力的全方位解读**一、公司背景&#xff1a;清华系AI企业…

2025科大讯飞AI大赛<大模型技术方向>(Datawhale AI 夏令营)

赛事报名链接&#xff1a;2025 iFLYTEK AI开发者大赛-讯飞开放平台 本赛事聚焦电商直播带货场景&#xff0c;要求基于带货视频及评论文本数据&#xff0c;完成三阶段任务&#xff1a; 任务一&#xff1a;商品识别 数据方面的信息 数据来源&#xff1a;origin_videos_data.cs…

M|电锯惊魂

rating: 7.5 豆瓣: 8.7 M&#xff5c;电锯惊魂 悬疑片&#xff0c;不恐怖。 前期中规中矩&#xff0c;中后期bug很多&#xff08;降智、剧情杀等&#xff09;&#xff0c;但是反转优秀。 总之&#xff0c;医生夫妻、两位警察在此片中各有不同程度的降智。也许是这种恐怖、悬疑电…

【Lucene/Elasticsearch】 数据类型(ES 字段类型) | 底层索引结构

在 Lucene/Elasticsearch 中&#xff0c;**BKD 树只负责“多维数值”字段**。其余类型仍走传统的 **倒排索引** 或专用格式&#xff1a;| 数据类型&#xff08;ES 字段类型&#xff09; | 底层索引结构 | 说明 | |---|---|---| | text、keyword&#xff08;字符串&#xff09; …

原型、原型对象

通俗理解&#xff1a;“类的原型对象就是一块区域里有这个类的实例对象通用的属性和方法”​这就是 JavaScript 中原型&#xff08;prototype&#xff09;的核心作用和设计理念。​​​​“一块区域” 原型对象本身&#xff08;如 String.prototype, Array.prototype, MyClass…

STM32 IIC通信(寄存器与hal库实现)

一、IIC基础知识 1. 串口通信与IIC通信串口通信通常需要至少三条线&#xff08;TX、RX和GND&#xff09;&#xff0c;而 I2C 总线仅需要两条信号线&#xff08;SDA和SCL&#xff09;&#xff1b;串口通信仅支持一对一通信&#xff0c;而 I2C 总线支持多机通信&#xff0c;允许单…

宝塔 php支持sqlserver

PDOException: SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver for SQL Server to communicate with SQL Server.错误原因这是 PHP 试图连接 SQL Server 数据库&#xff0c;但缺少必要的 ODBC 驱动支持 导致的。具体来说&#xff1a;你使用的是 PDO_SQLS…

day02-数组part02

一、长度最小的子数组&#xff08;滑动窗口&#xff09; leetcode 209 长度最小子数组 这道题的核心思想就是使用滑动窗口&#xff0c;滑动窗口三板斧&#xff1a; 初始位置i滑动窗口长度j-i1结束位置j 我们在写代码时是通过for循环来控制结束位置j&#xff0c;而初始位置i…

天爱验证码深度解析:从原理到实战,构建 Web 安全新防线

在网络安全日益严峻的当下&#xff0c;验证码作为抵御自动化攻击的重要屏障&#xff0c;其性能与可靠性直接关系到系统的安全稳定。天爱验证码&#xff08;TIANAI CAPTCHA&#xff09;作为国内优秀的开源行为验证码解决方案&#xff0c;凭借独特的技术优势&#xff0c;在电商、…

软考(软件设计师)软件工程-软件质量,软件测试,McCabe圈复杂度

软件质量 ISO/IEC 9126 是软件工程领域的经典质量模型&#xff0c;于1991年首次发布&#xff0c;2001年更新后成为软件产品质量评估的国际标准。其核心贡献是将抽象的“质量”概念分解为可度量、可管理的特性体系。以下是深度解析&#xff08;2023年行业实践视角&#xff09;&a…

CentOS7环境安装包部署并配置MySQL5.7

卸载MySQL卸载MySQL5.71、关闭MySQL5.7服务service mysqld stop2、查看MySQL安装rpm -qa|grep -i mysqlmysql-community-libs-5.7.35-1.el7.x86_64mysql-community-libs-compat-5.7.35-1.el7.x86_64mysql-community-common-5.7.35-1.el7.x86_64mysql57-community-release-el7-1…

1-Git安装配置与远程仓库使用

Git安装配置与远程仓库使用 1. Git 下载与安装 ① 进入Git 官网 https://git-scm.com/ ② 选择合适系统版本下载&#xff0c;本文以windows为例进行下载 当前最新版本为 2.50.1 &#xff0c;浏览器默认下载很慢&#xff0c;用迅雷比较快 ③ 安装Git 我安装在D盘 等待完…

开源“具身大脑” 实现不同机器人群体协作-RoboBrain

开源“具身大脑” 实现不同机器人群体协作-RoboBrain 具身大小脑协作框架RoboOS与开源具身大脑RoboBrain&#xff0c;实现跨场景多任务轻量化快速部署与跨本体协作&#xff0c;推动单机智能迈向群体智能&#xff0c;为构建具身智能开源统一生态加速场景应用提供底层技术支持。支…

【笔记】训练步骤代码解析

目录 config参数配置 setup_dirs创建训练文件夹 load_data加载数据 build_model创建模型 train训练 记录一下训练代码中不理解的地方 config参数配置 config {data_root: r"D:\project\megnetometer\datasets\WISDM_ar_latest\organized_dataset",train_dir: t…

Java填充Word模板

文章目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码实体类工具类三、测试四、运行结果五、注意事项前言 最近有个Java填充Word模板的需求&#xff0c;包括文本&#xff0c;列表和复选框勾选&#xff0c;写一个工具类&#xff0c;以此…

【MYSQL8】springboot项目,开启ssl证书安全连接

文章目录一、开启ssl证书1、msysql部署时默认开启ssl证书2、配置文件3、创建用户并指定ssl二、添加Java信任库1、使用 keytool 导入证书2、验证证书是否已导入三、修改连接配置一、开启ssl证书 1、msysql部署时默认开启ssl证书 可通过命令查看&#xff1a; SHOW VARIABLES L…