`

中文分词技术(中文分词原理)

阅读更多

一、       为什么要进行中文分词?

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

Lucene中对中文的处理是基于自动切分的单字切分,或者二元切分。除此之外,还有最大切分(包括向前、向后、以及前后相结合)、最少切分、全切分等等。

二、       中文分词技术的分类

我们讨论的分词算法可分为三大类:基于字典、词库匹配的分词方法;基于词频度统计的分词方法和基于知识理解的分词方法。

第一类方法应用词典匹配、汉语词法或其它汉语语言知识进行分词,如:最大匹配法、最小分词方法等。这类方法简单、分词效率较高,但汉语语言现象复杂丰富,词典的完备性、规则的一致性等问题使其难以适应开放的大规模文本的分词处理。第二类基于统计的分词方法则基于字和词的统计信息,如把相邻字间的信息、词频及相应的共现信息等应用于分词,由于这些信息是通过调查真实语料而取得的,因而基于统计的分词方法具有较好的实用性。

下面简要介绍几种常用方法:

1).逐词遍历法。

逐词遍历法将词典中的所有词按由长到短的顺序在文章中逐字搜索,直至文章结束。也就是说,不管文章有多短,词典有多大,都要将词典遍历一遍。这种方法效率比较低,大一点的系统一般都不使用。

2).基于字典、词库匹配的分词方法(机械分词法)

这种方法按照一定策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。识别出一个词,根据扫描方向的不同分为正向匹配和逆向匹配。根据不同长度优先匹配的情况,分为最大(最长)匹配和最小(最短)匹配。根据与词性标注过程是否相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的方法如下:

(一)最大正向匹配法 (MaximumMatchingMethod)通常简称为MM法。其基本思想为:假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前字串中的前i个字作为匹配字段,查找字典。若字典中存在这样的一个i字词,则匹配成功,匹配字段被作为一个词切分出来。如果词典中找不到这样的一个i字词,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串重新进行匹配处理……  如此进行下去,直到匹配成功,即切分出一个词或剩余字串的长度为零为止。这样就完成了一轮匹配,然后取下一个i字字串进行匹配处理,直到文档被扫描完为止。

其算法描述如下:

(1)初始化当前位置计数器,置为0;

(2)从当前计数器开始,取前2i个字符作为匹配字段,直到文档结束;

(3)如果匹配字段长度不为0,则查找词典中与之等长的作匹配处理。

如果匹配成功,

则,

a)把这个匹配字段作为一个词切分出来,放入分词统计表中;

b)把当前位置计数器的值加上匹配字段的长度;

c)跳转到步骤2);

否则

a) 如果匹配字段的最后一个字符为汉字字符,

①把匹配字段的最后一个字去掉;

②匹配字段长度减2;

否则

①把匹配字段的最后一个字节去掉;

②匹配字段长度减1;

b)跳转至步骤3);

否则

a)如果匹配字段的最后一个字符为汉字字符,

则   当前位置计数器的值加2;

否则当前位置计数器的值加1;

b)跳转到步骤2)。

(二)逆向最大匹配法 (ReverseMaximumMatcingMethod)通常简称为RMM法。RMM法的基本原理与MM法相同 ,不同的是分词切分的方向与MM法相反,而且使用的分词辞典也不同。逆向最大匹配法从被处理文档的末端开始匹配扫描,每次取最末端的2i个字符(i字字串)作为匹配字段,若匹配失败,则去掉匹配字段最前面的一个字,继续匹配。相应地,它使用的分词词典是逆序词典,其中的每个词条都将按逆序方式存放。在实际处理时,先将文档进行倒排处理,生成逆序文档。然后,根据逆序词典,对逆序文档用正向最大匹配法处理即可。

由于汉语中偏正结构较多,若从后向前匹配,可以适当提高精确度。所以,逆向最大匹配法比正向最大匹配法的误差要小。统计结果表明 ,单纯使用正向最大匹配的错误率为 1/16 9,单纯使用逆向最大匹配的错误率为 1/245。例如切分字段“硕士研究生产”,正向最大匹配法的结果会是“硕士研究生 / 产”,而逆向最大匹配法利用逆向扫描,可得到正确的分词结果“硕士 / 研究 / 生产”。

当然,最大匹配算法是一种基于分词词典的机械分词法,不能根据文档上下文的语义特征来切分词语,对词典的依赖性较大,所以在实际使用时,难免会造成一些分词错误,为了提高系统分词的准确度,可以采用正向最大匹配法和逆向最大匹配法相结合的分词方案(即双向匹配法,见(四)。)

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

(四)双向匹配法:将正向最大匹配法与逆向最大匹配法组合。先根据标点对文档进行粗切分,把文档分解成若干个句子,然后再对这些句子用正向最大匹配法和逆向最大匹配法进行扫描切分。如果两种分词方法得到的匹配结果相同,则认为分词正确,否则,按最小集处理。

3). 全切分和基于词的频度统计的分词方法

基于词的频度统计的分词方法是一种全切分方法。在讨论这个方法之前我们先要明白有关全切分的相关内容。

全切分

全切分要求获得输入序列的所有可接受的切分形式,而部分切分只取得一种或几种可接受的切分形式,由于部分切分忽略了可能的其他切分形式,所以建立在部分切分基础上的分词方法不管采取何种歧义纠正策略,都可能会遗漏正确的切分,造成分词错误或失败。而建立在全切分基础上的分词方法,由于全切分取得了所有可能的切分形式,因而从根本上避免了可能切分形式的遗漏,克服了部分切分方法的缺陷。

全切分算法能取得所有可能的切分形式,它的句子覆盖率和分词覆盖率均为100%,但全切分分词并没有在文本处理中广泛地采用,原因有以下几点:

1)全切分算法只是能获得正确分词的前提,因为全切分不具有歧义检测功能,最终分词结果的正确性和完全性依赖于独立的歧义处理方法,如果评测有误,也会造成错误的结果。

2)全切分的切分结果个数随句子长度的增长呈指数增长,一方面将导致庞大的无用数据充斥于存储数据库;另一方面当句长达到一定长度后,由于切分形式过多,造成分词效率严重下降。

基于词的频度统计的分词方法:

这是一种全切分方法。它不依靠词典,而是将文章中任意两个字同时出现的频率进行统计,次数越高的就可能是一个词。它首先切分出与词表匹配的所有可能的词,运用统计语言模型和决策算法决定最优的切分结果。它的优点在于可以发现所有的切分歧义并且容易将新词提取出来。

4).基于知识理解的分词方法。

该方法主要基于句法、语法分析,并结合语义分析,通过对上下文内容所提供信息的分析对词进行定界,它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断。这类方法试图让机器具有人类的理解能力,需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式。因此目前基于知识的分词系统还处在试验阶段。

5).一种新的分词方法

并行分词方法:这种分词方法借助于一个含有分词词库的管道进行 ,比较匹配过程是分步进行的 ,每一步可以对进入管道中的词同时与词库中相应的词进行比较 ,由于同时有多个词进行比较匹配 ,因而分词速度可以大幅度提高。这种方法涉及到多级内码理论和管道的词典数据结构。(详细算法可以参考吴胜远的《并行分词方法的研究》。)

 

常用中文分词包

 

1. 庖丁解牛分词包,适用于与Lucene整合。http://www.oschina.net/p/paoding

    庖丁中文分词库是一个使用Java开发的,可结合到Lucene应用中的,为互联网、企业内部网使用的中文搜索引擎分词组件。

    Paoding填补了国内中文分词方面开源组件的空白,致力于此并希翼成为互联网网站首选的中文分词开源组件。 Paoding中文分词追求分词的高效率和用户良好体验。

    Paoding's Knives 中文分词具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。

    高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。

    采用基于 不限制个数的词典文件对文章进行有效切分,使能够将对词汇分类定义。

    能够对未知的词汇进行合理解析

 

2. LingPipe,开源自然语言处理的Java开源工具包。http:/alias-i.com/lingpipe/

    功能非常强大,最重要的是文档超级详细,每个模型甚至连参考论文都列出来了,不仅使用方便,也非常适合模型的学习。

    主题分类(Top Classification)、命名实体识别(Named Entity Recognition)、词性标注(Part-of Speech Tagging)、句题检测(Sentence Detection)、查询拼写检查(Query Spell Checking)、兴趣短语检测(Interseting Phrase Detection)、聚类(Clustering)、字符语言建模(Character Language Modeling)、医学文献下载/解析/索引(MEDLINE Download, Parsing and Indexing)、数据库文本挖掘(Database Text Mining)、中文分词(Chinese Word Segmentation)、情感分析(Sentiment Analysis)、语言辨别(Language Identification)等

 

3. JE分词包

4. LibMMSeg http://www.oschina.net/p/libmmseg

    采用C++开发,同时支持Linux平台和Windows平台,切分速度大约在300K/s(PM-1.2G),截至当前版本(0.7.1)。

    LibMMSeg没有为速度仔细优化过,进一步的提升切分速度应仍有空间。

5. IKAnalyzer http://www.oschina.net/p/ikanalyzer

    IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的正反向全切分算法,是LuceneAnalyzer接口的实现。

    该算法适合与互联网用户的搜索习惯和企业知识库检索,用户可以用句子中涵盖的中文词汇搜索,如用"人民"搜索含"人民币"的文章,这是大部分用户的搜索思维;

    不适合用于知识挖掘和网络爬虫技术,全切分法容易造成知识歧义,因为在语义学上"人民"和"人民币"是完全搭不上关系的。

6. PHPCWS http://www.oschina.net/p/phpcws

    PHPCWS 是一款开源的PHP中文分词扩展,目前仅支持Linux/Unix系统。

 

    PHPCWS 先使用“ICTCLAS 3.0 共享版中文分词算法”的API进行初次分词处理,再使用自行编写的“逆向最大匹配算法”对分词和进行词语合并处理,并增加标点符号过滤功能,得出分词结果。

 

    ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是中国科学院计算技术研究所在多年研究工作积累的基础上,基于多层隐马模型研制出的汉语词法分析系统,主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。ICTCLAS经过五年精心打造,内核升级6次,目前已经升级到了ICTCLAS3.0,分词精度 98.45%,各种词典数据压缩后不到3M。ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan 组织的评测中都获得了多项第一名,是当前世界上最好的汉语词法分析器。

 

    ICTCLAS 3.0 商业版是收费的,而免费提供的 ICTCLAS 3.0 共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。所以本人对ICTCLAS分词后的结果,再采用逆向最大匹配算法,根据自己补充的一个9万条词语的自定义词库(与ICTCLAS词库中的词语不重复),对ICTCLAS分词结果进行合并处理,输出最终分词结果。

 

    由于 ICTCLAS 3.0 共享版只支持GBK编码,因此,如果是UTF-8编码的字符串,可以先用PHP的iconv函数转换成GBK编码,再用phpcws_split函数进行分词处理,最后转换回UTF-8编码。

 

 

7、KTDictSeg 一个C#.net做的简单快速准确的开源中文分词组件(这个分词算法效果也不错)

分享到:
评论
3 楼 helloworldwt 2013-10-08  
那能把加入新的语料后的程序发给我吗
2 楼 fengbin2005 2013-10-08  
ICTCLAS 这个源码我这边没有的.
1 楼 helloworldwt 2013-09-29  
    作者您好,我是一名在校大学生。目前在做中文分词方面的项目。现在项目遇到了瓶颈,能否把您的基于ICTCLAS的分词系统的源代码发给我参考下,真心谢谢了!
    邮箱971759990@qq.com,谢谢!

相关推荐

    C#中文分词技术源码

    总的来说,“C#中文分词技术源码”是一个学习和实践C# NLP技术的好材料,不仅可以提升对C#编程的理解,也能增强对中文分词原理及其实现方法的认识。对于希望在自然语言处理领域有所建树的开发者来说,这是一个不容...

    中文分词处理技术源代码

    中文分词处理技术是自然语言处理(NLP)领域中的重要环节,特别是在中文文本分析、信息检索、机器翻译等应用中...同时,通过阅读和理解源代码,也能加深对中文分词技术的理解,对提升自身的自然语言处理能力大有裨益。

    中文分词原理.pdf

    ### 中文分词原理及其在搜索引擎中的应用 #### 一、搜索引擎工作原理 搜索引擎的工作流程主要包括三个阶段:爬行抓取网页、首次处理以及排名。 1. **爬行抓取网页**:搜索引擎通过释放大量的爬虫程序(俗称“蜘蛛...

    Solr5.5搜索引擎之分词原理说明.docx

    中文分词是指将中文汉字序列切分成有意义的词的过程。中文分词是自然语言处理技术中的一部分,许多西文处理方法对中文不能直接采用,因为中文必须有分词这道工序。中文分词是其他中文信息处理的基础,搜索引擎只是...

    Lucene与中文分词技术的研究及应用

    ### Lucene与中文分词技术的研究及应用 #### Lucene简介与原理 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它为开发者提供了构建全文搜索引擎的能力,而无需关注底层搜索机制的具体实现...

    Solr5.5搜索引擎之分词原理说明

    ### Solr5.5搜索引擎之分词原理说明 #### 一、中文分词概述 **1.1 中文分词的概念** 中文分词是将连续的汉字序列切分成一个个独立的、具有语义的词汇的过程。不同于英文等西方语言通过空格等明显分隔符自然划分...

    c#中文分词类库 可用来做搜索引擎分词 准确率90% 支持Lucene.net

    1. **分词原理**:理解中文分词的基本概念,包括基于词典、统计模型(如HMM、CRF)等方法。 2. **C#编程**:掌握C#编程语言,了解.NET Framework,以便使用和集成分词类库。 3. **自然语言处理**:了解自然语言处理...

    盘古分词,分词技术

    在信息技术领域,中文处理一直是一个挑战,而分词技术作为其中的核心部分,对于信息检索、自然语言理解、机器翻译等应用至关重要。盘古分词,因其高效、易用的特点,被誉为是中文分词领域的优秀工具,深受广大用户...

    基于Python的中文结巴分词技术实现

    "基于Python的中文结巴分词技术实现" 基于 Python 的中文结巴分词技术实现是自然语言处理的重要预处理操作。中文分词技术的研究尤为重要,因为非结构化文本的大量产生使得中文分词技术的需求 càng亟待解决。结巴...

    中文分词技术 源代码 对于搜索引擎爱好者相当有用

    中文分词技术是自然语言处理领域的一个重要环节,尤其对于搜索引擎爱好者来说,掌握这项技术能够极大地提升信息检索的准确性和效率。在这个压缩包中,包含了实现中文分词功能的源代码,非常适合对这一领域感兴趣的人...

    最新逆向最大匹配分词算法 盘古分词 分词算法 中文分词 源码

    逆向最大匹配分词算法(Reverse Maximum Matching,RMM)是一种常见的中文分词技术,广泛应用于自然语言处理、搜索引擎和信息检索等领域。该算法的基本思想是从待分词文本的末尾开始,向前寻找最长的已存在于词典中...

    C#汉字分词程序

    在IT领域,汉字分词是自然语言处理(NLP)中的关键步骤,它涉及到将连续的汉字序列分割成有意义的词汇单元,以便计算机能够理解和分析文本。本项目名为"C#汉字分词程序",它实现了两种常见的分词算法:正向最大匹配...

    中文分词+关键字提取.zip

    中文分词和关键字提取是自然语言处理(NLP)领域中的两个重要...通过学习和实践其中的内容,不仅可以深入理解中文分词和关键字提取的基本原理,还能掌握实际应用中提高效率的方法,从而在处理大量中文文本时游刃有余。

    matlab中文分词——最大正向匹配法.rar

    在IT领域,中文分词是自然语言处理(NLP)中的关键步骤,它涉及到将连续的汉字序列分割成有意义的词语单元,以便计算机能够理解和分析文本。本项目以"matlab中文分词——最大正向匹配法.rar"为主题,重点讨论了如何...

    C#实现的中文分词程序

    中文分词是将连续的汉字序列切分成具有实际意义的词语的过程,因为中文没有像英文那样的空格作为单词的天然分隔符,所以需要通过特定算法来识别词语边界。例如,句子“我爱你,中国”会被分词为“我”、“爱”、“你...

    中文分词C语言版.rar

    对于学习C语言和自然语言处理的开发者来说,研究和使用这个开源项目不仅能提升编程技巧,还能加深对分词原理的理解。 总结来说,这个名为“fenci”的C语言中文分词程序是一个有价值的教育资源和工具,它展示了如何...

    中文分词算法研究整理资料

    对于想深入理解和应用中文分词技术的人来说,这是一份宝贵的资源。通过学习这份资料,你可以掌握如何选择合适的分词算法,如何处理分词中的各种问题,以及如何评估分词效果,从而提升你的NLP项目效率和质量。

    solr中文分词器技术

    中文分词技术(中文分词原理)词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的...

    织梦中文分词系统1.0

    《织梦中文分词系统1.0》是一个专为处理中文文本而设计的软件系统,其核心功能在于将连续的汉字序列切...对于开发者和研究人员而言,这个系统提供了深入研究和改进分词技术的一个平台,有助于推动中文NLP技术的进步。

Global site tag (gtag.js) - Google Analytics