一、 为什么要进行中文分词?
词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键。
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编码。
原文地址:http://www.cnblogs.com/flish/archive/2011/08/08/2131031.html
相关推荐
### 中文分词原理及其在搜索引擎中的应用 #### 一、搜索引擎工作原理 搜索引擎的工作流程主要包括三个阶段:爬行抓取网页、首次处理以及排名。 1. **爬行抓取网页**:搜索引擎通过释放大量的爬虫程序(俗称“蜘蛛...
百度中文分词原理,搜索引擎中文分词方法,SEO必看
中文分词是指将中文汉字序列切分成有意义的词的过程。中文分词是自然语言处理技术中的一部分,许多西文处理方法对中文不能直接采用,因为中文必须有分词这道工序。中文分词是其他中文信息处理的基础,搜索引擎只是...
### IK中文分词器原理详解 #### 一、概述 IK中文分词器是一种广泛应用于中文文本处理领域的高效工具,其核心功能在于能够精准地识别并切割中文文本中的词汇单元,进而为后续的信息检索、自然语言处理等工作提供基础...
《自然语言处理实战入门》 第4课 :中文分词原理及相关组件简介的 主要内容 有如下三个部分: 博客链接:https://blog.csdn.net/wangyaninglm/article/details/90587705 汉语语言学简介 汉语分词领域主要服务、手段...
中文分词的基本原理包括机械切分、模型切分、以及二者的结合。机械切分主要依赖于预定义的词典进行分词,而模型切分则利用语言模型来评估切分结果的合理性,使用隐马尔科夫模型(HMM)、条件随机场(CRF)或深度学习...
### Solr5.5搜索引擎之分词原理说明 #### 一、中文分词概述 **1.1 中文分词的概念** 中文分词是将连续的汉字序列切分成一个个独立的、具有语义的词汇的过程。不同于英文等西方语言通过空格等明显分隔符自然划分...
《中文分词与百度词典:深入理解...通过对“baidu.txt”的研究,我们可以深入了解中文分词的原理,提升相关应用的性能,为中文信息处理带来更大的便利。无论是学术研究还是实际开发,这个资源都是不容忽视的宝贵财富。
1. **中文分词原理**: 中文句子没有明显的词边界,因此需要通过分词来识别出单个词语。分词的基本思路是找到最有可能的词序列,这通常基于概率模型。中文分词系统一般采用词典匹配和上下文信息结合的方法,例如...
标题 "Python-一个微型中文分词引擎" 指出我们正在探讨的是一款用Python编写的微型中文分词工具。中文分词是自然语言处理(NLP...对于学习和理解中文分词原理,以及进一步的Python NLP实践,这个项目是一个很好的起点。
总的来说,“C#中文分词技术源码”是一个学习和实践C# NLP技术的好材料,不仅可以提升对C#编程的理解,也能增强对中文分词原理及其实现方法的认识。对于希望在自然语言处理领域有所建树的开发者来说,这是一个不容...
### 分词词库_中文分词词库最新整理(TXT格式) #### 知识点概述 本文档将根据提供的文件信息...通过对中文分词基本原理的理解,结合实际应用场景的需求,我们可以更好地利用或开发适合特定任务需求的分词词库。
1. **中文分词原理**:介绍如何通过词典和算法来识别和切分中文词汇。 2. **SCWS系统架构**:包括系统的核心组件、工作流程和与PHP的交互方式。 3. **安装与配置**:指导如何在开发环境中安装和配置SCWS,包括依赖库...
1. **中文分词原理**: 中文分词通常基于词典匹配、统计模型和深度学习等多种方法。词典匹配是最基础的方法,通过建立一个包含大量词汇的词库,对输入文本进行逐字扫描,与词库中的词汇进行匹配。统计模型如隐...
在IT领域,汉字分词是自然语言处理(NLP)中的关键步骤,它涉及到将连续的汉字序列分割成有意义的词汇单元,以便计算机能够理解和分析文本。本项目名为"C#汉字分词程序",它实现了两种常见的分词算法:正向最大匹配...
标签 "中文分词" 是关键点,中文分词是将连续的汉字序列切分成有意义的词语,这是处理中文文本的基础步骤,对于信息检索、情感分析、机器翻译等任务至关重要。常见的中文分词算法有基于词典的匹配方法、统计模型如隐...
中文分词技术(中文分词原理)词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的...
1. **中文分词原理**:分词的基本方法有正向最大匹配法、逆向最大匹配法、最少切分法、词典匹配法等。这些方法各有优缺点,例如,正向最大匹配法从左到右寻找最长的词,而逆向最大匹配法则从右到左进行。 2. **Java...
1. **分词原理**:理解中文分词的基本概念,包括基于词典、统计模型(如HMM、CRF)等方法。 2. **C#编程**:掌握C#编程语言,了解.NET Framework,以便使用和集成分词类库。 3. **自然语言处理**:了解自然语言处理...
对于学习C语言和自然语言处理的开发者来说,研究和使用这个开源项目不仅能提升编程技巧,还能加深对分词原理的理解。 总结来说,这个名为“fenci”的C语言中文分词程序是一个有价值的教育资源和工具,它展示了如何...