ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Python生态中最流行的中文分词库,提供了三种核心分词模式,其中`jieba.cut(s, cut_all=True)`即全模式分词,是理解中文分词原理的重要切入点

Python生态中最流行的中文分词库,提供了三种核心分词模式,其中`jieba.cut(s, cut_all=True)`即全模式分词,是理解中文分词原理的重要切入点 在中文自然语言处理NLP领域分词是最基础也是最关键的预处理步骤。与英文天然以空格分隔不同中文文本是连续的字符序列必须通过算法将其切分为具有独立语义的词语单元。jieba结巴分词作为Python生态中最流行的中文分词库提供了三种核心分词模式其中jieba.cut(s, cut_allTrue)即全模式分词是理解中文分词原理的重要切入点。本报告将围绕全模式分词展开结合代码示例、原理剖析与实战亮点全面解析这一技术的特性与应用场景。二、jieba库概述jieba库是一款开源的中文分词工具采用基于前缀词典的高效分词算法支持精确模式、全模式、搜索引擎模式和Paddle模式四种分词方式。其核心优势包括基于前缀词典 DAG有向无环图 动态规划实现分词结合隐马尔可夫模型HMM进行新词识别支持自定义词典加载与词频调整支持词性标注与关键词提取TF-IDF、TextRank支持并行分词以提升大规模文本处理效率安装方式极为简单pipinstalljieba三、全模式分词详解3.1 基本用法jieba.cut()函数是全模式分词的核心接口其函数签名为jieba.cut(sentence,cut_allFalse,HMMTrue,use_paddleFalse)其中cut_all参数控制是否启用全模式。当设置为True时函数会扫描句子中所有可能成词的词语组合返回一个生成器对象。以下是最基础的代码示例importjieba# 全模式分词示例text计算机科学seg_listjieba.cut(text,cut_allTrue)print(全模式结果: / .join(seg_list))执行上述代码输出结果为全模式结果: 计算/ 计算机科学/ 计算机/ 算机/ 科学可以看到全模式将计算机科学这个短语中所有可能的词语组合都扫描了出来包括计算、“计算机”、“计算机科学”、“算机”、科学等。3.2 更多示例对比为了更清晰地理解全模式的特点以下通过多个经典示例进行对比importjieba# 示例1经典歧义句text1我来到北京清华大学print(【示例1】,text1)print(全模式:,/ .join(jieba.cut(text1,cut_allTrue)))print(精确模式:,/ .join(jieba.cut(text1,cut_allFalse)))print()# 示例2地名组合text2南京市长江大桥print(【示例2】,text2)print(全模式:,/ .join(jieba.cut(text2,cut_allTrue)))print(精确模式:,/ .join(jieba.cut(text2,cut_allFalse)))print()# 示例3NLP领域文本text3自然语言处理技术快速发展print(【示例3】,text3)print(全模式:,/ .join(jieba.cut(text3,cut_allTrue)))print(精确模式:,/ .join(jieba.cut(text3,cut_allFalse)))输出结果如下【示例1】 我来到北京清华大学 全模式: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学 精确模式: 我/ 来到/ 北京/ 清华大学 【示例2】 南京市长江大桥 全模式: 南京/ 南京市/ 京市/ 市长/ 长江/ 长江大桥/ 大桥 精确模式: 南京市/ 长江大桥 【示例3】 自然语言处理技术快速发展 全模式: 自然/ 自然语言/ 语言/ 语言处理/ 处理/ 技术/ 快速/ 发展 精确模式: 自然语言处理/ 技术/ 快速/ 发展从上述结果可以直观看出全模式会输出所有可能的词语组合存在大量冗余而精确模式则通过算法选择最优切分路径结果更符合语义直觉。3.3 生成器特性值得注意的是jieba.cut()返回的是一个生成器Generator而非列表。这意味着生成器只能被迭代一次之后就会耗尽无法直接通过索引访问如seg_list[0]会报错无法直接获取长度如len(seg_list)会报错内存效率高适合处理大规模文本如果需要多次使用分词结果可以使用jieba.lcut()它直接返回列表importjieba text计算机科学# 方式一将生成器转为列表seg_genjieba.cut(text,cut_allTrue)seg_listlist(seg_gen)print(seg_list)# [计算, 计算机科学, 计算机, 算机, 科学]# 方式二直接使用lcutseg_list2jieba.lcut(text,cut_allTrue)print(seg_list2)# [计算, 计算机科学, 计算机, 算机, 科学]jieba.lcut()底层等价于list(jieba.cut(...))是cut()的便捷版本。四、全模式分词原理剖析4.1 前缀词典与DAG构建jieba全模式分词的核心算法基于前缀词典和有向无环图DAG。其工作流程如下加载词典jieba内置了一个包含数十万词条的默认词典每个词条记录了词语及其词频。构建前缀树将词典中的所有词语组织成前缀树Trie结构便于快速查找。扫描文本从左到右遍历输入文本对于每个位置查找所有以该位置字符开头的、存在于词典中的词语。构建DAG将文本中所有可能的词语切分点构建成有向无环图图中的节点代表字符位置边代表一个可能的词语。输出结果全模式下直接将DAG中所有可能的词语输出不做最优路径选择。以下代码演示了DAG的构建过程importjieba text计算机科学# 获取DAG结构tokenizerjieba.Tokenizer()tokenizer.initialize()# 初始化词典dagtokenizer.get_DAG(text)print(DAG结构:,dag)# 输出类似: {0: [0, 1, 3], 1: [1], 2: [2, 3], 3: [3], 4: [4]}# 含义位置0可以切出词 ending at 位置0,1,3即计、计算、计算机4.2 与精确模式的算法差异全模式与精确模式在算法层面的关键区别在于是否进行最优路径选择特性全模式cut_allTrue精确模式cut_allFalse算法策略扫描所有可能词语DAG 动态规划求最大概率路径速度非常快较快冗余存在大量冗余无冗余歧义处理不能解决歧义能较好处理歧义适用场景词汇挖掘、新词发现一般文本分析精确模式在DAG基础上利用动态规划算法计算每条切分路径的概率选择概率最大的路径作为最终结果。而全模式则省略了这一步直接输出所有可能的词语。4.3 HMM模型的作用jieba.cut()函数还有一个重要参数HMM默认值为True。HMM隐马尔可夫模型用于识别未登录词OOV, Out-Of-Vocabulary即词典中不存在的新词。importjieba text他来到了网易杭研大厦# 关闭HMMprint(关闭HMM:,/ .join(jieba.cut(text,HMMFalse)))# 开启HMM默认print(开启HMM:,/ .join(jieba.cut(text,HMMTrue)))输出关闭HMM: 他/ 来到/ 了/ 网易/ 杭/ 研/ 大厦 开启HMM: 他/ 来到/ 了/ 网易/ 杭研/ 大厦可以看到开启HMM后杭研这个未登录词被正确识别为一个整体。但需要注意的是全模式下HMM的作用相对有限因为全模式本身就会输出所有可能的单字组合。五、全模式分词的实战应用5.1 新词发现与词汇挖掘全模式最大的应用场景是新词发现和词汇挖掘。由于其输出所有可能的词语组合可以用于从大规模语料中提取潜在的新词或专业术语。以下是一个简单的新词发现示例importjiebafromcollectionsimportCounter# 模拟一批文本数据corpus[深度学习是机器学习的重要分支,自然语言处理技术发展迅速,计算机视觉在医疗领域应用广泛,强化学习是人工智能的前沿方向,神经网络是深度学习的核心算法,]# 使用全模式分词统计所有词语出现频率word_freqCounter()fortextincorpus:wordsjieba.lcut(text,cut_allTrue)# 过滤单字和停用词filtered[wforwinwordsiflen(w)1]word_freq.update(filtered)# 输出高频词语print(高频词语TOP 15:)forword,freqinword_freq.most_common(15):print(f{word}:{freq})输出结果高频词语TOP 15: 学习: 4 深度: 3 深度学习: 2 机器: 2 机器学习: 2 自然语言: 1 自然语言处理: 1 语言处理: 1 处理: 1 计算机: 1 计算机视觉: 1 人工智能: 1 神经网络: 1 强化学习: 1 ...通过全模式分词我们可以发现深度学习、“自然语言处理”、计算机视觉等专业术语这些词汇可能不在默认词典中但通过高频出现可以被识别为潜在的新词。5.2 搜索引擎索引构建虽然jieba提供了专门的cut_for_search()搜索引擎模式但全模式在某些场景下也可用于构建搜索索引。其优势在于能够覆盖更多的查询变体提高召回率。importjieba# 文档内容document自然语言处理是人工智能的重要领域# 全模式分词构建索引index_termsjieba.lcut(document,cut_allTrue)# 去重并过滤单字index_termslist(set(wforwinindex_termsiflen(w)1))print(索引词:,index_terms)# 模拟用户查询query自然语言ifqueryinindex_terms:print(f查询{query}匹配成功)5.3 歧义分析与语言研究全模式输出的所有可能切分结果可以用于语言学研究中的歧义分析。例如经典的结婚的和尚未结婚的这句话全模式可以揭示其中存在的组合歧义importjieba text结婚的和尚未结婚的print(全模式:,/ .join(jieba.cut(text,cut_allTrue)))# 输出: 结婚/ 婚的/ 和尚/ 尚未/ 结婚/ 婚的# 可以看到和尚被识别为一个词揭示了和/尚未与和尚/未的歧义六、性能优化与最佳实践6.1 大规模文本处理当处理大规模文本时全模式虽然速度快但仍需注意内存和性能优化importjiebaimporttime# 生成大规模测试文本large_text计算机科学是一门重要的学科。*10000# 性能测试starttime.time()# 使用生成器节省内存seg_genjieba.cut(large_text,cut_allTrue)word_countsum(1for_inseg_gen)endtime.time()print(f处理字数:{len(large_text)})print(f分词数量:{word_count})print(f耗时:{end-start:.3f}秒)优化建议使用生成器对于大文本使用jieba.cut()而非jieba.lcut()避免一次性加载所有结果到内存开启并行分词对于万字以上文本可使用jieba.enable_parallel()开启多进程分词关闭HMM如果不需要新词识别设置HMMFalse可减少计算量# 开启并行分词4个进程jieba.enable_parallel(4)resultsjieba.lcut(large_text,cut_allTrue)jieba.disable_parallel()# 用完关闭6.2 自定义词典优化虽然全模式扫描所有可能词语但通过自定义词典可以控制哪些词语被优先识别importjieba# 添加专业术语到词典jieba.add_word(大语言模型,freq1000)jieba.add_word(Transformer,freq1000)text大语言模型基于Transformer架构print(全模式:,/ .join(jieba.cut(text,cut_allTrue)))# 输出: 大语言模型/ 语言/ 模型/ 基于/ Transformer/ 架构6.3 停用词过滤全模式会产生大量冗余词实际应用中通常需要配合停用词过滤importjieba# 简单停用词表stop_words{的,了,和,是,在,我,有,一个}text自然语言处理是人工智能的重要领域wordsjieba.lcut(text,cut_allTrue)# 过滤停用词和单字filtered[wforwinwordsifwnotinstop_wordsandlen(w)1]print(过滤后:,filtered)七、全模式与其他模式对比特性全模式精确模式搜索引擎模式函数调用cut(s, cut_allTrue)cut(s)或cut(s, cut_allFalse)cut_for_search(s)切分粒度最细所有可能组合适中最优路径较细长词二次切分速度最快较快中等冗余程度高无中等歧义处理不能能部分适用场景新词发现、词汇挖掘文本分析、语义理解搜索引擎索引示例对比importjieba text小明硕士毕业于中国科学院计算所print(全模式:,/ .join(jieba.cut(text,cut_allTrue)))print(精确模式:,/ .join(jieba.cut(text,cut_allFalse)))print(搜索引擎模式:,/ .join(jieba.cut_for_search(text)))输出全模式: 小明/ 硕士/ 毕业/ 于/ 中国/ 中国科学院/ 科学/ 科学院/ 学院/ 计算/ 计算所 精确模式: 小明/ 硕士/ 毕业/ 于/ 中国科学院/ 计算所 搜索引擎模式: 小明/ 硕士/ 毕业/ 于/ 中国/ 科学/ 学院/ 科学院/ 中国科学院/ 计算/ 计算所八、总结与展望jieba.cut(s, cut_allTrue)全模式分词是jieba库中最基础也最直观的分词方式。它通过扫描文本中所有可能成词的词语组合为开发者提供了一个快速、全面的词汇视图。尽管存在冗余和无法处理歧义的局限但全模式在新词发现、词汇挖掘、搜索引擎索引构建等场景中具有独特价值。核心要点总结全模式返回生成器需注意迭代特性可使用lcut()获取列表算法基于前缀词典和DAG不进行最优路径选择速度快但冗余多适合需要高召回率的场景配合自定义词典、停用词过滤和并行处理可显著提升效果与精确模式、搜索引擎模式各有适用场景应根据需求选择随着深度学习在NLP领域的广泛应用基于BERT等预训练模型的分词方法在准确率上已超越传统工具。但jieba凭借其轻量、易用、高效的特性仍然是中文分词领域的重要工具。理解全模式分词的原理与特性有助于开发者更好地选择和应用分词技术为后续的文本分析、信息检索、情感分析等任务奠定坚实基础。
返回列表