中文分词工具讨论

article/2025/9/22 23:38:27

中文分词工具讨论

1 中文分词原理介绍

1.1 中文分词概述

中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。

1.2 中文分词方法介绍

现有的分词方法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。

1.2.1 基于字符串匹配的分词方法

基于字符串匹配的分词方法又称机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。

按照扫描方向的不同,字符串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,可以分为单纯分词方法和分词与词性标注相结合的一体化方法。常用的字符串匹配方法有如下几种:

(1)正向最大匹配法(从左到右的方向);

(2)逆向最大匹配法(从右到左的方向);

(3)最小切分(每一句中切出的词数最小);

(4)双向最大匹配(进行从左到右、从右到左两次扫描)

这类算法的优点是速度快,时间复杂度可以保持在O(n),实现简单,效果尚可;但对歧义和未登录词处理效果不佳。

1.2.2 基于理解的分词方法

基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。

1.2.3 基于统计的分词方法

基于统计的分词方法是在给定大量已经分词的文本的前提下,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。例如最大概率分词方法和最大熵分词方法等。随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法

主要的统计模型有:N元文法模型(N-gram),隐马尔可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),条件随机场模型(Conditional Random Fields,CRF)等。

在实际的应用中,基于统计的分词系统都需要使用分词词典来进行字符串匹配分词,同时使用统计方法识别一些新词,即将字符串频率统计和字符串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。

2 中文分词工具介绍

2.1 jieba分词

2.1.1 基本介绍

字如其名,结巴分词主要用于中文分词,很形象的画面想必一下子就出现在了用户的面前,结巴的人在说话时一个词一个词从嘴里往外蹦的时候,已经成功地模拟了我们jieba函数的处理过程。

Jieba库的分词原理是利用一个中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果。除了分词,用户还可以添加自定义的词组。

jieba分词主要有三种模式

  • 精确模式:就是把一段文本精确地切分成若干个中文单词,若干个中文单词之间经过组合,就精确地还原为之前的文本。其中不存在冗余单词。

  • 全模式:将一段文本中所有可能的词语都扫描出来,可能有一段文本它可以切分成不同的模式,或者有不同的角度来切分变成不同的词语,在全模式下,Jieba库会将各种不同的组合都挖掘出来。分词后的信息再组合起来会有冗余,不再是原来的文本。

  • 搜索引擎模式:在精确模式基础上,对发现的那些长的词语,我们会对它再次切分,进而适合搜索引擎对短词语的索引和搜索。也有冗余。

2.1.2 分词效果

  1. 全模式

    import jieba
    str1 = '我来到了信息工程大学,发现这儿真不错,环境优美,学习氛围浓厚。'
    seg_list = jieba.cut(str1, cut_all=True)    # 使用全模式进行分词  生成列表
    print('全模式分词结果:', '/'.join(seg_list))  # /拼接列表元素
    
    全模式分词结果: 我/来到/了/信息/信息工程/工程/大学/,/发现/这儿/真不/真不错/不错/,/环境/环境优美/优美/,/学习/氛围/浓厚/。
    
  2. 精确模式

    import jieba
    str1 = '我来到了信息工程大学,发现这儿真不错,环境优美,学习氛围浓厚。'
    seg_list = jieba.cut(str1, cut_all=False)    # 使用精确模式进行分词  生成列表
    print('全模式分词结果:', '/'.join(seg_list))  # /拼接列表元素
    
    精确模式分词结果: 我/来到/了/信息工程/大学/,/发现/这儿/真不错/,/环境优美/,/学习/氛围/浓厚/。
    
  3. 搜索引擎模式

    import jieba
    str1 = '我来到了信息工程大学,发现这儿真不错,环境优美,学习氛围浓厚。'
    seg_list = jieba.lcut_for_search(str1)    # 使用搜索引擎模式进行分词  生成列表
    print('搜索引擎模式分词结果:', '/'.join(seg_list))  # /拼接列表元素
    
    搜索引擎模式分词结果: 我/来到/了/信息/工程/信息工程/大学/,/发现/这儿/真不/不错/真不错/,/环境/优美/环境优美/,/学习/氛围/浓厚/。
    

2.1.3 总结

我们可以看到,精确模式就是我们平常所用,分词精准;搜索引擎模式,提供了更多分词可能,可以用于搜索引擎的词语匹配;而全模式则是分词的全部可能,最为全面,它把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率提供了更多分词可能,可以用于搜索引擎的词语匹配;;三种模式各具特点,针对不同的应用场景可以发挥不同的作用。

2.2 SnowNLP

2.2.1 基本介绍

SnowNLP是一个常用的Python文本分析库,是受到TextBlob启发而发明的。由于当前自然语言处理库基本都是针对英文的,而中文没有空格分割特征词,Python做中文文本挖掘较难,后续开发了一些针对中文处理的库,例如SnowNLP。SnowNLP处理的是unicode编码,所以使用时需要自行decode成unicode。

2.2.2 分词效果

from snownlp import SnowNLP
#分词的对比
s=SnowNLP('我来到了信息工程大学,发现这儿真不错,环境优美,学习氛围浓厚。')
#s.words返回一个列表,打印出来即可
print('snownlp分词结果:', '/'.join(s.words))#s.words返回一个列表,打印出来即可
#拼音真的牛
print('中文拼音:', '/'.join(s.pinyin))
#关键词tags
print('关键词:',list(s.tags))
snownlp分词结果: 我/来到/了/信息/工程/大学/,/发现/这儿/真/不错/,/环境/优美/,/学习/氛围/浓厚/。中文拼音: wo/lai/dao/liao/zhan/lve/zhi/yuan/bu/dui/xin/xi/gong/cheng/da/xue/,/fa/xian/zhe/er/zhen/bu/cuo/,/huan/jing/you/mei/,/xue/xi/fen/wei/nong/hou/。关键词: [('我', 'r'), ('来到', 'v'), ('了', 'u'),  ('信息', 'n'), ('工程', 'n'), ('大学', 'n'), (',', 'w'), ('发现', 'v'), ('这儿', 'r'), ('真', 'd'), ('不错', 'a'), (',', 'w'), ('环境', 'n'), ('优美', 'a'), (',', 'w'), ('学习', 'v'), ('氛围', 'n'), ('浓厚', 'a'), ('。', 'w')]

2.2.3 总结

snownlp在分词效果上相对jieba来说感觉有些相差不多,效果也不错,但是速度稍微慢一些。但他具有的拼音和关键词功能比较厉害,对分好的词按照词性进行了标注。它最大特点是特别容易上手,用其处理中文文本时能够得到不少有意思的结果,但不少功能比较简单,还有待进一步完善。

2.3 hanlp

2.3.1 基本介绍

HanLP 是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP 具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。HanLP 主要功能包括分词、词性标注、关键词提取、自动摘要、依存句法分析、命名实体识别、短语提取、拼音转换、简繁转换等等。不同于市面上的商业工具,HanLP提供训练模块,可以在用户的语料上训练模型并替换默认模型,以适应不同的领域。项目主页上提供了详细的文档,以及在一些开源语料上训练的模型。HanLP希望兼顾学术界的精准与工业界的效率,在两者之间取一个平衡,真正将自然语言处理普及到生产环境中去。

2.3.2

from pyhanlp import *
conten_list=HanLP.parseDependency("我来到了战略支援部队信息工程大学,发现这儿真不错,环境优美,学习氛围浓厚。")
print('hanlp分析效果:',conten_list)

在这里插入图片描述

2.3.4 总结

hanlp分词效果也是不错,不仅分词,而且将各个词之间的关系,词性进行了描述。

2.4 ltp

2.4.1 基本介绍

TP 是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。LTP 制定了基于 XML 的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块 (包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口,可视化工具,并且能够以网络服务(Web Service)的形式进行使用。pyltp 是 LTP 的 Python 封装,提供了分词,词性标注,命名实体识别,依存句法分析,语义角色标注的功能。

2.4.2 分词效果

from pyltp import Segmentor#导入Segmentor库
math_path = "/home/lxn/goal/ltp/ltp_data_v3.4.0/cws.model"#LTP分词模型库
segmentor = Segmentor()#实例化分词模块
segmentor.load(math_path)#加载分词库
words = segmentor.segment("我来到了信息工程大学,发现这儿真不错,环境优美,学习氛围浓厚")
print(' '.join(words).split())#分割分词后的结果
segmentor.release()  # 释放模型
ltp分词效果:我/来到/了/信息/工程/大学/,/发现/这儿/真/不错/,/环境/优美/,/学习/氛围/浓厚

4 各个工具优缺点总结

4.1 jieba

  1. 优点:

    自定义分词、词性方便

    词典文件添加自定义词典比hanlp快,词典文件添加100w需要1m,八千万 2h多

  2. 缺点:

    自定义词典时,带空格的词不支持

  3. 适用场景:

    词典数量大于五千万

    词典数据不能包含空格,否则分不出

4.2 snownlp

  1. 优点

    ​ 容易上手

    ​ 功能全面

  2. 缺点

    ​ 处理速度慢

    ​ 部分功能不够完善

4.3 hanlp

  1. 优点:

    提供多种分词方式

    可直接根据内部词库分出人名、机构等信息

    可构造多个词库,在分词时可动态选择所要使用的词库

  2. 缺点:

    自定义词典时,系统词典还是被优先使用,导致词性不是自定义词典中的词性

    多单词英文姓名无法分出

4.4 ltp

  1. 优点

    ​ 支持使用用户训练好的个性化模型

    ​ 支持添加自定义词典

  2. 缺点

    ​ 速度较慢


http://chatgpt.dhexx.cn/article/fmQKyuWE.shtml

相关文章

几种中文分词工具

word分词 word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文…

NLP词法分析(一):中文分词技术

文分词介绍 中文分词相较于英文分词要难许多,因为英文本身就是由单词与空格组成的,而中文则是由独立的字组成的,但同时语义却是有词来表达的。因此对于中文的分析与研究,首先应寻找合适的方法进行分词。现有的中文分词技术主要分…

双向最大匹配算法——基于词典规则的中文分词(Java实现)

目录 前言 一、中文分词理论描述 二、算法描述 1、正向最大匹配算法 2、反向最大匹配算法 3、双剑合璧 三、案例描述 四、JAVA实现完整代码 五、组装UI 六、总结 前言 中文分词所需要的词典放在公众号,关注文章末尾的公众号,回复“字典”获取…

中文分词技术及应用

中文分词技术及应用中文分词算法有5大类: 1、 基于词典的方法 2、基于统计的方法 3、基于规则的方法 4、基于字标注的方法 5、基于人工智能的技术(基于理解)的方法 中文分词目前有4个瓶颈: 1、分词歧义 2、未登陆词识别 3、分词粒…

【NLP】为什么中文分词比英文分词更难?有哪些常用算法?(附代码)

导读:人类文明的重要标志之一是语言文字的诞生。数千年来,几乎人类所有知识的传播都是以语言和文字作为媒介。 自然语言处理是使用计算机科学与人工智能技术分析和理解人类语言的一门学科。在人工智能的诸多范畴中,自然语言的理解以其复杂性、…

正向最大匹配中文分词算法

中文分词一直都是中文自然语言处理领域的基础研究。目前,网络上流行的很多中文分词软件都可以在付出较少的代价的同时,具备较高的正确率。而且不少中文分词软件支持Lucene扩展。但不管实现如何,目前而言的分词系统绝大多数都是基于中文词典的…

NLP|中文分词技术及应用

摘要:中文分词是中文信息处理的重要基础,本文详细阐述了目前主要的几种中文分词算法的技术原理 、中文分词目前的瓶颈和评价准则,以及中文分词的具体应用。 中文分词指将一个汉字序列切分成一个个单独的词。现有的中文分词算法有五大类:基于词典的方法,基于统计的方法,基…

入门科普:一文看懂NLP和中文分词算法(附代码举例)

导读:在人类社会中,语言扮演着重要的角色,语言是人类区别于其他动物的根本标志,没有语言,人类的思维无从谈起,沟通交流更是无源之水。 所谓“自然”乃是寓意自然进化形成,是为了区分一些人造语言…

中文分词算法—— 基于词典的方法

1、基于词典的方法(字符串匹配,机械分词方法) 定义:按照一定策略将待分析的汉字串与一个“大机器词典”中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。 按照扫描方向的不同:正向匹配和逆向匹配…

【NLP】中文分词:原理及分词算法

一、中文分词 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键。 Lucene中…

常见分词算法综述

常见分词算法综述 文章目录 常见分词算法综述一、基于词典的分词1. 最大匹配分词算法2. 最短路径分词算法:2.1基于dijkstra算法求最短路径:2.2N-dijkstra算法求最短路径:2.3. 基于n-gram model的分词算法: 二、基于字的分词算法生…

中文分词原理及分词工具介绍

转自:https://blog.csdn.net/flysky1991/article/details/73948971 本文首先介绍下中文分词的基本原理,然后介绍下国内比较流行的中文分词工具,如jieba、SnowNLP、THULAC、NLPIR,上述分词工具都已经在github上开源,后…

中文分词常见方法

中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块。不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性、句法树等模块的效果…

自然语言处理之中文分词技术与算法

1 正向最大匹配法 1.1 正向最大匹配(Maximum Match Method, MM法)的基本思想: 假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前字串中的前i个字作为匹配字段,查找字典。若字典中存在这样的一个i字词&#…

列举:中文分词算法你知道几种?

列举:中文分词算法你知道几种? 摘要:看似普通的一句话,甚至几个词,在机器眼里都要经过好几道“程序”。这个过程主要靠中文分词算法,这个算法分为三大类:机械分词算法、基于n元语法的分词算法、…

(转)Linux下管道的原理

7.1.1 Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: 限制管…

Linux之进程间通信——管道

文章目录 前言一、进程间通信1.概念2.目的3.进程间通信分类 二、管道1.管道介绍2.管道分类1.匿名管道pipi创建管道文件,打开读写端fork子进程关闭父进程的写入端,关闭子进程的读取端读写特征管道特征 2.命名管道mkfifo创建管道文件删除管道文件通信 三、…

Linux系统中的管道通信

目录 管道如何通信 管道的访问控制机制: 匿名管道 匿名管道数据传输的原理 如何使用(代码案例) 用C/C代码编译实现父子进程间通信案例 : 思路 实现 命名管道 为什么要有命名管道 回归进程间通信的本质 匿名管道的短板…

linux 管道 (单管道与双管道)

管道的局限性: ①数据不能进程自己写,自己读。 ②管道中数据不可反复读取。-旦读走, 管道中不再存在。 ③采用半双工通信方式,数据只能在单方向上流动。 ④只能在有公共祖先的进程间使用管道 单通道将小写字母改为大写例程: #in…

Linux 管道文件

管道分为无名管道和有名管道两种管道,管道文件是建立在内存之上可以同时被两个进程访问的文件。 先来说说有名管道: mkfifo函数创建有名管道,属于系统调用。 在linux操作系统中为实现下述功能, 先创建一个有名管道文件fifo。 …