python中文分词的原理你知道吗?

author author     2023-05-10     252

关键词:

中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那么回事,但分词效

参考技术A

中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那么回事,但分词效果好不好对信息检索、实验结果还是有很大影响的,同时分词的背后其实是涉及各种各样的算法的。

中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,需要人为切分。根据其特点,可以把分词算法分为四大类:

基于规则的分词方法

基于统计的分词方法

基于语义的分词方法

基于理解的分词方法

下面我们对这几种方法分别进行总结。

基于规则的分词方法

这种方法又叫作机械分词方法、基于字典的分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配。若在词典中找到某个字符串,则匹配成功。该方法有三个要素,即分词词典、文本扫描顺序和匹配原则。文本的扫描顺序有正向扫描、逆向扫描和双向扫描。匹配原则主要有最大匹配、最小匹配、逐词匹配和最佳匹配。

最大匹配法(MM)。基本思想是:假设自动分词词典中的最长词条所含汉字的个数为 i,则取被处理材料当前字符串序列中的前 i 个字符作为匹配字段,查找分词词典,若词典中有这样一个 i 字词,则匹配成功,匹配字段作为一个词被切分出来;若词典中找不到这样的一个 i 字词,则匹配失败,匹配字段去掉最后一个汉字,剩下的字符作为新的匹配字段,再进行匹配,如此进行下去,直到匹配成功为止。统计结果表明,该方法的错误率 为 1/169。

逆向最大匹配法(RMM)。该方法的分词过程与 MM 法相同,不同的是从句子(或文章)末尾开始处理,每次匹配不成功时去掉的是前面的一个汉字。统计结果表明,该方法的错误率为 1/245。

逐词遍历法。把词典中的词按照由长到短递减的顺序逐字搜索整个待处理的材料,一直到把全部的词切分出来为止。不论分词词典多大,被处理的材料多么小,都得把这个分词词典匹配一遍。

设立切分标志法。切分标志有自然和非自然之分。自然切分标志是指文章中出现的非文字符号,如标点符号等;非自然标志是利用词缀和不构成词的词(包 括单音词、复音节词以及象声词等)。设立切分标志法首先收集众多的切分标志,分词时先找出切分标志,把句子切分为一些较短的字段,再用 MM、RMM 或其它的方法进行细加工。这种方法并非真正意义上的分词方法,只是自动分词的一种前处理方式而已,它要额外消耗时间扫描切分标志,增加存储空间存放那些非 自然切分标志。

最佳匹配法(OM)。此法分为正向的最佳匹配法和逆向的最佳匹配法,其出发点是:在词典中按词频的大小顺序排列词条,以求缩短对分词词典的检索时 间,达到最佳效果,从而降低分词的时间复杂度,加快分词速度。实质上,这种方法也不是一种纯粹意义上的分词方法,它只是一种对分词词典的组织方式。OM 法的分词词典每条词的前面必须有指明长度的数据项,所以其空间复杂度有所增加,对提高分词精度没有影响,分词处理的时间复杂度有所降低。

此种方法优点是简单,易于实现。但缺点有很多:匹配速度慢;存在交集型和组合型歧义切分问题;词本身没有一个标准的定义,没有统一标准的词集;不同词典产生的歧义也不同;缺乏自学习的智能性。

基于统计的分词方法

该方法的主要思想:词是稳定的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻出现的概率或频率能较好地反映成词的可信度。可以对训练文本中相邻出现的各个字的组合的频度进行统计,计算它们之间的互现信息。互现信息体现了汉字之间结合关系的紧密程度。当紧密程 度高于某一个阈值时,便可以认为此字组可能构成了一个词。该方法又称为无字典分词。

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

在实际应用中此类分词算法一般是将其与基于词典的分词方法结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。

基于语义的分词方法

语义分词法引入了语义分析,对自然语言自身的语言信息进行更多的处理,如扩充转移网络法、知识分词语义分析法、邻接约束法、综合匹配法、后缀分词法、特征词库法、矩阵约束法、语法分析法等。

扩充转移网络法

该方法以有限状态机概念为基础。有限状态机只能识别正则语言,对有限状态机作的第一次扩充使其具有递归能力,形成递归转移网络 (RTN)。在RTN 中,弧线上的标志不仅可以是终极符(语言中的单词)或非终极符(词类),还可以调用另外的子网络名字分非终极符(如字或字串的成词条件)。这样,计算机在 运行某个子网络时,就可以调用另外的子网络,还可以递归调用。词法扩充转移网络的使用, 使分词处理和语言理解的句法处理阶段交互成为可能,并且有效地解决了汉语分词的歧义。

矩阵约束法

其基本思想是:先建立一个语法约束矩阵和一个语义约束矩阵, 其中元素分别表明具有某词性的词和具有另一词性的词相邻是否符合语法规则, 属于某语义类的词和属于另一词义类的词相邻是否符合逻辑,机器在切分时以之约束分词结果。

基于理解的分词方法

基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。目前基于理解的分词方法主要有专家系统分词法和神经网络分词法等。

专家系统分词法

从专家系统角度把分词的知识(包括常识性分词知识与消除歧义切分的启发性知识即歧义切分规则)从实现分词过程的推理机中独立出来,使知识库的维护与推理机的实现互不干扰,从而使知识库易于维护和管理。它还具有发现交集歧义字段和多义组合歧义字段的能力和一定的自学习功能。

神经网络分词法

该方法是模拟人脑并行,分布处理和建立数值计算模型工作的。它将分词知识所分散隐式的方法存入神经网络内部,通过自学习和训练修改内部权值,以达到正确的分词结果,最后给出神经网络自动分词结果,如使用 LSTM、GRU 等神经网络模型等。

神经网络专家系统集成式分词法

该方法首先启动神经网络进行分词,当神经网络对新出现的词不能给出准确切分时,激活专家系统进行分析判断,依据知识库进行推理,得出初步分析,并启动学习机制对神经网络进行训练。该方法可以较充分发挥神经网络与专家系统二者优势,进一步提高分词效率。

以上便是对分词算法的基本介绍。

中文分词原理及工具

原理中文分词,即ChineseWordSegmentation,即将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那么回事,但分词效果好不好对信息检索、实验结果还是有很大影响的,同时分词的背后其实是涉及各种各样的... 查看详情

solr中文分词

...,我们把“村村通工程”名词化,分词结果为: 说说中文分词中文分词器有多中,常用的有IKAnalyzer、mmseg4j。前者最新版本更新到2012年,所以使用的时候要注意可能版本上有不兼容的情况,由于它是一个开源的,基于java语... 查看详情

jiba中文分词原理

中文分词就是将一个汉字序列分成一个一个单独的词。现有的分词算法有三大类:基于字符串匹配的分词:机械分词方法,它是按照一定的策略将待分析的字符串与一个充分大的机器词典中的词条进行匹配,若在词典中找到某个... 查看详情

python中文分词库——jieba的用法(代码片段)

...段来获得其中的每个单词,这种手段就叫分词。而jieba是Python计算生态中非常优秀的中文分词第三方库,需要通过安装来使用它。jieba库提供了三种分词模式,但实际上要达到分词效果只要掌握一个函数就足够了,非常的简单有... 查看详情

结巴分词

在采集美女站时,需要对关键词进行分词,最终采用的是python的结巴分词方法.中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词。其基本实现原理有三点:基于Trie树结构实现高效的词图扫描,生成句子中汉... 查看详情

python中的jieba库(代码片段)

目录jieba库一、简介1、是什么2、安装二、基本使用1、三种模式2、使用语法2.1对词组的基本操作2.2关键字提取2.3词性标注2.4返回词语在原文的起止位置jieba库一、简介1、是什么(1)jieba是优秀的中文分词第三方库中文文本需要通... 查看详情

全网通用python点赞器(俗称刷分机器),想知道原理吗?看完本文你自己也能写个(代码片段)

...;最简单易理解的核心逻辑。全文涉及的伪代码,使用Python编写,由于是伪代码的原因,不懂Python,你也能看懂。文末有不可描述的内容🙈& 查看详情

kafka的这些原理你知道吗(代码片段)

...或者只是在生产环境使用Kafka,那么了解Kafka的内部工作原理不是必须的。不过,了解Kafka的内部工作原理有助于理解Kafka的行为,也利用快速诊断问题。下面我们来探讨一下这三个问题Kafka是如何进行复制的Kafka是如何处理来自生... 查看详情

每天用mybatis,但是mybatis的工作原理你真的知道吗?

...件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了。核心部件:SqlSessionExecutorStatementHandlerParameterHandlerResultSetHandlerTypeHandlerMappedStatementConfiguration在分析工作原理之前,首... 查看详情

lucene是啥?

...,提取关键字”,而不是必须”是什么意思呢?Lucene针对中文单字为词,“我是学生”在standardAnalyzer分割下,分为“我”,“是”,“学”,“生”。车东做了CJKAnalyzer可以分为“我是”,“是学”,“学生”。你也可以用Dijkst... 查看详情

python——jieba优秀的中文分词库(基础知识+实例)(代码片段)

Hello,World!从去年开始学习Python,在长久的学习过程中,发现了许多有趣的知识,不断充实自己。今天我所写的内容也是极具趣味性,关于优秀的中文分词库——jieba库。🏔关于Jieba     🐒什么... 查看详情

如何利用python对中文进行分词处理

python做中文分词处理主要有以下几种:结巴分词、NLTK、THULAC1、fxsjy/jieba结巴的标语是:做最好的Python中文分词组件,或许从现在来看它没做到最好,但是已经做到了使用的人最多。结巴分词网上的学习资料和使用案例比较多,... 查看详情

你知道vue中key的作用和工作原理吗?说说你对它的理解。(代码片段)

你知道vue中key的作用和工作原理吗?说说你对它的理解。原码中找答案:src\\corelvdom\\patch.js-updateChildren()测试代码如下<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"c 查看详情

python画好看的云词图

...的新闻。那生成一张词云图的主要步骤有哪些?这里使用Python来实现,主要分三步:首先是“结巴”中文分词jieba的安装。对于英文文本,word_cloud可以直接对文本源生成词云图。但是对中文的支持没有那么给力,所以需要先使用... 查看详情

python:jieba库的介绍与使用

前言:jieba是优秀的中文分词第三方库,由于中文文本之间每个汉字都是连续书写的,我们需要通过特定的手段来获得其中的每个词组,这种手段叫做分词,我们可以通过jieba库来完成这个过程。目录:一... 查看详情

python中文分词维特比算法为啥在输入字符超过一定长度后会发生错误

参考技术A程序错误,即英文的bug,也称为缺陷,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。早期的计算机由于体积非常庞大,有些小虫子可能会钻入机器内部,造成计算... 查看详情

面试大厂一定离不开的——threadlocal,它的实现原理你知道吗?(代码片段)

使用场景假设我们有一个数据库连接管理类:classConnectionManagerprivatestaticConnectionconnect=null;privatestaticStringurl=System.getProperty("URL");publicstaticConnectionopenConnection()if(connect==null)tryconnect=Dri 查看详情

ik中文分词器原理(代码片段)

目录1.字符类型分类目前共有5种字符类型:staticintidentifyCharType(charinput)  if(input>='0'&&input<='9')     returnCHAR_ARABIC;//阿拉伯数字       elseif((input>='a' 查看详情