精华内容
下载资源
问答
  • 这份代码是我们专业的一个实验,内容包含了文本分词和文本分类。分别使用了正向最大匹配算法和KNN算法。分词速度平均153295词/秒,189100字符/秒。文本分类使用tf-idf计算单词权重进行特征选择,我测试时选择前100个...
  • 最牛的分词算法,可直接应用 :分析了中文分词词典的机制,提出了一种改进的整词分词字典结构,并针对机械分词算法的特点,将其与概率算法相结 合,探讨了一种中文自动分词概率算法。采用哈希及二分法对词典进行分词...
  • 这份代码是我们专业的一个实验,内容包含了文本分词和文本分类。分别使用了正向最大匹配算法和KNN算法。分词速度平均153295词/秒,189100字符/秒。文本分类使用tf-idf计算单词权重进行特征选择,我测试时选择前100个...
  • 压缩包内容包含了文本分词和文本分类所必需的数据集(10000多份文档)、多份词典(包括停用词),python实现代码以及代码生成日志txt文件。
  • 基于文本分词算法

    2011-04-03 13:43:19
     与基于理解的分词算法和基于统计的分词算法相比,基于文本匹配的算法更加通用。基于文本匹配的算法又称之为“机械分词算法”,他是它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,...

          与基于理解的分词算法和基于统计的分词算法相比,基于文本匹配的算法更加通用。基于文本匹配的算法又称之为“机械分词算法”,他是它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功,可识别出一个词。按照扫描方向的不同,文本匹配分词方法可以分为正向匹配和逆向匹配两种;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。

    常用的几种机械分词方法如下:

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

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

    3) 最少切分(使每一句中切出的词数最小)。

    其他的还有将上述各种方法相互组合形成的分词算法,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。本文中着重讨论正向最大匹配法和逆向最大匹配法。

    由于机械分词算法的准确性取决于算法的准确性与词库完备性两个方面。在本文中设想词库充分大,包含需要的词语。

    一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。

    我们先看两句中文:

    1) 长春市长春节致辞

    2) 长春市长春天店

    我们假使词库中包含如下词语“长春”,“长春市”,“市长”,“春节”,“致辞”,“春天”,“药店”,“春天店”等。

    用正向最大匹配法得到的结果是:

    长春市/长春//致辞(分成4个词,其中“节”未匹配到,语义错误)

    长春市/长春/天店(分成3个词,都匹配到,语义正确)

    用逆向最大匹配法得到的结果是:

    长春/市长/春节/致辞(分成4个词,都匹配到,语义正确)

    长春/市长/春天店(分成3个词,都匹配到,语义错误)

    从此,我们可以看到正向最大匹配法和逆向最大匹配法的利弊所在:都能够正确解释部分中文,同时都有一些无法区分。

    是否可以考虑将这两种匹配法结合起来,各取所长呢?答案是肯定的。

    首先,我们对同一个词用正向最大匹配法和逆向最大匹配法分别切词,再将结果进行比较。如切分“长春市长春节致辞”,因为正向最大匹配法有一个词语无法匹配,故选择使用逆向最大匹配法作为结果。

    其次,我们可以引入词频的概念,及每一个词语都会根据其在汉语中出现的概率获得一个词频值。我们对“长春市长春天店”进行两种方法的分词,但是因为逆向最大匹配法得到的“春天店”的词频相比于其他词语的词频要低很多。我们可以认为这种分词方法得到的结果不通用,取正向最大匹配法得结果。

    当然,还可以将其他的一些方法(如扫描标志法,词性检查法等)与这两种匹配法相结合,以获得更好更准确的分词效果。

     

    展开全文
  • 中文分词算法

    千次阅读 2019-03-02 22:00:20
    分词算法文本挖掘的基础,通常对整个模型的效果起着较大的决定作用。中文分词算法主要分为基于词表的分词算法、基于统计模型的分词算法、基于序列标注的分析算法。下面我们来一一剖析吧 准备好了吗!迎接疾风吧,...

    写在最前面:

    由于我们chinese language的特殊性,不和英文中有天然空格符一样,我们需要将汉字序列切分成单独的词。

    分词算法是文本挖掘的基础,通常对整个模型的效果起着较大的决定作用。中文分词算法主要分为基于词表的分词算法、基于统计模型的分词算法、基于序列标注的分析算法。下面我们来一一剖析吧

    准备好了吗!迎接疾风吧,数学能让人清醒!!!

    目录

    1.基于词表的分词算法

        1.1正向最大匹配法(FMM)

        1.2逆向最大匹配法(BMM)

        1.3双向最大匹配法

    2.基于统计模型的分析算法

        2.1基于N-gram语言模型的分词方法

    3.基于序列标注的分词算法

        3.1基于HMM的分词方法

        3.2基于MEMM的分词方法

        3.3基于CRF的分词方法

        3.4基于深度学习的端对端的分词方法

    1.基于词表的分词算法

        1.1正向最大匹配法(FMM)

    概念:对于输入的一个文本序列从左至右,以贪心的算法切分出当前位置上长度最大的词

    分词原理:单词的颗粒度越大,所能表示的含义越确切

    分词步骤:

    • 首先我们有一个词库word_dict还一个待分词的字符串s,首先我们计算得到词库中最长词语的长度假设为m,从字符串第一个位置开始,选择一个最大长度的词长片段,如果该字符串的长度不足最大词长,则选择该全部字符串;
    • 判断选择出来的字符串片段是否在词库中,若在,则将此词分离出来,若不在,则从右边开始,逐一减少一个字符,直到这个片段存在在词典中结束,或者以只剩下最后一个字结束;
    • 字符串变为上一步截取分词后剩下的部分序列,直到序列完全被分割。

    哈哈哈,上面肯定看的迷迷糊糊的,大家都这么过来的,文字太多容易视觉疲劳,那我们来举个小小的栗子吧。

    比如说待分割的序列s=‘我爱长沙理工大学’,然后我们的word_dict={'喜欢',‘长沙’,‘长沙理工大学’,...}假设其中最长词语的长度是6,接下来步骤就是

     

    • ‘我爱长沙理工’(不在)-->'我爱长沙理‘(不在)-->'我爱长沙’(不在)-->'我爱长'(不在)-->'我爱'(不在)-->'我' ====剩余一个字,加入词典
    • ‘爱长沙理工大’(不在) -->'爱长沙理工'(不在)-->’爱长沙理‘(不在)-->'爱长沙'(不在)-->'爱长'(不在)-->'爱'====剩余一个字,加入词典
    • '长沙理工大学'====在词典中,加入,遂分割完毕

    于是"我爱长沙理工大学"就分割成了"我/爱/长沙理工大学"

     

        1.2逆向最大匹配法(BMM)

        如果比较深入的理解啦1.1中所说的正向最大匹配,那么只要将正向从左至右筛选的顺序换成从右至左筛选就好了。

        其实90%(这个数字我乱编的,你可以理解成为大部分的意思)的情况下正向最大匹配法和逆向最大匹配法分词的结果都是一样的,但是也存在不一样的哟,比如说'结婚的和尚未结婚的'通过FMM可能会被分割成'结婚/的/和尚/未/结婚的/',但是通过BMM可能就会被分割成'结婚/的/和/尚未/结婚/的'

     

        1.3双向最大匹配法

        双向最大匹配法就是将正向和逆向最大匹配法进行比较得出最后分词结果,在中文信息处理系统中被广泛运用

    启发式规则:

    1. 如果正反向分析结果词数不同,则取分析数较少的那个

    2. 如果分词结果词数相同

    •  分词结果相同,就说明没有歧义,可返回任意一个
    •  分词结果不同,返回其中单字较少的那个

     

    2.基于统计模型的分析算法

        2.1基于N-gram语言模型的分词方法

        wikipedia上有关n-gram的定义: 
        n-gram是一种统计语言模型,用来根据前(n-1)个item来预测第n个item。在应用层面,这些item可以是音素(语音识别应用)、字符(输入法应用)、词(分词应用)或碱基对(基因信息)。一般来讲,可以从大规模文本或音频语料库生成n-gram模型。 习惯上,1-gram叫unigram,2-gram称为bigram,3-gram是trigram。还有four-gram、five-gram等,不过大于n>5的应用很少见。
     

    如何计算一个句子出现的概率

    假设句子s=w1,w2,...wn,那么不妨把s展开表示

                                       p(s) = p(w1,w2,...wn) = p(w1)p(w2|w1)p(w3|w1,w2)***p(wn|w1,...wn-1)

    那么问题来了,计算p(w1)简单,p(w2|w1)也能算,p(wn|w1,w2,..wn-1)就额非常费力了,所以我们要很自然的引出马尔科夫链,假设一个词wi出现的概率只与它前面的wi-1词有关,那么

                                       p(s) = p(w1,w2,...wn) = p(w1)p(w2|w1)p(w3|w2)...p(wn|wn-1)

    常用于搜索引擎

    3.基于序列标注的分词算法

        3.1基于HMM的分词方法

        我要说的第一点就是他是个生成模型,所谓生成模型即是学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。

        他是将分词问题做个转换,将分词问题转换为对句子中的每个字打标注,标注这个字要么是一个词的开始B(begin),要么是一个词的中间M(middle),要么是一个词的结束(E),要么是单个字S(single),我们将句子标注好了,那么分词结果也就出来了

    X
    Y S S B M M M M E

     基于HMM的分词方法:属于由字构词的分词方法,由字构词的分词方法思想并不复杂,它是将分词问题转化为字的分类问题(序列标注问题)。从某些层面讲,由字构词的方法并不依赖于事先编制好的词表,但仍然需要分好词的训练预料 。

    它满足两个假设

    • markov链是齐次一阶的
    • 观测独立假设 

    由于HMM是一个生成模型,X为观测序列,Y为隐序列,则X,Y的联合分布为

     

        3.2基于MEMM的分词方法

           猜猜我要说的第一点是什么,没错,它是个判别式模型!!!,它是直接通过P(Y|X)来建模的

    P(i | i',o)通过最大熵分类器建模得到 ,即

    其中Z(o,i')为归一化因子,fa(o,i) 是特征函数,需自己定义,而入a为特征函数的权重,需要通过训练得到 

    求解步骤:

    • 先定义好特征函数fa(o,i)
    • 根据已有数据训练得到入a,即得到模型
    • 用模型得到数据标注或者求概率

    优点:相比于HMM

    • 打破了观测独立假设:克服了HMM输出独立性问题,通过引入特征函数使得模型比HMM拥有更多信息,而且最大熵则从全局角度来建模,它“保留尽可能多的不确定性,在没有更多的信息时,不擅自做假设”

    缺点:Lable Bias Problem(标注偏差问题)

    •  由于MEMM的当前状态只与当前观测以及上一状态有关,导致隐状态中有更少转移的状态拥有的转移概率普遍较高,简单的说就是MEMM中概率最大路径更容易出现在转移少的状态中。
    • 解决方案:引入全局化特征可以解决标注偏置问题,那么就很自然的说到我们的3.3CRF方法啦

        3.3基于CRF的分词方法

           CRF是无向图模型 

    在这里Z(O)是用来归一化的

    P (I|O)表示在给定观测序列O=(O1,O2,...Oi)的情况下,我们用CRF求出的隐序列I = (I1,I2,...Ii)的概率,注意这里I是一个序列,有多个元素

    优点:

    • 克服了HMM的观测独立假设以及MEMM标注偏差问题

    缺点:

    • 全局化特征模型会更复杂,导致训练周期长,计算量较大

        3.4基于深度学习的端对端的分词方法

        最近,基于深度神经网路的序列标注算法在词性标注、命名实体识别问题上取得了优秀的进展。词性标注、命名实体识别都属于序列标注问题,这些端到端方法可以迁移到分词问题上,免去CRF的特征模板配置问题。但与所有深度学习的方法一样,它需要较大的语料库才能体现优势。

     

       BiLSTM-CRF的网络结构如上图所示,输入层是一个embedding层,经过双向LSTM网络编码,输出层是一个CRF层,经过双向LSTM网络输出的实际上是当前位置对于各词性的得分,CRF层的意义是对词性得分加上前一位置的词性概率转移的约束,其好处是引入一些语法规则的先验信息 。

       其实说白了,就是一个深度学习的套路啦,扔进去训练就完事了。

     

    写在后面:其实还有很多细枝末节没有讲清楚,我自己再看也是晕晕的,但是不要怕,多看看,多想想,自然而然也就懂了,各位加油,如有错误,还肯定各大佬批评指正

    参考:各路博客以及各路论文以及各路视频网站,只是小小总结一下,感谢巨人的肩膀。

    展开全文
  • 分词算法

    千次阅读 2012-06-11 16:34:07
    自动分词算法的分类 我们可以将现有的分词算法分为三大类:基于字符串匹配的分词方法、 基于理解的分词方法和基于统计的分词方法。 1、 基于字符串匹配的分词方法 这种方法又叫做机械分词方法,它是按照...
    自动分词算法的分类

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

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

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

    1)  、正向最大匹配
    2) 、逆向最大匹配
    3)  、最少切分(使每一句中切出的词数最小)

    还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法
    结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般

    很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。
    统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错
    误率为1/245。(--这可能是因为汉语的中心语靠后的特点。)但这种精度还远远不能满

    足实际的需要。由于分词是一个智能决策过程,机械分词方法无法解决分词阶段的两大
    基本问题:歧义切分问题和未登录词识别问题。实际使用的分词系统,都是把机械分词
    作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。

    一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和
    切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进
    机械分词,从而减少匹配的错误率。

    另一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助
    ,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的
    准确率。

    对于机械分词方法,可以建立一个一般的模型,形式地表示为ASM(d,a,m),即
    Automatic  Segmentation  Model。其中,

    d:匹配方向,+1表示正向,-1表示逆向;
    a:每次匹配失败后增加/减少字串长度(字符数),+1为增字,-1为减字;
    m:最大/最小匹配标志,+1为最大匹配,-1为最小匹配。

    例如,ASM(+,  -, +)就是正向减字最大匹配法(即MM方法),ASM(-, -,  +)就是逆向减字

    最大匹配法(即RMM方法),等等。对于现代汉语来说,只有m=+1是实用的方法。

    用这种模型可以对各种方法的复杂度进行比较,假设在词典的匹配过程都使用顺序查找
    和相同的计首字索引查找方法,则在不记首字索引查找次数(最小为log<汉字总数>  =
    12 -  14)和词典读入内存时间的情况下,对于典型的词频分布,减字匹配ASM(d,-,m)的


    复杂度约为12.3次,增字匹配ASM(d,+,m)的复杂度约为10.6。

    另外,还可以证明,早期曾流行一时的"切分标志字串"预处理方法是一个毫无必要的技术,
    它增加了一遍扫描"切分标志词典"的时空复杂性,却并没有提高分词精度,因为所谓的切
    分标志其实都已经隐含在词典之中,是对词典功能的重复。实际上"切分标志"也没有标记
    歧义字段的任何信息。因此,在近来的分词系统中,已经基本上废弃了这种"切分标志"
    预处理方法。

    2、基于理解的分词方法

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

    3、基于统计的分词方法

    从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,
    就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可
    信度。可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。
    定义两个字的互现信息为:  M(X,Y)=logP(X,Y)/P(X).P(Y),其中 P(X,Y)是汉字X、Y
    的相邻共现概率,P(X)  、P(Y)分别是X、Y在语料中出现的概率。互现信息体现了汉字
    之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成了
    一个词。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做
    无词典分词法或统计取词方法。但这种方法也有一定的局限性,会经常抽出一些共现频度

    高、但并不是词的常用字组,例如"这一"、"之一"、"有的"、"我的"、"许多的"等,
    并且对常用词的识别精度差,时空开销大。实际应用的统计分词系统都要使用一部基本
    的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将
    串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了
    无词典分词结合上下文识别生词、自动消除歧义的优点。


    几种典型的自动分词系统评介

    衡量自动分词系统的主要指标是切分精度和速度。由于切分速度与所运行的软、
    硬件平台密切相关,在没有注明运行平台时,切分速度只是一个参考指标,没有可比性。


    另外,所注明的切分精度都是开发者自测试的结果。

    1、几个早期的自动分词系统
    自80年代初中文信息处理领域提出了自动分词以来,一些实用性的分词系统逐步
    得以开发,其中几个比较有代表性的自动分词系统在当时产生了较大的影响。

    CDWS分词系统是我国第一个实用的自动分词系统,由北京航空航天大学计算机系于1983年
    设计实现,它采用的自动分词方法为最大匹配法,辅助以词尾字构词纠错技术。其分词速
    度为5-10字/秒,切分精度约为1/625,基本满足了词频统计和其他一些应用的需要。这是
    汉语自动分词实践的首次尝试,具有很大的启发作用和理论意义。例如,它比较科学地
    阐明了汉语中的歧义切分字段的类别、特征以及基本的对策(--切分歧义"标准分类"!)。

    ABWS是山西大学计算机系研制的自动分词系统,系统使用的分词方法称为"两次扫描
    联想-回溯"方法,用联想-回溯来解决引起组合切分歧义。系统词库运用了较多的词法、
    句法等知识。其切分正确率为98.6%(不包括非常用、未登录的专用名词),运行速度为
    48词/分钟。

    CASS是北京航空航天大学于1988年实现的分词系统。它使用的是一种变形的最
    大匹配方法,即正向增字最大匹配。它运用知识库来处理歧义字段。其机械分词速度为
    200字/秒以上,知识库分词速度150字/秒(没有完全实现)。

    书面汉语自动分词专家系统是由北京师范大学现代教育研究所于1991前后研制实现的,
    它首次将专家系统方法完整地引入到分词技术中。系统使知识库与推理机保持相对独立,
    知识库包括常识性知识库(词条的词类24种、歧义词加标志及其消除规则编号、消歧的
    部分语义知识,使用关联网络存储)和启发性知识库(消歧产生式规则集合,用线性表
    结构存储),词典使用首字索引数据结构。通过引入专家系统的形式,系统把分词过程
    表示成为知识的推理过程,即句子"分词树"的生长过程。据报道,系统对封闭原料的切分
    精度为99.94%,对开放语料的切分精度达到99.8%,在386机器上切分速度达到200字/秒
    左右。这些性能代表了当时的一流成就。
    现在看来,这个系统的一个重要理论意义是进一步研究清楚了歧义切分字段,即把歧义
    字段分为词法级、句法级、语义级和语用级(--"四级分类"),并且统计出它们的分布
    分别为84.1%、10.8%、3.4%和1.7%,还给出了每一种歧义的处理策略,从而比较彻底地
    剖析了汉语歧义切分字段的性质。它的另外一个理论意义是给出了当前基于句法和语义
    处理技术的歧义分析精度的上限("语义级理想切分精度"1/6250),并且说明只有综合
    运用各种知识、信息和推理机制的分析方法才又可能趋近理想切分精度。尽管本系统由于
    结构复杂、知识库建造困难且并不像预想的那么易于维护、效率不易提高等原因而未能
    广泛流行,但是其理论分析和指导思想已获得了普遍关注,影响了众多后继系统的开发。

    2、清华大学早期SEG分词系统

    此系统提供了带回溯的正向、反向、双向最大匹配法和全切分-评价切分算法,由用户
    来选择合适的切分算法。其特点则是带修剪的全切分-评价算法。系统考虑到了切分盲
    点的问题(某些字串永远不会被某种分词方法匹配出来),由此提出了全切分的概念,
    即找出输入字串的所有可能的子串,然后利用某种评价方法从所有这些可能的子串中
    选出最佳子串序列作为分词结果。为了解决全切分所带来的组合爆炸问题,又引进了
    对全切分过程进行修剪的方法,强制性地截止某些全切分的进行。用户在使用时,对
    于歧义较少的语料,可采用正向或反向最大匹配法;对于有较多交叉
    歧义的语料,可使用双向最大匹配法;对于其它歧义较大的语料,则采用全切分-评价
    算法,并需要采用一个合适的评价函数。由于对具体语料的统计参数设置了不确切初值,

    全切分-评价算法在第一、二遍切分过程中的正确率较低,随着切分的多遍进行,评价
    函数逐渐得以矫正,系统的切分精度逐步得以提高。经过封闭试验,
    在多遍切分之后,全切分-评价算法的精度可以达到99%左右。

    3、清华大学SEGTAG系统

    此系统着眼于将各种各类的信息进行综合,以便最大限度地利用这些信息提高切分精度。
    系统使用有向图来集成各种各样的信息,这些信息包括切分标志、预切分模式、其他切分
    单位。为了实现有限的全切分,系统对词典中的每一个重要的词都加上了切分标志,即标
    志"ck"或"qk"。"qk"标志表示该词可进行绝对切分,不必理会它是否产生切分歧义;
    "ck"标志表示该词有组合歧义,系统将对其进行全切分,即保留其所有可能的切分方式。
    系统通过这两种标志并使用几条规则以实现有限的全切分,限制过多的切分和没有必要的
    搜索。规则包括:

    1、无条件切出qk类词;
    2、完全切分ck类词(保留所有可能子串);
    3、对没有标记(qk或ck)的词,若它与别的词之间存在交叉歧义,则作全切分;
    否则将其切出。

    为了获得切分结果,系统采用在有向图DAG上搜索最佳路径的方法,使用一个评价函数
    EVALUATE  Path),求此评价函数的极大值而获得最佳路径Pmax。所运用的搜索算法有
    两种,"动态规划"和"全切分搜索+叶子评价",使用了词频、词类频度、词类共现频度
    等统计信息。通过实验,该系统的切分精度基本上可达到99%左右,能够处理未登录词
    比较密集的文本,切分速度约为30字/秒。


    4、国家语委文字所应用句法分析技术的汉语自动分词

    此分词模型考虑了句法分析在自动分词系统中的作用,以更好地解决切分歧义。切词
    过程考虑到了所有的切分可能,并运用汉语句法等信息从各种切分可能中选择出合理
    的切分结果。其过程由两步构成:一、对输入字串进行处理,得到一个所有可能的切
    分字串的集合,即进行(不受限的)全切分;二、利用句法分析从全切分集合中将某
    些词选出来,由它们构成合理的词序列,还原为原输入字串。系统使用一个自由传播
    式句法分析网络,用短语文法描述句法规则,并将其表示为层次化网络图,通过此网
    络的信息传递过程来进行选词。网络的节点分为词类节点(终结符节点)和规则类节
    点(非终结符节点)。词类节点保存词的信息;规则类节点对信息进行合并和句法、
    语义分析,生成新的信息,并将本节点的信息传递出去(也就是用文法产生式进行
    归约,并进行属性计算-作者注)。网络运行的初态是所有节点状态为NO,各种可能
    切分的字串进入响应相应的词类节点(终结符节点),然后开始运用文法进行计算。
    当网络的最高层节点S(文法起始符号)达到稳定状态OK时,计算结束,在最高节点处
    输出最后的切分结果。

    从一般的角度来看,应用句法分析技术进行切词的方法是一种"生成-测试"方法,它是一
    种常用的AI问题求解方法,包括两个步骤:生成步-找出所有可能的解(假设);测试步
    -对各个假设进行检验,找出合格者。在应用句法分析进行切词时,其测试步是使用汉语
    的句法规则检验某种切分结果是否构成合法的汉语句子。这样可以将句法分析理论的各
    种成果用于切词之中,有多种句法分析技术可以应用,常见的是ATN分析、CYK分析
    (Chart  Parsing)、G-LR分析等。可以将这种方法称做"切词-句法分析一体化"方法。
    随着软硬件水平的不断提高,直接运用时空消耗比较大的句法分析来检查分词结果的
    方法正在日益显现其优越性。

    5、复旦分词系统

    此系统由四个模块构成。

    一、预处理模块,利用特殊的标记将输入的文本分割成较短的汉字串,这些标记包括
    标点符号、数字、字母等非汉字符,还包括文本中常见的一些字体、字号等排版信息。
    一些特殊的数词短语、时间短语、货币表示等,由于其结构相对简单,即由数词和特征
    字构成构成,也在本阶段进行处
    理。为此系统特别增加一次独立的扫描过程来识别这些短语,系统维护一张特征词表,
    在扫描到特征字以后,即调用这些短语的识别模块,确定这些短语的左、右边界,然后
    将其完整地切分开;

    二、歧义识别模块,使用正向最小匹配和逆向最大匹配对文本进行双向扫描,如果两种
    扫描结果相同,则认为切分正确,否则就判别其为歧义字段,需要进行歧义处理;

    三、歧义字段处理模块,此模块使用构词规则和词频统计信息来进行排歧。构词规则包
    括前缀、后缀、重叠词等构词情况,以及成语、量词、单字动词切分优先等规则。在使
    用规则无效的情况下,使用了词频信息,系统取词频的乘积最大的词串作为最后切分结
    果;最后,此系统还包括一个未登录词识别模块,以解决未登录词造成的分词错误。未登
    录词和歧义字段构成了降低分词准确率的两大因素,而未登录词造成的切分错误比歧义字
    段更为严重,实际上绝大多数分词错误都是由未登录词造成的。系统对中文姓氏进行了
    自动识别,它利用了中文姓名的用字规律、频率,以及姓名的上下文等信息。通过对十万
    以上的中文姓名进行抽样综合统计,建立了姓氏频率表和名字用字频率表,由此可获得
    任意相邻的二、三个单字构成姓氏的概率大小和某些规律,再利用这些字串周围的一些
    称谓、指界动词和特定模式等具有指示意义的上下文信息,对字串是否构成姓名进行
    辨别。实验过程中,对中文姓氏的自动辨别达到了70%的准确率。系统对文本中的地名和
    领域专有词汇也进行了一定的识别。

    6、哈工大统计分词系统
    该系统是一种典型的运用统计方法的纯切词系统,它试图将串频统计和词匹配结合起来。

    系统由三个部分构成:

    一、预处理模块,利用显式和隐式的切分标记(标点符号、数字、ASCII字符以及出现
    频率高、构词能力差的单字词、数词+单字常用量词模式)将待分析的文本切分成短的
    汉字串,这大大地减少了需要统计的(无效)字串的数量和高频单字或量词边界串;

    二、串频统计模块,此模块计算各个已分开的短汉字串中所有长度大于1的子串在局
    部上下文中出现的次数,并根据串频和串长对每个这样的子串进行加权,加权函数为 
    (F为串频,L为串长,即串中汉字个数)。根据经验,局部上下文中取为200字左右。
    局部上下文的串频计算使用一个滑动窗口(为一个队列式缓冲区,保存当前待切分汉
    字串及其前后20个短串),当当前待切分汉字串处理完之后,窗口下移一个短串(中心
    变为相邻下一个短串)。系统采用一个外散列表来记录窗口中的短串,以加快窗口中串
    频计数。散列函数取为汉字的GB-80位码(二级汉字共用入口95),每个桶中保存窗口中
    每一行(短串)上的汉字位置:(短串的行号,汉字列号),并且对于在窗口中出现多
    次的汉字位置用一个链指针连接起来,则计算某个字串在窗口中出现的频度时,不必将
    该字串与窗口中的短串逐个匹配,而只需统计在该字串中的各个汉字所对应的位置链表
    中能够相邻的位置的序列的个数即可。此外,还需要根据词缀集(前、后缀集合)对字
    串的权值进行提升,例如"处理器"中"处理"的权值很高,但由于对"处理器"的权值作了
    提升(达到或超过了"处理"),就不会切成"处理/器"。如果某个汉字串的权值超过某一
    阈值D(取为40),则将此汉字串作为一个新识别的词,将其存入一临时词库中;

    三、切分模块,首先用临时词库对每个短的汉字串进行切分,使用的是逐词遍历算法,
    再利用一个小型的常用词词典对汉字短串中未切分的子串进行正向最大匹配分词。对于
    短汉字串中那些仍未切分的子串,则将所有相邻单字作为一个权值很低的生词(
    例如"玛"、"莉")。其中每个模块都对待分析的文本进行了一次扫描,因而是三遍扫描
    方法。此系统能够利用上下文识别大部分生词,解决一部分切分歧义,但是统计分词方
    法对常用词识别精度差的固有缺点仍然存在(例如切出"由/来"、"语/用"、"对/联"等)。
    经测试,此系统的分词错误率为1.5%,速度为236字/秒。
     

    7、杭州大学改进的MM分词系统
    考虑到汉语的歧义切分字段出现的平均最大概率为1/110,因而纯机械分词的精度
    在理论上能够达到1-1/110=99.1%。那么是否还有更一般、精度更高的机械分词系统呢?
    根据统计,汉语的局部(词法一级)歧义字段占了全部歧义的84%,句法歧义占10%,如果
    提高系统处理这两类歧义的准确率,则可以大幅度提高切分精度。这方面的改进导致了改
    进的MM分词算法。将其阐述如下。

    通过对交叉歧义字段的考察,发现其中80%以上可以通过运用一条无需任何语言知识
    的"归右原则"(交叉歧义字段优先与其右边的字段成词)就可以获得正确切分,--这是因
    为在多数情况下汉语的修饰语在前、中心词在后,因而"归右"好于"归左"。  "归右原则"
    可以使机械分词的精度上升到99.70%。这种考察给出了鼓舞人心的结果,有可能使机械
    分词系统达到这样的理论精度。

    不过"归右原则"还有需要修正的地方,既对于"连续型交叉歧义"会发生错误,需要补
    充一条"左部结合"原则:若ABCDE为连续型交叉歧义字段,"归右原则"产生切分
    A  B C D E 再由"左结合原则"(合并最左边的A、B)而得到AB C DE。

    例如"结合成分子"->"结 合 成 分子"->"结合  成 分子"。
    但是仍然还有例外,例如"当结合成分子时"->"当 结合 成分  子时";为此引入"跳跃
    匹配",在词典中定义"非连续词"(实际上为串模式-作者注)"当*时",然后在切分时首
    先分出"当 结合成分子  时",然后再用"归右+左结合"切分中间的歧义字段。以上3项技
    术将机械分词的理论切分精度提高到了99.73%。

    综合以上思想,就建立了如下改进的MM分词算法:

    正向扫描
    +  增字最大匹配(包括"跳跃匹配非连续词")
    + 词尾歧义检查(逐次去掉首字做MM匹配以发现交叉歧义字段)
    + "归右原则"(  对于"连续型交叉歧义"还需要"左结合原则")。

    系统的词典采用一级首字索引结构,词条中包括了"非连续词"(形如C1…*  Cn)。系统精
    度的实验结果为95%,低于理论值99.73%,但高于通常的MM、RMM、DMM方法。

    ///bs: 有机会见面  就出了问题;

    8、Microsoft Research  汉语句法分析器中的自动分词
    微软研究院的自然语言研究所在从90年代初开始开发了一个通用型的多国语言处理
    平台NLPWin,最初阶段的研究都是对英语进行的。大约从1997年开始,增加了中文处理
    的研究,从而使NLPWin成为能够进行7国语言处理的系统(其中日语和韩语部分的研究已

    较早地开展起来)。中文部分的研究在开始时缺少必要的基础资源,于是经过细致的研
    究分析之后,购买了北大计算语言所的《现代汉语语法信息词典》,从此进展顺利,在
    短短的一年半的时间里达到了其它东方语种的处理水平。据报道,NLPWin的语法分析部
    分使用的是一种双向的Chart  Parsing,使用了语法规则并以概率模型作导向,并且将
    语法和分析器独立开。
    NLPWin中文部分的一个特点是将词的切分同句法分析融合起来,即是一种前面提到
    过的"切词-句法分析一体化"方法:在其匹配切词阶段保留所有可能的切分结果(包括
    歧义切分),然后在句法分析阶段使用汉语的句法规则判断切分的合理性,如果对句子
    的某种切分能够成功地建立起完全的句法树,则表示该切分结果是正确的。对于有上下
    文及语用歧义的歧义切分字段,系统将生成两棵以上的分析树(可以使用某种标准进行
    排序)。
    当然,为了提高系统效率,有必要在分词阶段排除尽可能多的局部一级的切分歧义。其
    中使用的技术有:消除所有导致词典中没有对应词条的单字的切分;为词典中的每一个
    词条增加一项"Atomic"属性(为1表示不需要分析其内部字串,为0表示需要保留其内部
    的切分,即是一种组合歧义标志--作者注);以及为每个词增加  LeftCond1、
    RightCond1、LeftCond2、RightCond2  四类字符集合(前两项表示歧义绝对生效,
    后两项表示歧义有比较高的可能性生效,即歧义的直接前后文--作者注);还包括
    一些排歧规则(例如对于连续型歧义字段ABCD,如果AB和CD不与前后词交叉、A或D
    是名词、ABC和BCD都不是词,则切分出AB/CD:"昨天下午"->"昨天/下午")。

    Bits  and Atrributes in Chinese NLPwin (7-9-97)
    Bits ……
    Attributes ……
    For  overlapping ambiguity:
    LeftClue (a record will not be added to tposrecs if  the character on its
    left appears in this list.)
    RiteClue (a record will  not be added to tposrecs if the character on its
    right appears in this  list.)
    LeftHint (a record will be assigned low probability if the character  on its
    left appears in this list.)
    RiteHint (a record will be assigned  low probability if the character on its
    right appears in this  list.)

    实验结果表明,系统可以正确处理85%的歧义切分字段,在Pentium 200  PC上的速度
    约600-900字/秒。考虑到系统对多种切分结果进行了完全的句法分析、对词典每个属性进
    行了完全的查找,这是相当可观的效率。

    我们的评论是:  这是汉语处理的一种有效的综合性途径,值得发扬推广;但这种使用
    "Atomic"属性的方法实际上只是表示了组合型歧义(占不到1/5)的特征,对更普遍的
    交叉型歧义(超过总歧义的4/5)的处理还存在效率和效果更好的方法。
     

    9、北大计算语言所分词系统
    本系统由北京大学计算语言学研究所研制开发,属于分词和词类标注相结合的分词
    系统。由于将分词和词类标注结合起来,系统可利用丰富的词类信息对分词决策提供帮
    助,并且在标注过程中又反过来对分词结果进行检验、调整,同时将基于规则的标注排
    歧与基于语料库统计模型的排歧结合起来,使规则的普遍性与灵活性得到统一,而且对
    未登入词的估算到达了相当高的准确率。系统的处理过程包括了自动切分和初始词性标
    记、切分歧义字段识别、组词和标注预处理、词性标记排歧、切分和词性标注后处理等
    过程,系统的算法综合了多种数据组织和搜索技术,以很低的时空开销实现了高速匹配
    和查找,同时采用了当代计算语言学的统计方法,运用隐Markov过程进行词类标注和排
    歧,对算法的效率和稳固性都作了尽可能的优化。此系统的一大特色是对通用性的强
    调,将最稳定、最常用的4万6千余条现代汉语基本词汇(即将扩充到7万多条)及其有
    关属性组织成为基本词典,这些词的基本地位都是由汉语语言学家逐一检验认可的,
    这是本系统通用性的保证;在此词典的基础上充分利用汉语构词法的研究成果,可以
    识别出大部分的常用词。同时本系统对用户词典机制作了最大限度的扩展,允许用户
    加入3部到30部以上的自定义词典,并允许用户对这些词典的优先顺序自由排列,这样
    就可以用较小规模的多个特殊词典更有针对性地解决具体领域的文本处理。因此本系
    统的语言模型实现了通用性与多样性的有效结合,并到达了极高的效率。经过最近在
    搜索算法上的改进,系统的分词连同标注的速度在Pentium  133Hz/16MB内存机器上的
    达到了每秒3千词以上,而在Pentium  II/64MB内存机器上速度高达每秒5千词。自本
    系统开发以来,已先后向国内和国外十多家单位进行了转让,获得了普遍的好评。
    在1998年4月进行的863全国智能接口评测会上,该系统有良好的表现。由于系统对待
    词的兼类问题的理论观点与评测标准有一些差别,所测得的标注准确率没有达到自测
    试的水平。该系统的词语分类体系一方面承认汉语词存在兼类现象,一方面又不主张
    扩大兼类现象,尽量把相同语法功能的词类当作是一个词类,而把词的具体语法属性
    留到后续过程处理。这些观点与评测标准有所不同。国内还有很多单位开发了分词系
    统,但大部分都没有参加这一具有极强可比性的评测。

     

     

    转自:http://blog.csdn.net/cozmic/article/details/659591

    展开全文
  • 与基于理解的分词算法和基于统计的分词算法相比,基于文本匹配的算法更加通用。基于文本匹配的算法又称之为“机械分词算法”,他是它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若...
  • 分词算法:正向最大匹配算法

    千次阅读 2015-12-14 14:28:21
    分词算法:正向最大匹配算法

    ##正向最大匹配算法
    正向最大匹配算法(FMMFMMFMM)是一种基于词典的分词方法,同样的基于词典的方法还有逆向最大匹配法(RMMRMMRMM),ngramngramngram法.FMMFMMFMM故名思意,左向右扫描寻找词的最大匹配,是一种贪心的思想。
    ##流程

    • 限定词的最大长度
    • 从最大的长度开始在词库中进行匹配只到匹配成功
    • 更新起点的位置继续上一步骤只到全部分完

    ##实验

    词库

    东北
    林业
    大学
    学校
    东北林业大学
    好地方
    学校
    

    文本

    东北林业大学是好学校
    这里是个好地方
    

    Code

    #!/usr/bin/python
    
    import sys
    
    Maxlen=6
    
    def max_match(line,dict):
    	line=line.decode("utf8")
    	word=[]
    	i=0
    	while i<len(line):
    		match = False
    		for id in xrange(Maxlen, 0, -1):
    			tmp=line[i:i+id].encode("utf8")
    			for var in dict:
    				if tmp in var:
    					word.append(tmp)
    					i+=id
    					match=True
    					break
    			if match:
    				break
    		if not match:
    			word.append(line[i].encode("utf8"))
    			i+=1
    	return word		
    	
    if __name__ == "__main__":
    	words=open(sys.argv[1])
    	dict = open(sys.argv[2], "r")
    	out=open("./out.txt","w")
    	List = list(dict)
    	try:
    		for line in words:
    			out.write(" ".join(max_match(line.strip(),List)))
    			out.write("\n")
    	finally:
    		out.close()
    		words.close()
    		dict.close()
    

    实验结果

    东北林业大学 是 好 学校
    这 里 是 个 好地方
    

    更多信息/快速联系博主

    在这里插入图片描述

    展开全文
  • porter stemming 分词算法

    2010-03-09 19:37:53
    分词算法 有ansi c 和java版本 从文本中分离出词语(英文) 从官网可以找到多语言实现: http://tartarus.org/~martin/PorterStemmer/
  • ES分词算法

    千次阅读 2018-11-15 23:34:07
    1、relevance score算法,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度 2、ES使用的是,term frequency/inverse document frequency算法,简称TF/IDF算法 3、term frequency:搜索文本中的...
  • 词典分词是最简单,最常见的分词算法,需要的材料为: 一部词典 一套查词典的规则 简单来说,词典分词就是一个确定的查词与输出的规则系统。词典分词的重点不在于分词本身,而在于支撑词典的数据结构。 ...
  • 中文分词算法分类 三. MMSEG分词工具 四. 斯坦福NLTK分词工具 1 CRF方法实例 一. 文本分词概述 文本分词是将字符串文本划分为有意义的单位的过程,如词语、句子或主题。由计算机实现的文本分词结果也应该...
  • 与基于理解的分词算法和基于统计的分词算法相比 基于文本匹配的算法更加通用 基 于文本匹配的算法又称之为机械分词算法 他是它是按照一定的策略将待分析的汉字串 与一个充分大的机器词典中的词条进行配若在词典中...
  • 中文分词算法研究

    千次阅读 2016-06-30 23:00:47
    分词算法有基于字典、基于规则和基于统计的,这里主要讲基于统计的方法。 中文分词基本算法主要分类 中文分词算法总结 介绍分词语料—— 中文分词入门之资源  互联网时代的社会语言学:基于SNS的文本数据...
  • 中文分词算法基础

    千次阅读 2016-01-02 11:32:41
    中文分词算法现在一般分为三类:基于词典的字符串匹配,基于理解,基于统计的分词。 基于词典的字符串匹配分词:机械分词算法。将待分的字符串与一个充分大的机器词典中的词条进行匹配。分为正向匹配和逆向匹配;...
  • ansj分词算法关键词提取规则

    千次阅读 2016-08-18 23:54:31
    ansj分词算法关键词提取规则
  • jieba分词算法总结

    2020-09-27 11:09:27
    jieba分词算法总结 特点: 支持三种分词模式 –精确模式,试图将句子最精确地切开,适合文本分析; –全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但不能解决歧义; –搜索引擎模式,在精确模式的...
  • 分词算法整理

    千次阅读 2012-04-14 21:20:13
    分词 1.基于词典 基于词典的分词方法,这种方法又...常用的方法:最小匹配算法(Minimum Matching),正向(逆向)最大匹配法(Maximum Matching),逐字匹配算法,神经网络法、联想一回溯法,基于N-最短路径分词算法,以及
  •  TextRank是一种文本排序算法,它利用图模型来提取文章中的关键词,是由 Google 搜索的核心网页排序算法 PageRank改编而来。在介绍TextRank前,我们先简单介绍下什么是PageRank。另外,TextRank不仅能进行关键词...
  • jieba分词算法

    千次阅读 2018-08-09 11:27:27
    –精确模式,试图将句子最精确地切开,适合文本分析;  –全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但不能解决歧义;  –搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,...
  • 首先先介绍一下mmseg分词算法,再详细分析新闻分词所用分词方式及其逻辑。 (一)mmseg分词算法 mmseg是一个非常好用的分词器,开箱即用。那么为什么还要了解其算法呢? 1.没有任何一样技术可以直接适用于任何...
  • 文章目录1、关键词提取2、TF-IDF算法原理3、编程实例 1、关键词提取  关键词是指能反映文本主题或者主要内容的词语。关键词提取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来,是NLP领域的一个重要的子...
  • 国内分词算法

    千次阅读 2018-03-22 17:36:31
    作者:竹间智能 Emotibot...中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块。不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词分词效果...
  • N元分词算法

    千次阅读 2017-03-14 17:45:18
    在自然语言处理中,我们经常需要用到n元语法模型。 其中,有关中文分词的一些概念是我们需要掌握的,譬如: unigram 一元分词,把句子分成...输入的是断好词的文本,每个句子一行。 统计词unigram和bigram的频次,并

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,935
精华内容 11,174
关键字:

文本分词算法