Python文本分词工具库-jieba

内容目录

        • 一、分词
        • 二、设置分词
        • 三、词性信息
        • 四、关键词提取

jieba库是一个针对中文文本的分词工具库,广泛应用于自然语言处理(NLP)领域的中文文本预处理阶段。

主要功能:

  • 中文分词:能够将连续的中文文本切割成有意义的词语序列,这是中文信息处理的基础。
  • 三种分词模式:
    • 精确模式:力求精准地进行分词,适合文本分析。
    • 全模式:列出文本中所有可能的词语组合,包含许多冗余项,但能发现更多潜在信息。
    • 搜索引擎模式:在精确模式基础上,对长词再次切分,以适应搜索引擎的需求,提高召回率。
    • 词性标注:通过jieba.posseg模块,不仅可以分词,还能为每个词标注其词性,如名词(n)、动词(v)、形容词(a)等。
    • 自定义词典:用户可以根据需要添加自定义的词语到词典中,以便jieba在分词时能够正确处理专有名词、行业术语或新词。
    • 关键词提取:提供关键词抽取功能,帮助从文本中快速提取出代表性的关键词。
一、分词

lcut(): jieba 分词库中的一个函数,用于对给定的字符串进行分词处理,并将分词结果以列表(list)的形式返回。这个方法非常适合于需要对分词结果进行进一步列表操作或遍历的场景。
lcut()可以支持三个参数:

def cut(self, sentence, cut_all=False, HMM=True, use_paddle=False):"""The main function that segments an entire sentence that containsChinese characters into separated words.Parameter:- sentence: The str(unicode) to be segmented.- cut_all: Model type. True for full pattern, False for accurate pattern.- HMM: Whether to use the Hidden Markov Model."""
  • 第一个参数:待分词的字符串 - 这是必需的参数,表示你想要进行分词处理的文本内容。
    • cut_all (可选参数):
      • 类型:布尔值(True 或 False)。
      • 默认值:False。
      • 含义:控制分词模式。如果设置为 True,则使用全模式分词,会列出文本中所有可能的词语组合;如果为 False(默认),则使用精确模式分词,仅输出最可能的词语组合。
  • HMM(可选参数):
    • 类型:布尔值(True 或 False)。
    • 默认值:True。
    • 含义:是否使用隐马尔可夫模型(Hidden Markov Model)。HMM 在 jieba 中用于新词发现,当设置为 False 时,会关闭基于HMM模型的新词识别功能。
import jieba
review = "之前我没得选,但现在我想做一个好人"
words = jieba.lcut(review,  cut_all=True)
# ['之前', '我', '没得选', ',', '但', '现在', '我', '想', '做', '一个', '好人']
print("cut_all=True: ", words)review = "之前我没得选,但现在我想做一个好人"
words = jieba.lcut(review)
# ['之前', '我', '没得选', ',', '但', '现在', '我', '想', '做', '一个', '好人']
print("cut_all=False: ", words)

参数 cut_all 用于控制分词模式。当 cut_all=True 时,启用的是 全模式 分词。全模式会将文本中的每一个词的所有可能成词方式都进行拆分,也就是说,它会尽可能地进行切分,包括一些较为生僻或者非通用的组合词,这会使得分词结果更加全面,但也可能导致较多的冗余项。
相比之下,如果设置 cut_all=False(这也是默认值),则使用 精确模式 分词。精确模式会按照常见词语和组合进行分词,尽量减少拆分,提供更为准确的词语划分,适合大多数文本分析场景。

cut_all=True:  ['之前', '我', '没得', '选', ',', '但', '现在', '我', '想', '做', '一个', '好人']
cut_all=False:  ['之前', '我', '没得选', ',', '但', '现在', '我', '想', '做', '一个', '好人']

cut_for_search():是 jieba 分词库中的一个特殊分词模式,主要用于搜索引擎分词。这个方法结合了精确模式和全模式的优点,旨在提高搜索时的查询词召回率。 是 jieba 分词库中的一个特殊分词模式,主要用于搜索引擎分词。这个方法结合了精确模式和全模式的优点,旨在提高搜索时的查询词召回率。

cut_fo_search()支持传入两个参数:

def cut_for_search(self, sentence, HMM=True):"""Finer segmentation for search engines."""
  • 需要分词的字符串:即要进行分词处理的文本内容。
  • 是否使用 HMM 模型:这是一个可选参数,默认为 True。HMM(Hidden Markov Model)模型在这里用于新词发现,当设置为 False 时,会关闭基于HMM模型的新词识别功能。这个参数可以影响分词结果,尤其是在处理未登录词(新词、专有名词等)时。
import jieba
review = "之前我没得选,但现在我想做一个好人"seg_list = jieba.cut_for_search(review)
print("/".join(seg_list))
# 之前/我/没得/没得选/,/但/现在/我/想/做/一个/好人seg_list2 = jieba.cut_for_search(review,HMM=False)
print("/".join(seg_list2))
# 之前/我/没/得/选/,/但/现在/我/想/做/一个/好人
二、设置分词

add_word(): 允许用户向分词词典中添加自定义的词语。这对于确保特定词汇(如品牌名、专业术语、新词或专有名词等)能够被正确识别和处理非常有用。使用这个方法可以提升分词的准确性和适应性。
add_word()支持传入三个参数:

def add_word(self, word, freq=None, tag=None):"""Add a word to dictionary.freq and tag can be omitted, freq defaults to be a calculated valuethat ensures the word can be cut out."""
  • word:必需参数,表示要添加的词语字符串。
  • freq:可选参数,表示词语的频率。在某些情况下,jieba 会根据词语的频率来决定分词时的优先级。如果省略,则默认值为 None。
  • tag:可选参数,表示词语的词性标记。这对于需要进行词性标注的场景非常有用。如果省略,则默认值为 None。
import jieba
review = "之前我没得选,但现在我想做一个好人"seg_list = jieba.cut(review)
print("/".join(seg_list))
# 之前/我/没得选/,/但/现在/我/想/做/一个/好人jieba.add_word("做一个好人")
seg_list2 = jieba.cut(review)
print("/".join(seg_list2))
# 之前/我/没得选/,/但/现在/我/想/做一个好人
三、词性信息

pseg模块: jieba 分词库中的一个模块,用于同时进行分词和词性标注。相比于基础的分词功能,pseg 能够提供每个分词的词性信息,这对于自然语言处理中的许多高级任务,如情感分析、命名实体识别等尤为重要。

import jieba.posseg as psegreview = "之前我没得选,但现在我想做一个好人"words = pseg.cut(review)
for word, flag in words:print(f"{word}{flag}")# 之前:f
# 我:r
# 没得:v
# 选:v
# ,:x
# 但:c
# 现在:t
# 我:r
# 想:v
# 做:v
# 一个:m
# 好人:n

可以通过jieba.add_word() 方法添加自定义词及词性

import jieba.posseg as pseg
import jiebareview = "之前我没得选,但现在我想做一个好人"jieba.add_word('一个好人', tag='n')
words = pseg.cut(review)
for word, flag in words:print(f"{word}{flag}")# 之前:f
# 我:r
# 没得:v
# 选:v
# ,:x
# 但:c
# 现在:t
# 我:r
# 想:v
# 做:v
# 一个好人:n

词性含义:

# r (代词): 代词,指代替名词或名词性短语的词,如“我”、“你”、“这”、“那”等。
# p (介词): 介词,用在名词、代词或名词性短语前边,一起组成介宾短语,在句中作状语或补语,如“在”、“对”、“从”等。
# ns (地名): 地名,包括特定区域、地域的名称,如“北京”、“中国”等。
# v (动词): 动词
# n (名词): 名词,表示人、事物、地方、抽象概念等名称的词。
# a (形容词): 形容词,主要用来修饰名词或代词,表示性质或特征,如“美丽”、“高兴”。
# ad (副词): 副词,用来修饰动词、形容词或其他副词,表示程度、时间、频率、范围等意义,如“很”、“非常”、“经常”。
# m (数词): 数词,表示数目或顺序的词,如“一”、“二”、“第三”。
# q (量词): 量词,与数词结合使用,表示数量,如“个”、“次”、“件”。
# c (连词): 连词,连接词、短语或句子,如“和”、“但”、“因为”。
# u (助词): 助词,附着在词或短语之后,表示结构关系或附加意义,如“的”、“着”、“了”。
# x (非语素字): 非语素字,不能单独成词但有语法意义的字符,如“阿”、“哎”。
# w (标点符号): 标点符号,文本中的各种标点符号。
# d (副词性代词): 如“都”、“仅仅”。
# f (方位词): 表示方向或位置关系的词,如“上”、“下”、“内”。
# an (形容词性惯用语): 形容词性的固定短语,如“黑乎乎”。
# b (区别词): 用来表示人或事物与其他同类相区别的词,如“野生”、“男”、“女”。
# e (叹词): 表达强烈感情或呼唤应答的词,如“哎呀”、“喂”。
# i (成语): 固定的四字或四字以上的汉语成语,如“画蛇添足”。
# j (简称略语): 简称或略语,如“北约”、“GDP”。
# o (拟声词): 模仿声音的词,如“哗啦”、“咚咚”。
# t (时间词): 表示时间的词,如“现在”、“昨天”。
# y (语气词): 位于句尾或句中,表达说话人的语气或情感,如“啊”、“吧”。
四、关键词提取

textrank(): 使用TextRank算法提取关键词
textrank()支持传入五个参数:

def textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False):"""Extract keywords from sentence using TextRank algorithm.Parameter:- topK: return how many top keywords. `None` for all possible words.- withWeight: if True, return a list of (word, weight);if False, return a list of words.- allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v'].if the POS of w is not in this list, it will be filtered.- withFlag: if True, return a list of pair(word, weight) like posseg.cutif False, return a list of words"""
  • sentence: 需要分析的文本。
  • topK: 返回关键词的数量,默认为20。
  • withWeight: 是否一并返回关键词的权重,默认为False。
  • allowPOS: 限定词性的列表,只把符合词性要求的词语当作关键词,默认包括名词、形容词等。
import jieba.analysetext1 = '全世界的无产阶级联合起来'
keywords = jieba.analyse.textrank(text1, topK=5, withWeight=True)
for keyword, weight in keywords:print(f"关键词: {keyword}, 权重: {weight}")
# 关键词: 起来, 权重: 1.0
# 关键词: 联合, 权重: 0.9966849915940917
# 关键词: 全世界, 权重: 0.9929941828082526
extract_tags(): 基于TF-IDF算法提取关键词。
extract_tags()支持传入五个参数:
def extract_tags(self, sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False):"""Extract keywords from sentence using TF-IDF algorithm.Parameter:- topK: return how many top keywords. `None` for all possible words.- withWeight: if True, return a list of (word, weight);if False, return a list of words.- allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v','nr'].if the POS of w is not in this list,it will be filtered.- withFlag: only work with allowPOS is not empty.if True, return a list of pair(word, weight) like posseg.cutif False, return a list of words"""

参数说明同上

import jieba.analysereview = "之前我没得选,但现在我想做一个好人"# 使用TF-IDF算法提取关键词
keywords = jieba.analyse.extract_tags(review, topK=5, withWeight=True)
for keyword, weight in keywords:print(f'关键词: {keyword}, 权重: {weight}')
# 关键词: 没得选, 权重: 2.39095350058
# 关键词: 好人, 权重: 1.556957105298
# 关键词: 之前, 权重: 1.038705095328
# 关键词: 现在, 权重: 0.79074950832
# 关键词: 一个, 权重: 0.5635101944259999

tips: 权重值含义

权重值通常反映了一个词项(关键词)在文档或语料库中的重要性。

TextRank中的权重值:类似于Google的PageRank算法,TextRank算法会为文本中的每个词计算一个分数,这个分数代表了该词作为关键词的重要程度。它是基于词语共现的统计信息得出的,如果一个词经常与其他关键词共同出现,那么它的TextRank权重就相对较高。简而言之,TextRank权重体现了词在文本网络中的中心性或影响力。

TF-IDF中的权重值: TF-IDF(Term Frequency-Inverse Document Frequency)是一种衡量词项重要性的经典方法。TF-IDF权重由两部分组成:
TF(Term Frequency):词频,即某个词在文档中出现的次数。出现次数越多,初步认为其越重要。
IDF(Inverse Document Frequency):逆文档频率,衡量词的罕见度。如果一个词在很多文档中都出现,则IDF值低,表明这个词对于区分文档的重要性小;反之,如果一个词仅仅在少数文档中出现,则IDF值高,意味着这个词具有很好的区分能力。 综合起来,TF-IDF权重值高的词,就是在文档中出现频繁但在整个文档集合中不常见的词,这些词往往更能代表文档的主题。

通过这些权重值,用户可以识别出哪些词汇对于理解文本内容最为关键

可以使用jieba.add_word()方法设置抽取的关键词

import jieba
import jieba.analyse
review = "之前我没得选,但现在我想做一个好人"
jieba.add_word("一个好人")# 使用TF-IDF算法提取关键词
keywords = jieba.analyse.extract_tags(review, topK=5, withWeight=True)
for keyword, weight in keywords:print(f'关键词: {keyword}, 权重: {weight}')# 关键词: 没得选, 权重: 2.988691875725
# 关键词: 一个好人, 权重: 2.988691875725
# 关键词: 之前, 权重: 1.29838136916
# 关键词: 现在, 权重: 0.9884368854

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

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

相关文章

变压器中性点接地电阻柜的出厂标准是什么

变压器中性点接地电阻柜的出厂标准是什么? 现代电气配电系统中,接地电阻是保障人身安全的非常重要的设施。在高压电气设备中,中性点接地电阻柜的作用是限制设备中的过电流和短路故障所产生的电流,以保障人身安全。变压器中性点接…

杨辉三角形及其C语言实现

一、引言 杨辉三角形(Pascal’s Triangle),又称帕斯卡三角形,是一个在数学中经常出现的数表。它的构造规则非常简单:三角形中的每个数字等于它上方两数字之和(或者说,它是位于它肩上的两个数字…

开源VS闭源:大模型发展路径之争,你站哪一派?

文章目录 引言一、数据隐私1.1开源大模型的数据隐私1.2 闭源大模型的数据隐私1.3 综合考量 二、商业应用2.1 开源大模型的商业应用2.2 闭源大模型的商业应用2.3 商业应用的综合考量 三、社区参与3.1 开源大模型的社区参与3.2 闭源大模型的社区参与3.3 综合考量 结论 引言 在人…

解析“分层引流”在颅内感染治疗中的价值意义

临床中,化脓性颅内感染的治疗一直是界内关注的重点。近年来,得益于医疗技术的持续革新与提升,颅内感染的治疗方法也获得了不断的更新与优化。在此背景下,北京精诚博爱医院所倡导的“分层引流”理念,作为一种新兴的治疗…

外贸小白到销冠,如何30天快速提升?

外贸从业8年,在工厂从0-1做外贸,外贸的坑踩过很多,也做出了很多出色的业绩,希望这篇文章可以给到外贸新人快速提升的思路。 对于刚刚进入外贸行业的职场新人?应该怎么做? 第一个月应该学什么?…

什么牌子的开放式耳机质量好?2024超强实力派品牌推荐!

耳机对于一个音乐人有重要这个不必多说,我朋友是个音乐编辑,他经常需要长时间佩戴耳机进行音频编辑和混音工作。在尝试过多款开放式耳机后,都没找到合适的。今天,我将从专业角度为大家带来几款热门开放式耳机的测评报告&#xff0…

第二证券炒股知识:股票内盘外盘代表什么意思?

股票内盘是主动性卖盘,表明以买入价成交的股数,持股的投资者主动以等于或是低于买一、买二、买三、买四、买五的价格卖出手中持有的股份,买入成交数量核算参加内盘。 股票外盘是主动性买盘,表明以卖出价成交的股数,场…

跟着大佬学RE(一)

学了一个 map()函数的使用 import base64rawData "e3nifIH9b_CndH" target list(map(ord, rawData)) # map 函数将 rawData 中的每个字符传递给 ord 函数。ord 函数返回给定字符的 Unicode 码点 print(target) # 打印 map 对象的内存地址&…

电脑中病毒了怎么办?7招教你保护电脑安全!

“不知道怎么回事,我的电脑莫名其妙就中病毒了,实在不知道应该怎么操作了,希望大家可以帮我!” 在数字化时代的浪潮中,电脑已成为我们生活与工作中不可或缺的一部分。然而,就像任何事物都有其阴暗面一样&am…

Python | 武理刷题

1. 为什么是非法的? a1a1 在Python(以及大多数其他编程语言)中,表达式 a1a1 是非法的,因为它试图将一个值(a1 的结果)赋给一个表达式(a1 本身),而不是一个…

ip地址快速切换软件有哪些好处

ip地址快速切换软件有哪些好处?IP地址快速切换软件具有诸多显著的好处,以下是对其主要优势的详细阐述: 首先,IP地址快速切换软件极大地提升了网络活动的灵活性和便捷性。对于需要经常切换网络环境或进行多账号管理的用户而言&…

新版 Vivado 2024.1分享(附安装包)

Vivado新版本来了,文末附下载方法。 Vivado 2024.1版本的亮点主要集中在多个方面的功能增强和优化上。 Vivado 2024.1版主要亮点: 通用访问与性能提升: MicroBlaze™ V软处理器(基于RISC V开源ISA)提供了更广泛的通…

Python应用开发——Streamlit 创建多页面应用程序进行APP的构建

创建多页面应用程序 在附加功能中,我们介绍了多页面应用程序,包括如何定义页面、构建和运行多页面应用程序,以及如何在用户界面的页面间导航。更多详情,请参阅多页面应用程序指南Multipage apps - Streamlit Docs 在本指南中,让我们通过将上一版本的 streamlit hello 应…

基于深度学习的音乐合成算法实例

基于深度学习的音乐合成算法可以生成高质量的音乐片段。以下是一个简化的基于深度学习的音乐合成算法实例,使用了LSTM网络来生成音乐序列。这个示例展示了如何使用LSTM网络来训练和生成音乐。 数据准备 首先,需要准备训练数据。可以使用MIDI文件作为训练数据,并将其转换为…

AI大模型在穿戴设备健康中的心率深度融合与案例分析

文章目录 1. 架构设计2. 应用场景3. 实现步骤3.1 步骤1:数据预处理3.2 步骤2:边缘计算初步分析3.3 步骤3:数据上传到云端3.4 步骤4:云端复杂分析3.5 步骤5:深度学习模型训练与部署 4. 云端API设计4.1 安装Flask4.2 API…

美国前总统特朗普竟然入驻TikTok,粉丝破24万

大家好! 我是老洪! 刚看到一则关于美国前总统特朗普的新闻, 特朗普竟然入驻TikTok了,太令人惊讶了。(为什么惊讶,后面再说) 更为惊人的是,他的到来竟然引来了众多粉丝的热烈追捧&…

如何从清空的回收站中恢复已删除的Word文档?

“嗨,我将 10 个 Word 文档移动到回收站,然后用清洁软件清理回收站。现在我意识到我犯了一个大错误——我删除了错误的文件。我想知道是否可以从清空的回收站中恢复已删除的Word文档。我没有数据恢复的经验,也不精通计算机技术。有没有简单的…

三.一布局和布局切换的实践与探索

在前端开发中,灵活的布局切换是一项非常实用的功能。今天,我想和大家分享一下如何在主组件中通过更换 Layout 目录下的组件来实现布局切换。 首先,我们有一个主组件 index.vue,它承担着整个页面的主要逻辑和展示。 而在 Layout …

SG90舵机(Arduino)/XY轴摇杆使用(Arduino)

XY轴摇杆使用 需要注意,必须是 ADC 引脚才可以接收模拟信号输入 /** 接线* PS2摇杆 Arduino* x A0* y A1* sw 7 */const int yg_x_pin A0; const int yg_y_pin A1; const int yg_btn_pin 7; // 摇杆按下的输入引脚 void…

Django 里解决自定义中间件的问题

如果在项目文件夹下创建一个文件夹utils,里面存自己定义的中间件。 要是出现这种问题 django.core.exceptions.ImproperlyConfigured: utils.md.ExampleMiddleware isnt a subclass of AppConfig.解决方法: 在 settings.py 里 # 将自定义的中间件写在…