SOLR+IK分词器

SOLR+IK分词器
SOLR+IK分词器

一、SOLR搭建准备工作

1.本项目使用的是SOLR4.7官方最新版本,可从SOLR官网下载SOLR.ZIP 安装包,目录结构如下图所示

2.SOLR运行环境需在JDK1.6+以上JVM上运行

二、SOLR与Apache Tomcat集成环境

3.本文以TOMCAT5.5为例

4.解压后将源SOLR安装包中example/webapps下的solr.war拷到tomcat的webapps下,再重启tomcat,.war文件会自动解压

注:.war包tomcat启动时自解压,也可自己通过压缩软件解压

5.此时仍不能访问,需进行solr_home的设置,solr_home目录用于存放配置文件和索引数据

拷贝源代码目录中的example/solr到你电脑的任意位置,命名为solr_home,在tomcat的webapps/solr/WEB_INF/web.xml,解开下面的注释并进行目录的修改

solr/home

此处修改为你刚才的solr_home的绝对路径或相对路径

https://www.360docs.net/doc/f015373131.html,ng.String

如下图所示:

6.此时重启tomcat仍然报错,缺少相应的jar包,拷贝solr4.7源文件包中example/lib/ext/中的jar包到Tomcat5.5下webapps/solr/WEB-INF/lib下,如图所示

再拷贝solr4.7源文件包中example/resources/log4j.properties 到Tomcat5.5/webapps/solr/classes(此目录需自建),如图所示

三、IK分词器安装

7.将之前解压的solr-4.3.1 下的contrib和dist 文件夹复制到

\solr_home\solr\collection1目录下

8.将下载的IKAnalyzer的发行包解压,解压后将IKAnalyzer2012FF_u1.jar (分词器jar包)复制到solr_home\solr\collection1\contrib\analysis-extras\lib下

9.在apache-tomcat-7.0.37\webapps\solr\WEB-INF下新建classes文件夹

10.将IKAnalyzer解压出来的IKAnalyzer.cfg.xml(分词器配置文件)和Stopword.dic(分词器停词字典,可自定义添加内容)复制到

apache-tomcat-5.5.35\webapps\solr\WEB-INF\classes中

11.在solr_home\solr\collection1\conf下的schema.xml文件中fieldType name="text_general"这个地方的上方添加以下内容

class="org.wltea.analyzer.lucene.IKAnalyzer"/>

class="org.wltea.analyzer.lucene.IKAnalyzer"/>

如图所示:

中的type值改为text_ik

12.修改solr_home\solr\collection1\conf下的solrconfig.xml文件,指定jar包路径

改为:

13.修改\solr_home\solr\collection1\conf里的solrconfig.xml文件中的dataDir 一行内容为

${solr.data.dir:C:\SOLR\winsolr\solr_home\solr\collection1\data},如图所示

14.现在来验证下是否添加成功

首先启动solr服务,启动过程中如果出错,一般有三个原因:一是配置的分词器jar找不到,也就是你没有复制jar包到\solr\contrib\analysis-extras\lib目录下。

二是solrconfig.xml文件指定的jar路径有误。

三是分词器版本不对导致的分词器接口API不一样出的错,要是这个错的话就在检查分词器的相关文档,看一下支持的版本是否一样。

如果在启动过程中没有报错的话说明配置成功了。

接下来我们重启Tomcat,进入到http://localhost:8080/solr地址进行测试一下刚加入的中文分词器。

在首页的Core Selector中选择你配置的Croe后点击下面的Analysis,在Field Value (Index)里输入:中国人,在Analyse Fieldname / FieldType:里选择text,然后点击右面Analyse Values,如果分出中国人中国国人这三个词说明IK分词器安装

成功!如图所示

中文分词实验

中文分词实验 一、实验目的: 目的:了解并掌握基于匹配的分词方法,以及分词效果的评价方法。 实验要求: 1、从互联网上查找并构建不低于10万词的词典,构建词典的存储结构; 2、选择实现一种机械分词方法(双向最大匹配、双向最小匹配、正向减字最大匹配法等)。 3、在不低于1000个文本文件,每个文件大于1000字的文档中进行中文分词测试,记录并分析所选分词算法的准确率、分词速度。 预期效果: 1、平均准确率达到85%以上 二、实验方案: 1.实验平台 系统:win10 软件平台:spyder 语言:python 2.算法选择 选择正向减字最大匹配法,参照《搜索引擎-原理、技术与系统》教材第62页的描述,使用python语言在spyder软件环境下完成代码的编辑。 算法流程图:

Figure Error! No sequence specified.. 正向减字最大匹配算法流程

Figure Error! No sequence specified.. 切词算法流程算法伪代码描述:

3.实验步骤 1)在网上查找语料和词典文本文件; 2)思考并编写代码构建词典存储结构; 3)编写代码将语料分割为1500个文本文件,每个文件的字数大于1000字; 4)编写分词代码; 5)思考并编写代码将语料标注为可计算准确率的文本; 6)对测试集和分词结果集进行合并; 7)对分词结果进行统计,计算准确率,召回率及F值(正确率和召回率的 调和平均值); 8)思考总结,分析结论。 4.实验实施 我进行了两轮实验,第一轮实验效果比较差,于是仔细思考了原因,进行了第二轮实验,修改参数,代码,重新分词以及计算准确率,效果一下子提升了很多。 实验过程:

分词工具比较

IKAnalyzer IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene 项目,同时提供了对Lucene的默认优化实现。 语言和平台:基于java 语言开发,最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer 3.0 则发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对Lucene 的默认优化实现。 算法:采用了特有的“正向迭代最细粒度切分算法”。采用了多子处理器分析模式,支持:英文字母( IP 地址、 Email 、 URL )、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。优化的词典存储,更小的内存占用。支持用户词典扩展定义。针对 Lucene 全文检索优化的查询分析器 IKQueryParser ;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高 Lucene 检索的命中率。 性能:60 万字 / 秒 IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的正反向全切分算法,是LuceneAnalyzer接口的实现。该算法适合与互联网用户的搜索习惯和企业知识库检索,用户可以用句子中涵盖的中文词汇搜索,如用"人民"搜索含"人民币"的文章,这是大部分用户的搜索思维;不适合用于知识挖掘和网络爬虫技术,全切分法容易造成知识歧义,因为在语义学上"人民"和"人民币"是完全搭不上关系的。 je-anlysis的分词(基于java实现) 1. 分词效率:每秒30万字(测试环境迅驰1.6,第一次分词需要1-2秒加载词典) 2. 运行环境: Lucene 2.0 3. 免费安装使用传播,无限制商业应用,但暂不开源,也不提供任何保证 4. 优点:全面支持Lucene 2.0;增强了词典维护的API;增加了商品编码的匹配;增加了Mail地址的匹配;实现了词尾消歧算法第二层的过滤;整理优化了词库; 支持词典的动态扩展;支持中文数字的匹配(如:二零零六);数量词采用“n”;作为数字通配符优化词典结构以便修改调整;支持英文、数字、中文(简体)混合分词;常用的数量和人名的匹配;超过22万词的词库整理;实现正向最大匹配算法;支持分词粒度控制 ictclas4j ictclas4j中文分词系统是sinboy在中科院张华平和刘群老师的研制的FreeICTCLAS的基础上完成的一个java开源分词项目,简化了原分词程序的复

hanlp中文分词器解读

中文分词器解析hanlp分词器接口设计:

提供外部接口: 分词器封装为静态工具类,并提供了简单的接口

标准分词是最常用的分词器,基于HMM-Viterbi实现,开启了中国人名识别和音译人名识别,调用方法如下: HanLP.segment其实是对StandardTokenizer.segment的包装。 /** * 分词 * * @param text 文本 * @return切分后的单词 */ publicstatic Listsegment(String text) { return StandardTokenizer.segment(text.toCharArray()); } /** * 创建一个分词器
* 这是一个工厂方法
* 与直接new一个分词器相比,使用本方法的好处是,以后HanLP升级了,总能用上最合适的分词器 * @return一个分词器 */ publicstatic Segment newSegment() }

publicclass StandardTokenizer { /** * 预置分词器 */ publicstaticfinalSegment SEGMENT = HanLP.newSegment(); /** * 分词 * @param text 文本 * @return分词结果 */ publicstatic Listsegment(String text) { return SEGMENT.seg(text.toCharArray()); } /** * 分词 * @param text 文本 * @return分词结果 */ publicstatic Listsegment(char[]text) { return SEGMENT.seg(text); } /** * 切分为句子形式 * @param text 文本

中文自动分词技术

中文自动分词技术是以“词”为基础,但汉语书面语不是像西方文字那样有天然的分隔符(空格),而是在语句中以汉字为单位,词与词之间没有明显的界限。因此,对于一段汉字,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程词,就要应用到中文自动分词技术。下面依次介绍三种中文自动分词算法:基于词典的机械匹配的分词方法、基于统计的分词方法和基于人工智能的分词方法。 1、基于词典的机械匹配的分词方法: 该算法的思想是,事先建立词库,让它它是按照一定的策略将待分析的汉字串与一个充分大的词典中的词条进行匹配,若在词典中找到该字符串,则识别出一个词。按照扫描方向的不同,串匹配分词的方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,又可以分为最大匹配和最小匹配。按这种分类方法,可以产生正向最大匹配、逆向最大匹配,甚至是将他们结合起来形成双向匹配。由于汉字是单字成词的,所以很少使用最小匹配法。一般来说,逆向匹配的切分精度略高于正向匹配,这可能和汉语习惯将词的重心放在后面的缘故。可见,这里的“机械”是因为该算法仅仅依靠分词词表进行匹配分词 a)、正向减字最大匹配法(MM) 这种方法的基本思想是:对于每一个汉字串s,先从正向取出maxLength 个字,拿这几个字到字典中查找,如果字典中有此字,则说明该字串是一个词,放入该T的分词表中,并从s中切除这几个字,然后继续此操作;如果在字典中找不到,说明这个字串不是一个词,将字串最右边的那个字删除,继续与字典比较,直到该字串为一个词或者是单独一个字时结束。 b)、逆向减字最大匹配法(RMM ) 与正向减字最大匹配法相比,这种方法就是从逆向开始遍历。过程与正向减字最大匹配法基本相同,可以对文本和字典先做些处理,把他们都倒过来排列,然后使用正向减字最大匹法。 机械匹配算法简洁、易于实现.其中,最大匹配法体现了长词优先的原则,在实际工程中应用最为广泛。机械匹配算法实现比较简单,但其局限也是很明显的:效率和准确性受到词库

IKAnalyzer中文分词器V3.2.3使用手册

IKAnalyzer中文分词器 V3.2使用手册 目录 1.IK Analyzer3.X介绍 (2) 2.使用指南 (5) 3.词表扩展 (12) 4.针对solr的分词器应用扩展 (14) 5.关于作者 (16)

1.IK Analyzer3.X介绍 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IK Analyzer3.X则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 1.1IK Analyzer3.X结构设计

1.2IK Analyzer3.X特性 ?采用了特有的“正向迭代最细粒度切分算法“,具有80万字/秒的高速处理能力。 ?采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。?优化的词典存储,更小的内存占用。支持用户词典扩展定义 ?针对Lucene全文检索优化的查询分析器IKQueryParser(作者吐血推荐);采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。 1.3分词效果示例 文本原文1: IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。 分词结果: ikanalyzer|是|一个|一|个|开源|的|基于|java|语言|开发|的|轻量级|量级|的|中文|分词|工具包|工具|从|2006|年|12|月|推出|1.0 |版|开始|ikanalyzer|已经|推出|出了|3|个大|个|版本 文本原文2: 永和服装饰品有限公司 分词结果: 永和|和服|服装|装饰品|装饰|饰品|有限|公司 文本原文3:

中文分词技术

一、为什么要进行中文分词? 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键。 Lucene中对中文的处理是基于自动切分的单字切分,或者二元切分。除此之外,还有最大切分(包括向前、向后、以及前后相结合)、最少切分、全切分等等。 二、中文分词技术的分类 我们讨论的分词算法可分为三大类:基于字典、词库匹配的分词方法;基于词频度统计的分词方法和基于知识理解的分词方法。 第一类方法应用词典匹配、汉语词法或其它汉语语言知识进行分词,如:最大匹配法、最小分词方法等。这类方法简单、分词效率较高,但汉语语言现象复杂丰富,词典的完备性、规则的一致性等问题使其难以适应开放的大规模文本的分词处理。第二类基于统计的分词方法则基于字和词的统计信息,如把相邻字间的信息、词频及相应的共现信息等应用于分词,由于这些信息是通过调查真实语料而取得的,因而基于统计的分词方法具有较好的实用性。 下面简要介绍几种常用方法: 1).逐词遍历法。 逐词遍历法将词典中的所有词按由长到短的顺序在文章中逐字搜索,直至文章结束。也就是说,不管文章有多短,词典有多大,都要将词典遍历一遍。这种方法效率比较低,大一点的系统一般都不使用。 2).基于字典、词库匹配的分词方法(机械分词法) 这种方法按照一定策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。识别出一个词,根据扫描方向的不同分为正向匹配和逆向匹配。根据不同长度优先匹配的情况,分为最大(最长)匹配和最小(最短)匹配。根据与词性标注过程是否相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的方法如下: (一)最大正向匹配法 (MaximumMatchingMethod)通常简称为MM法。其基本思想为:假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前字串中的前i个字作为匹配字段,查找字典。若字典中存在这样的一个i字词,则匹配成功,匹配字段被作为一个词切分出来。如果词典中找不到这样的一个i字词,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串重新进行匹配处理……如此进行下去,直到匹配成功,即切分出一个词或剩余字串的长度为零为止。这样就完成了一轮匹配,然后取下一个i字字串进行匹配处理,直到文档被扫描完为止。

中文分词实验报告

实验:中文分词实验 小组成员:黄婷苏亮肖方定山 一、实验目的: 1.实验目的 (1)了解并掌握基于匹配的分词方法、改进方法、分词效果的评价方法等 2.实验要求 (1)从互联网上查找并构建不低于10万词的词典,构建词典的存储结构;(2)选择实现一种机械分词方法(双向最大匹配、双向最小匹配、正向减字最大匹配法等),同时实现至少一种改进算法。 (3)在不低于1000个文本文件(可以使用附件提供的语料),每个文件大于1000字的文档中进行中文分词测试,记录并分析所选分词算法的准确率、召回率、F-值、分词速度。 二、实验方案: 1. 实验环境 系统:win10 软件平台:spyder 语言:python 2. 算法选择 (1)选择正向减字最大匹配法

(2)算法伪代码描述: 3. 实验步骤 ● 在网上查找语料和词典文本文件; ● 思考并编写代码构建词典存储结构;

●编写代码将语料分割为1500 个文本文件,每个文件的字数大于1000 字; ●编写分词代码; ●思考并编写代码将语料标注为可计算准确率的文本; ●对测试集和分词结果集进行合并; ●对分词结果进行统计,计算准确率,召回率及 F 值(正确率和召回率的调 和平均值); ●思考总结,分析结论。 4. 实验实施 实验过程: (1)语料来源:语料来自SIGHAN 的官方主页(https://www.360docs.net/doc/f015373131.html,/ ),SIGHAN 是国际计算语言学会(ACL )中文语言处理小组的简称,其英文全称为“Special Interest Group for Chinese Language Processing of the Association for Computational Linguistics”,又可以理解为“SIG 汉“或“SIG 漢“。SIGHAN 为我们提供了一个非商业使用(non-commercial )的免费分词语料库获取途径。我下载的是Bakeoff 2005 的中文语料。有86925 行,2368390 个词语。语料形式:“没有孩子的世界是寂寞的,没有老人的世界是寒冷的。” (2)词典:词典用的是来自网络的有373 万多个词语的词典,采用的数据结构为python 的一种数据结构——集合。

搜索引擎中文分词原理与实现

while (ts.i ncreme ntToke n()) { //取得下一个词 搜索引擎中文分词原理与实现 因为中文文本中,词和词之间不像英文一样存在边界, 所以中文分词是一个专业处理中 文信息的搜索引擎首先面对的问题,需要靠程序来切分出词。 一、LUCene 中的中文分词 LUCene 在中处理中文的常用方法有三种,以 皎死猎人的狗"为例说明之: 单 字:【咬】 【死】 【猎】 【人】 【的】 【狗】 二元覆盖:【咬死】 【死猎】 【猎人】 【人的】 【的狗】 分 词:【咬】 【死】 【猎人】 【的】 【狗】 LUCene 中的StandardTokenizer 采用单子分词方式, CJKTokenize 采用二元覆盖方式。 1、LUCene 切分原理 LUCene 中负责语言处理的部分在 org.apache.Iucene.analysis 包,其中, TokenStream 类 用来进行基本的分词工作, Analyzer 类是TokenStream 的包装类,负责整个解析工作,Analyzer 类接收整段文本,解析出有意义的词语。 通常不需要直接调用分词的处理类 analysis ,而是由LUCene 内存内部来调用,其中: (1) 在索引阶段,调用 addDocument (doc )时,LUCene 内部使用 Analyzer 来处理每 个需要 索引的列,具体如下图: 图1 LUCene 对索引文本的处理 In dexWriter in dex = new In dexWriter(i ndexDirectory, new CnAn alyzer(), //用于支持分词的分析 器 !in Creme ntal, In dexWriter.MaxFieldLe ngth.UNLIMITED); (2) 在搜索阶段,调用 QUeryParSer.parse (queryText )来解析查询串时, QUeryParSer 会调用Analyzer 来拆分查询字符串,但是对于通配符等查询不会调用 Analyzer 。 An alyzer an alyzer = new CnAn alyzer(); //支持中文的分词 QUeryParSer ParSer = new QUeryParSer(VerSiO n.L UCENE_CURRENT, "title", an alyzer); 因为在索引和搜索阶段都调用了分词过程,索引和搜索的切分处理要尽量一致,所以 分词效果改变后需要重建索引。 为了测试LUCene 的切分效果,下面是直接调用 Analysis 的例子: Analyzer analyzer = new CnAnalyzer(); // 创建一个中文分析器 TokenStream ts = analyzer.tokenStream("myfield", new StringReader(" 待切分文本 ")); //

R语言中文分词+词云实例

R语言中文分词+词云实例程序 一、程序源码 #调入分词的库 library("rJava") library("Rwordseg") #调入绘制词云的库 library("RColorBrewer") library("wordcloud") #读入数据(特别注意,read.csv竟然可以读取txt的文本) myfile<-read.csv(file.choose(),header=FALSE) #预处理,这步可以将读入的文本转换为可以分词的字符,没有这步不能分词 myfile.res <- myfile[myfile!=" "] #装载分词词典(如果需要的话,我这里没有装载,下面有说明) #分词,并将分词结果转换为向量 myfile.words<- unlist(lapply(X = myfile.res,FUN = segmentCN)) #剔除URL等各种不需要的字符,还需要删除什么特殊的字符可以依样画葫芦在下面增加gsub的语句 myfile.words<- gsub(pattern="http:[a-zA-Z\\/\\.0-9]+","",myfile.words) myfile.words<- gsub("\n","",myfile.words) myfile.words<- gsub("","",myfile.words) #去掉停用词 data_stw=read.table(file=file.choose(),colClasses="character") stopwords_CN=c(NULL) for(i in 1:dim(data_stw)[1]){ stopwords_CN=c(stopwords_CN,data_stw[i,1]) } for(j in 1:length(stopwords_CN)){ myfile.words<- subset(myfile.words,myfile.words!=stopwords_CN[j]) } #过滤掉1个字的词 myfile.words<- subset(myfile.words, nchar(as.character(myfile.words))>1)

《IKAnalyzer中文分词器V3.1.6使用手册》

IKAnalyzer中文分词器 V3.X使用手册 目录 1.IK Analyzer3.0介绍 (2) 2.使用指南 (4) 3.词表扩展 (11) 4针对solr的分词器应用扩展 (13) 5.关于作者 (14)

1.IK Analyzer3.0介绍 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IK Analyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 1.1IK Analyzer3.0结构设计

1.2IK Analyzer3.0特性 ?采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。 ?采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。?优化的词典存储,更小的内存占用。支持用户词典扩展定义 ?针对Lucene全文检索优化的查询分析器IKQueryParser(作者吐血推荐);采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。 1.3分词效果示例 文本原文1: IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。 分词结果: ikanalyzer|是|一个|一|个|开源|的|基于|java|语言|开发|的|轻量级|量级|的|中文|分词|工具包|工具|从|2006|年|12|月|推出|1.0 |版|开始|ikanalyzer|已经|推出|出了|3|个大|个|版本 文本原文2: 永和服装饰品有限公司 分词结果: 永和|和服|服装|装饰品|装饰|饰品|有限|公司 文本原文3:

关于百度中文分词系统研究

关于百度中文分词系统研究

所谓分词就是把字与字连在一起的汉语句子分成若干个相互独立、完整、正确的单词。词是最小的、能独立活动的、有意义的语言成分。计算机的所有语言知识都来自机器词典(给出词的各项信息) 、句法规则(以词类的各种组合方式来描述词的聚合现象) 以及有关词和句子的语义、语境、语用知识库。中文信息处理系统只要涉及句法、语义(如检索、翻译、文摘、校对等应用) ,就需要以词为基本单位。当汉字由句转化为词之后,才能使得句法分析、语句理解、自动文摘、自动分类和机器翻译等文本处理具有可行性。可以说,分词是机器语言学的基础。 分词准确性对搜索引擎来说十分重要,但如果分词速度太慢,即使准确性再高,对于搜索引擎来说也是不可用的,因为搜索引擎需要处理数以亿计的网页, 如果分词耗用的时间过长,会严重影响搜索引擎内容更新的速度。因此对于搜索引擎来说,分词的准确性和速度,二者都需要达到很高的要求。 分词算法的三种主要类型 现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。 》基于字符串匹配的分词方法。 这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功 (识别出一个词) 。按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长) 匹配 和最小(最短) 匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方 法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下: 1) 正向最大匹配法(由左到右的方向) 。 通常简称为MM(Maximum Matching Method) 法。其基本思想为:设D 为词典,MAX 表示D 中的最大词长,STR 为待切分的字串。MM 法是每次从STR 中取长度为MAX 的子串与D 中的词进行匹配。若成功,则该子串为词,指针后移MAX 个汉字后继续匹配,否则子串逐次减一进行匹配。 2) 逆向最大匹配法(由右到左的方向) 。 通常简称为RMM ( Reverse Maximum MatchingMethod) 法。RMM 法的基本原理与MM 法相同,不同的是分词的扫描方向,它是从右至左取子串进行匹配。 3) 最少切分法(使每一句中切出的词数最小) 。 还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向 最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169 ,单纯使用逆向最大匹配的错误率为1/ 245 。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。一种方法是改进

IKAnalyzer中文分词器介绍

IKAnalyzer3.2.8中文分词器介绍 2012年3月2日

1.IKAnalyzer简介 IKAnalyzer是一个开源基于JA V A语言的轻量级的中文分词第三方工具包,从2006年推出已经经历了三个较为完整的版本,目前最新版本为3.2.8,它基于lucene为应用主体,但是,它也支持脱离lucene,成为一个独立的面向JA V A的分词工具。 2.IKAnalyzer结构图 3.IKAnalyzer特性 a.算法采用“正向迭代最细粒度切分算法”,支持细粒度和最大词长两种分词 方式,速度最大支持80W字/秒(1600KB/秒)。 b.支持多子处理器分析模式:中文、数字、字母,并兼容日文、韩文。 c.较小的内存占用,优化词库占有空间,用户可自定义扩展词库。 d.扩展lucene的扩展实现,采用歧义分析算法优化查询关键字的搜索排列组

合,提高lucene检索命中率。 4.关键类介绍 org.wltea.analyzer.lucene.IKAnalyzer IK分词主类,基于Lucene的Analyzer接口实现。 org.wltea.analyzer.lucene.IKQueryParser IK分词器提供的Query解析、构造工具类,其中parseMultiField 函数(所有的重载函数)为关键函数。 org.wltea.analyzer.IKSegmentation IK分词器的核心类,真正分词的实现类。 5.IK分词算法理解 根据作者官方说法IK分词器采用“正向迭代最细粒度切分算法”,分析它的源代码,可以看到分词工具类IKQueryParser起至关重要的作用,它对搜索关键词采用从最大词到最小词层层迭代检索方式切分,比如搜索词:“中华人民共和国成立了”,首先到词库中检索该搜索词中最大分割词,即分割为:“中华人民共和国”和“成立了”,然后对“中华人民共和国”切分为“中华人民”和“人民共和国”,以此类推。最后,“中华人民共和国成立了”切分为:“中华人民| 中华| 华人| 人民| 人民共和国| 共和国| 共和| 成立| 立了”,当然,该切分方式为默认的细粒度切分,若按最大词长切分,结果为:“中华人民共和国| 成立| 立了”。核心算法代码如下: boolean accept(Lexeme _lexeme){ /* * 检查新的lexeme 对当前的branch 的可接受类型 * acceptType : REFUSED 不能接受 * acceptType : ACCEPTED 接受 * acceptType : TONEXT 由相邻分支接受

IKAnalyzer中文分词器V2012_U5使用手册

IKAnalyzer中文分词器 V2012使用手册 目录 1.IK Analyzer 2012介绍 (2) 2.使用指南 (5) 3.词表扩展 (12) 4.针对solr的分词器应用扩展 (16) 5.关于作者 (17)

1.IK Analyzer 2012介绍 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。 1.1 IK Analyzer 2012结构设计

1.2 IK Analyzer 2012特性 ●采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式; ●在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位,Sun JDK 1.6_29 64 位普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。 ●2012版本的智能分词模式支持简单的分词排歧义处理和数量词合并输出。 ●采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、 日文字符 ●优化的词典存储,更小的内存占用。支持用户词典扩展定义。特别的,在2012版本, 词典支持中文,英文,数字混合词语。 1.3 分词效果示例 IK Analyzer 2012版本支持细粒度切分和智能切分,以下是两种切分方式的演示样例。文本原文1: IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。 ●智能分词结果: ikanalyzer | 是| 一个| 开源| 的| 基于| java | 语言| 开发| 的| 轻量级| 的| 中文| 分词| 工具包| 从| 2006年| 12月| 推出| 1.0版| 开始| ikanalyzer | 已经| 推| 出了| 3个| 大| 版本 ●最细粒度分词结果: ikanalyzer | 是| 一个| 一| 个| 开源| 的| 基于| java | 语言| 开发| 的| 轻量级

中文分词工具介绍

中文分词工具介绍 分词工具支持语言原理分词速度文档 完整 性 词典及扩展性 NLPIR(ICTCLAS)中文、英文隐马尔科夫模型(HHMM)50万字/秒 (996Kb/s)详细支持单条导入用户 词典,也可以批量导 入用户词典 IKAnalyzer英文字母、数 字、中文词汇 等分词处理, 兼容韩文、日 文字符正向迭代最细粒度切分算法83 万字/秒 (1600Kb/s) 详细收录27万中文词汇, 支持用户词典扩展 定义、支持自定义停 止词 Paoding-Analysis中文100万字/秒 (1900Kb/s)极少支持不限制个数的 用户自定义词库 MMSeg4j 中文,包括一 些字符的处 理英文、俄 文、希腊、数 字用Chih-Hao Tsai 的 MMSeg 算法。MMSeg 算法 有两种分词方法:Simple和 Complex,都是基于正向最 大匹配。在complex基础上 实现了最多分词 (max-word) Complex 60万字/秒 (1200Kb/s) Simple 97万字/秒 1900Kb/s 极少使用sougou词库, 也可自定义覆盖 Imdict-Chinese-Analyzer中文、英文、 数字隐马尔科夫模型(HHMM)25万字/秒 (480Kb/s) 极少算法和语料库词典 来自于ictclas1.0项 目 JE-Analysis中文、英文、 数字 极少

中文分词工具分词测试 Paoding 运行时间:7s 分词数:160841 IK 运行时间:6s 分词数:149244 imdict运行时间: 12.426 s 分词数:235548 je运行时间: 7.834 s 分词数:220199 Mmseg4j运行时间: 9.612 s 分词数为:200504

几款常用分词工具的比较研究

几款常用分词工具的比较研究 资料来源于网络 修订于西电实验室 本文档主要针对以下几个分词工具进行分析比较: 1、极易中文分词,je-analysis-1.5.3 2、庖丁分词,paoding-analyzer.jar 3、IKAnalyzer3.0 4、imdict-chinese-analyzer 5、ictclas4j 其中: JE不是开源的,官方网址:https://www.360docs.net/doc/f015373131.html,/,目前还没有支持Lucene3的版本。 paoding分词是一个开源的分词器,目前最新的非正式版3,支持Lucene3,可在网上在线获得。 ictclas4j中文分词系统是sinboy在中科院张华平和刘群老师的研制的FreeICTCLAS的基础上完成的一个java开源分词项目,简化了原分词程序的复杂度,旨在为广大的中文分词爱好者一个更好的学习机会。 imdict-chinese-analyzer是 imdict智能词典的智能中文分词模块,作者高小平,算法基于隐马尔科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java),可以直接为lucene

搜索引擎提供中文分词支持。 以上两个都源自中科院的ICTCLAS,官方网址: https://www.360docs.net/doc/f015373131.html,/ IKAnalyzer:一个开源爱好者的作品,项目地址: https://www.360docs.net/doc/f015373131.html,/p/ik-analyzer/,作者林良益博客: https://www.360docs.net/doc/f015373131.html,/ 测试过程中,ictclas4j会报出各种错误,因此放弃了,希望不是因为我配置的原因。 经过测试,这几款工具中,JE和庖丁的分词效果是最好的,两者各有千秋,IKAnalyzer也不错,但是会给出多种分词结果,这个有点不能接受,希望能有好的改进,imdict-chinese-analyzer则稍差一点。 由于JE不是开源的,所以不建议采用,而且目前还没有支持Lucene3.x的release,所以本人主张使用paoding(庖丁)。Paoding_analyzer3.0.jar可以支持到Lucene3.4,因此,在目前,这个缺少能够很好支持Lucene3.x并具备出色中文分词能力的分词工具的真空期,paoding几乎是不二选择。更重要的是,你可以根据你的需要对其进行个性化定制和二次开发。 以下是各种分词器分词效果的测试数据和测试结果(提示:测试的time值并不准确,视具体测试软硬件环境不同会有不同的值,但不影响结果的比较和相对性的考察):

搜索引擎中文分词原理与实现

搜索引擎中文分词原理与实现 因为中文文本中,词和词之间不像英文一样存在边界,所以中文分词是一个专业处理中文信息的搜索引擎首先面对的问题,需要靠程序来切分出词。 一、Lucene中的中文分词 Lucene在中处理中文的常用方法有三种,以“咬死猎人的狗”为例说明之:单字:【咬】【死】【猎】【人】【的】【狗】 二元覆盖:【咬死】【死猎】【猎人】【人的】【的狗】 分词:【咬】【死】【猎人】【的】【狗】 Lucene中的StandardTokenizer采用单子分词方式,CJKTokenizer采用二元覆盖方式。1、Lucene切分原理 Lucene中负责语言处理的部分在org.apache.lucene.analysis包,其中,TokenStream类用来进行基本的分词工作,Analyzer类是TokenStream的包装类,负责整个解析工作,Analyzer 类接收整段文本,解析出有意义的词语。 通常不需要直接调用分词的处理类analysis,而是由Lucene内存内部来调用,其中:(1)在索引阶段,调用addDocument(doc)时,Lucene内部使用Analyzer来处理每个需要索引的列,具体如下图: 图1 Lucene对索引文本的处理 IndexWriter index = new IndexWriter(indexDirectory, new CnAnalyzer(), //用于支持分词的分析器 !incremental, IndexWriter.MaxFieldLength.UNLIMITED); (2)在搜索阶段,调用QueryParser.parse(queryText)来解析查询串时,QueryParser 会调用Analyzer来拆分查询字符串,但是对于通配符等查询不会调用Analyzer。 Analyzer analyzer = new CnAnalyzer(); //支持中文的分词 QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "title", analyzer); 因为在索引和搜索阶段都调用了分词过程,索引和搜索的切分处理要尽量一致,所以分词效果改变后需要重建索引。 为了测试Lucene的切分效果,下面是直接调用Analysis的例子: Analyzer analyzer = new CnAnalyzer(); //创建一个中文分析器 TokenStream ts = analyzer.tokenStream("myfield", new StringReader("待切分文本")); //取得Token流 while (ts.incrementToken()) { //取得下一个词

百度算法中的中文切词分词系统

百度作为中文搜索引擎地先驱,它地核心地位可以说在短时期是没有任何搜索引擎可以超越地,百度地卓越成就在于它对博大精深地中国文化地领悟和对中文分词地地超强功底.百度受欢迎地主要原因除了用户习惯地原因,在较大程度上得益于百度算法地精准率,搜索结果值更贴近用户地想获得地资讯.用一句广告词“正是我想要地”来形容百度最恰当不过了. 正因为百度对中国搜索引擎市场地统治地位,企业想在网上赚取大量地钞票,就不得不依靠百度.所以做搜索引擎地优化实际上就是百度优化.但百度强大地反优化能力和人工干预机制,使得众多地优化者以失败以失败告终.对于大多数优化者来说,百度成了洪水猛兽.果真如此吗?网络行销大师邓友成认为不尽然.只要是搜索引擎就离不开算法,任何算法都是有规律可循地.下面我们深入浅出地探讨一下百度地算法吧. 一. 搜索信息响应 当用户向百度提出搜索请求后百度会迅速根据用户地请求提供比较精准地结果值. . 比喻当用户提交“搜索引擎优化技术”这个查询文字串.百度会将文字串分割成若干子文字串,用空格,标点符等做细分处理.那么这个文字串就可以分成“搜索引擎,优化,技术”. . 如果用户提交地请求有重复地文字符,例如”优化技术优化”,百度会将重复地文字符看成一个.而字符地出现顺序就忽略. . 当用户提交请求中出现英文字符,百度一般会将英文字符当作一个整体来看,并和中文词分割开来,如果中文出现数字也是这样处理地. 百度通过切割、重组、归并、减负等手段对用户请求进行精准响应,使搜索结果符合用户地想法,以节省用户地查询时间,提高查询效率. 二. 中文核心分词 中文分词是百度算法地核心要素.按中文语法习惯,三个字(含三个字)以下地文字符是独立精准地词汇,没有重组地必要,所以百度对三个字(含三个字)以下地文字符不考虑细分.这也是百度核心算法地第一层,也是响应数量最多地部分.一般这些文字符更新地时间比较慢一些,一周或两周地时间.属于大更新地范畴. 四个字符地百度就会毫不客气地大卸十八块比如,网络工具这个文字串,当用户发出搜索请求后,会发现在搜索结果里面出现了红色地标记,已经把这个文字符分成了“网络,工具”.当然如果是四个字以上地文字串就更不用说了.会分成更多地分词. 三、字词匹配 大概了解了百度地分词原理后,我们要了解地一个重要方面就是字词地匹配问题.如果不知道字词地匹配,做优化就是空谈了. 最大匹配法

中文分词工具

当前几个主要的Lucene中文分词器的比较(ZZ) 1. 基本介绍: paoding :Lucene中文分词“庖丁解牛”Paoding Analysis imdict :imdict智能词典所采用的智能中文分词程序 mmseg4j :用Chih-Hao Tsai 的MMSeg 算法实现的中文分词器 ik :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式 2. 开发者及开发活跃度: paoding :qieqie.wang,google code 上最后一次代码提交:2008-06-12,svn 版本号132 imdict :XiaoPingGao,进入了lucene contribute,lucene trunk 中contrib/analyzers/smartcn/ 最后一次提交:2009-07-24, mmseg4j :chenlb2008,google code 中2009-08-03 (昨天),版本号57,log为:mmseg4j-1.7 创建分支 ik :linliangyi2005,google code 中2009-07-31,版本号41 3. 用户自定义词库: paoding :支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载 imdict :暂时不支持用户自定义词库。但原版ICTCLAS 支持。支持用户自定义stop words mmseg4j :自带sogou词库,支持名为wordsxxx.dic,utf8文本格式的用户自定义词库,一行一词。不支持自动检测。-Dmmseg.dic.path ik :支持api级的用户词库加载,和配置级的词库文件指定,无BOM 的UTF-8 编码,\r\n 分割。不支持自动检测。 4. 速度(基于官方介绍,非自己测试) paoding :在PIII 1G内存个人机器上,1秒可准确分词100万汉字 imdict :483.64 (字节/秒),259517(汉字/秒) mmseg4j :complex 1200kb/s左右, simple 1900kb/s左右 ik :具有50万字/秒的高速处理能力 5. 算法和代码复杂度 paoding :svn src 目录一共1.3M,6个properties文件,48个java文件,6895 行。使用不用的Knife 切不同类型的流,不算很复杂。 imdict :词库6.7M(这个词库是必须的),src 目录152k,20个java文件,2399行。使用ICTCLAS HHMM隐马尔科夫模型,“利用大量语料库的训练来统计汉语词汇的词频和跳转概率,从而根据这些统计结果对整个汉语句子计算最似然(likelihood)的切分” mmseg4j :svn src 目录一共132k,23个java文件,2089行。MMSeg 算法,有点复杂。ik :svn src 目录一共6.6M(词典文件也在里面),22个java文件,4217行。多子处理器分析,跟paoding类似,歧义分析算法还没有弄明白。

相关文档
最新文档