商品搜索引擎---分词(插件介绍与入门实例)

最近刚好在学习搜索引擎分词,有了解一些分词插件,在这里给各位猿友分享一下。

本文主要介绍四个分词插件(ICTCLAS、IKAnalyzer、Ansj、Jcseg)和一种自己写算法实现的方式,以及一些词库的推荐。

一、ICTCLAS

1.1、介绍

中文词法分析是中文信息处理的基础与关键。中国科学院计算技术研究所在多年研究工作积累的基础上,研制出了汉语词法分析系统ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)。

它的主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。

先后精心打造五年,内核升级6次,目前已经升级到了ICTCLAS3.0。ICTCLAS3.0分词速度单机996KB/s,分词精度98.45%,API不超过200KB,各种词典数据压缩后不到3M,分词正确率高达97.58%(最近的973专家组评测结果),基于角色标注的未登录词识别能取得高于90%召回率,其中中国人名的识别召回率接近98%,分词和词性标注处理速度为31.5KB/s。ICTCLAS 和计算所其他14项免费发布的成果被中外媒体广泛地报道,国内很多免费的中文分词模块都或多或少的参考过ICTCLAS的代码。是一个很不错的汉语词法分析器。

1.2、实例

博主windows64位的,如果32位系统的可参照如下文章:http://blog.sina.com.cn/s/blog_64ecfc2f0102v1jp.html,该文章ICTCLAS的windows32位下载url和实例详解。

如果是windows64位系统,可按照博主的步骤实现实例。

(1)ICTCLAS50-Windows-64下载:http://download.csdn.net/detail/u013142781/9494942

(2)eclipse创建普通的java项目。

(3)ICTCLAS50_Windows_64_JNI解压后,将API目录ICTCLAS文件夹和ICTCLAS_I3S_AC_ICTCLAS50.h复制到java项目的src下。

(4)将API目录除了刚刚的ICTCLAS文件夹和ICTCLAS_I3S_AC_ICTCLAS50.h以外的文件和文件夹都复制到java项目的根目录下。

(5)创建测试类,代码如下:

package com.luo.test;

import java.io.UnsupportedEncodingException;

import ICTCLAS.I3S.AC.ICTCLAS50;

public class Test {

    public static void main(String[] args) {
         ICTCLAS50 testICTCLAS50 = new ICTCLAS50();

           String argu = ".";//file Configure.xml and Data directory stored.
           //初始化
           try {
               if(testICTCLAS50.ICTCLAS_Init(argu.getBytes("GB2312")) == false)
               {
                  System.out.println("Init Fail!");
                  throw new Exception("初始化错误");
               }
           } catch (UnsupportedEncodingException e1) {
               // TODOAuto-generated catch block
               e1.printStackTrace();
           } catch (Exception e1) {
               // TODOAuto-generated catch block
               e1.printStackTrace();
           }

           String s="中文词法分析是中文信息处理的基础与关键";

           //导入用户词典前分词
           byte nativeBytes[];
           try {
               nativeBytes = testICTCLAS50.ICTCLAS_ParagraphProcess(s.getBytes("GB2312"), 0, 0);
               //分词处理
               //System.out.println(nativeBytes.length);
               String nativeStr = new String(nativeBytes, 0, nativeBytes.length, "GB2312");
               String[] wordStrings=nativeStr.split(" ");
               for (String string : wordStrings) {
                  System.out.println(string);
               }
           } catch (UnsupportedEncodingException e1) {
               // TODOAuto-generated catch block
               e1.printStackTrace();
           }

    }

}

(6)运行结果:

二、IKAnalyzer

2.1、介绍

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。

从2006年12月推出1.0版开始,IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

IK Analyzer 2012特性:

1.采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式;

2.在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。

3.2012版本的智能分词模式支持简单的分词排歧义处理和数量词合并输出。

4.采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符

5.优化的词典存储,更小的内存占用。支持用户词典扩展定义。特别的,在2012版本,词典支持中文,英文,数字混合词语。

源码下载地址:https://code.google.com/archive/p/ik-analyzer/downloads,该可下载源码和《IKAnalyzer中文分词器V2012使用手册.pdf》。

强烈建议将《IKAnalyzer中文分词器V2012使用手册.pdf》全部看完,之后应该对IKAnalyzer有比较全面的了解。

2.2、实例

实例步骤:

(1)下载IKAnalyzer2012.jar(http://download.csdn.net/detail/u013142781/9494963),将IKAnalyzer2012.jar引入到java项目中。

(2)新建测试类:

package luo.test;

import java.io.IOException;
import java.io.StringReader;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

public class IKTest {

    public static void main(String[] args) throws IOException {
        String text = "IK Analyzer是一个结合词典分词和文法分词的中文分词开源工具包吗。它使用了全新的正向迭代最细粒度切分算法。"; 

        //独立Lucene实现
        StringReader re = new StringReader(text);
        IKSegmenter ik = new IKSegmenter(re,true);
        Lexeme lex = null;
        try {
            while((lex=ik.next())!=null){
                System.out.print(lex.getLexemeText()+"|");
            }
        }catch (Exception e) {
            // TODO: handle exception
        }
    }  

}

(3)运行结果:

三、Ansj

3.1、介绍

Ansj中文分词

这是一个ictclas的java实现.基本上重写了所有的数据结构和算法.词典是用的开源版的ictclas所提供的.并且进行了部分的人工优化

内存中中文分词每秒钟大约100万字(速度上已经超越ictclas)

文件读取分词每秒钟大约30万字

准确率能达到96%以上

目前实现了.中文分词. 中文姓名识别 . 用户自定义词典

可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目.

3.2、实例

(1)下载ansj_seg-20130808 .jar(http://download.csdn.net/detail/u013142781/9494969),将ansj_seg-20130808 .jar引入到java项目中。

(2)创建测试类:

package com.luo.test;

import java.io.IOException;
import java.io.StringReader;
import org.ansj.domain.Term;
import org.ansj.splitWord.Analysis;
import org.ansj.splitWord.analysis.ToAnalysis;  

public class Test {

    public static void main(String[] args) throws IOException {
        Analysis udf = new ToAnalysis(new StringReader("Ansj中文分词是一个真正的ict的实现.并且加入了自己的一些数据结构和算法的分词.实现了高效率和高准确率的完美结合!"));
        Term term = null ;
        while((term=udf.next())!=null){
            System.out.print(term.getName()+" ");
        }
    }

}

(3)运行结果:

四、Jcseg

4.1、介绍

jcseg是使用Java开发的一款开源的中文分词器, 使用mmseg算法. 分词准确率高达98.4%, 支持中文人名识别, 同义词匹配, 停止词过滤…, 详情请查看jcseg官方首页.

官方首页: https://code.google.com/p/jcseg/

下载地址: https://code.google.com/p/jcseg/downloads/list

Jcseg详细功能介绍: (可以略过, 方便查看新版本功能变化)

1。目前最高版本:jcseg-1.9.2。兼容最高版本lucene-4.x和最高版本solr-4.x

2。mmseg四种过滤算法,分词准确率达到了98.41%。

3。支持自定义词库。在lexicon文件夹下,可以随便添加/删除/更改词库和词库内容,并且对词库进行了分类。参考下面了解如何给jcseg添加词库/新词。

4。(!New) 支持词库多目录加载. 配置lexicon.path中使用’;’隔开多个词库目录.

5。(!New)词库分为简体/繁体/简繁体混合词库: 可以专门适用于简体切分, 繁体切分, 简繁体混合切分, 并且可以利用下面提到的同义词实现,简繁体的相互检索, jcseg同时提供了词库两个简单的词库管理工具来进行简繁体的转换和词库的合并.

6。中英文同义词追加/ 同义词匹配+ 中文词条拼音追加.词库整合了《现代汉语词典》和cc-cedict辞典中的词条,并且依据cc-cedict词典为词条标上了拼音,依据《中华同义词词典》为词条标上了同义词(尚未完成)。更改jcseg.properties配置文档可以在分词的时候加入拼音和同义词到分词结果中。jcseg 新版词库

7。中文数字和中文分数识别,例如:”一百五十个人都来了,四十分之一的人。”中的”一百五十”和”四十分之一”。并且jcseg会自动将其转换为阿拉伯数字加入到分词结果中。如:150 ,1/40。

……….,详情可到官网下载文档《Jcseg-开发帮助文档.pdf》

4.2、实例

下载Jcseg:https://code.google.com/archive/p/jcseg/downloads,博主下载的是:jcseg-1.9.2-src-jar-dict。

解压后,jcseg-1.9.2-src-jar-dict\jcseg-1.9.2目录下,我们需要用到的有三个:lexicon(里面包含分词用到的词库)、jcseg-core-1.9.2.jar、jcseg.properties。

实例步骤:

(1)将jcseg-core-1.9.2.jar引入到对应java项目。

(2)修改jcseg.properties的lexicon.path为lexicon(词库)的位置,如下,记得是正斜杠:

(3)创建测试类,注意修改代码类对应的路径:

package com.luo;

import java.io.IOException;
import java.io.StringReader;
import org.lionsoul.jcseg.ASegment;
import org.lionsoul.jcseg.core.ADictionary;
import org.lionsoul.jcseg.core.DictionaryFactory;
import org.lionsoul.jcseg.core.IWord;
import org.lionsoul.jcseg.core.JcsegException;
import org.lionsoul.jcseg.core.JcsegTaskConfig;
import org.lionsoul.jcseg.core.SegmentFactory;  

public class Test {

    public static void main(String[] args) throws IOException, JcsegException {  

        //创建JcsegTaskConfig分词任务实例
        //即从jcseg.properties配置文件中初始化的配置
        JcsegTaskConfig config = new JcsegTaskConfig("D:/notworddevsoftware/eclipseworkspace/jcseg_test/jcseg.properties");
        //config.setAppendCJKPinyin(true);
        //创建默认词库(即: com.webssky.jcseg.Dictionary对象)
        //并且依据给定的JcsegTaskConfig配置实例自主完成词库的加载
        ADictionary dic = DictionaryFactory  .createDefaultDictionary(config,true);  

        dic.loadFromLexiconFile("D:/notworddevsoftware/eclipseworkspace/jcseg_test/lexicon/lex-main.lex");//这个路径是jcseg-1.9.4-src-jar-dict.zip 这个jar 包的  存放路径, 你自己找lexicon  文件夹下的 lex-main.lex  

        //依据给定的ADictionary和JcsegTaskConfig来创建ISegment
        //通常使用SegmentFactory#createJcseg来创建ISegment对象
        //将config和dic组成一个Object数组给SegmentFactory.createJcseg方法
        //JcsegTaskConfig.COMPLEX_MODE表示创建ComplexSeg复杂ISegment分词对象
        //JcsegTaskConfig.SIMPLE_MODE表示创建SimpleSeg简易Isegmengt分词对象.
        ASegment seg = (ASegment) SegmentFactory.createJcseg(JcsegTaskConfig.COMPLEX_MODE,new Object[]{config, dic});
        //设置要分词的内容
        String str = "jcseg是使用Java开发的一款开源的中文分词器, 使用mmseg算法. 分词准确率高达98.4%.";
        seg.reset(new StringReader(str));
        //获取分词结果
        IWord word = null;
        while ( (word = seg.next()) != null ) {
            System.out.print(word.getValue() + "|");
        }
    }
}

(4)运行结果:

五、自己使用算法实现

上面IKAnalyzer、Ansj、Jcseg都是java开源项目,可根据自己的个性化需求修改源码。

当然,其实也是可以自己写算法实现的。下面是博主之前看过的一篇文章,非常详细清晰的思路:Baidu分词算法分析

六、词库推荐

分词基本都是基于词库实现的,下面博主推荐一个词库,搜狗输入法细胞库,里面词库很全面,而且已经分好类,比如如果是商品搜索引擎,在里面寻找相关词库,有助于提高准确度哦:http://pinyin.sogou.com/dict/cate/index/394

下载下来的词库是.scel格式的,猿友可以使用“深蓝细胞词库scel转txt工具”进行转换。

时间: 2024-07-30 20:31:16

商品搜索引擎---分词(插件介绍与入门实例)的相关文章

GEF入门实例_总结_04_Eclipse插件启动流程分析

一.前言 本文承接上一节:GEF入门实例_总结_03_显示菜单和工具栏 注意到app目录下的6个类文件. 这6个文件对RCP应用程序而言非常重要,可能我们现在对这几个文件的理解还是云里雾里,这一节我们将通过这几个文件来了解Eclipse插件的启动过程. 二.Eclipse插件启动流程图 有问题的地方:第9步的实际的具体流程我暂时还不清楚. Eclipse启动流程图如下,都是自己总结的,所以可能有不当之处,希望读者能解惑并将其完善. 三.6个类文件的作用 这六个类文件的作用如下: 类名 作用 Ap

Gulp构建前端自动化工作流之:常用插件介绍及使用

在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: 1. 构建项目目录结构(Directory Structure Build) 2. 插件介绍及使用方法(Tasks and dependencies) 3. 扩展优化(Extend & Optimize Task) 4. 其他插件介绍(Other plug-ins) 5. 匹配规则(Match Files) 6. 注意事项(Attention) 关于Gulp的入门介绍及安装方法,可先去 <

jquery实战第一讲---概述及其入门实例

就在5月28号周四下午五点的时候,接到xxx姐姐的电话,您是xxx吗?准备一下,周五上午八点半去远洋面试,一路风尘仆仆,颠颠簸簸,由于小编晕车,带着晕晕乎乎的脑子,小编就稀里糊涂的去面试了,温馨提醒,晕车的小伙伴家中常备晕车药,关于远洋面试的一些总结,小编会后续在博客中贴出,希望对有需要的小伙伴一些帮助,通过面试发现面试官大量的提问jquery的相关知识,那时年少,学习jquery的时候,想起来就是一把辛酸泪,于是,小编励志再把JQuery的相关知识复习一遍,把相关的知识点总结到博客中,欢迎不同

OSGI入门实例讲解(一)

开放服务网关倡议(OSGi)定义了开发和部署模块应用程序和库的体系结构.作为介绍OSGi的第一篇文章,本文旨在让你了解OSGi开发的一些概念,并向你展示了如何使用Eclipse的OSGi容器(Equinox)实现建立一个简单的Hello World应用.此外还简要介绍了使用OSGi构建面向服务的应用程序以及OSGi的servicefactory和servicetracker类. OSGI(Open Services Gateway Initiative),也叫JAVA动态模块系统,定义了一套模块

SoapUI简介和入门实例解析

SoapUI简介 SoapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用. SoapUI是一个自由和开放源码的跨平台功能测试解决方案.通过一个易于使用的图形界面和企业级功能,SoapUI让您轻松, 快速创建和执行自动化功能.回归.合规和负载测试.在一个测试环境,SoapUI提供完整的测试覆盖,并支持所

Activiti工作流从入门到入土:入门实例

文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig欢迎 star !!! 一.前言 在上一节中我们对activiti进行了基本的介绍activiti进行了基本的介绍,同时介绍了基本的概念. 这一节,我将用一个入门程序,介绍如何使用activiti. 二.环境准备 2.1.编译器选择 这里我们使用Idea进行工作流开发,虽然Idea对于工作流的友好度不是很好,因为会有一些小的bug,但是,Idea对于Java的开发还是非常的好的. 在用

DWR之入门实例(一)

DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

TFS(Team Foundation Server)介绍和入门

在本文的两个部分中,我将介绍Team Foundation Server的一些核心特征,重点介绍在本产品的日常应用中是怎样将这些特性结合在一起使用的. 作为一名软件开发者,在我的职业生涯中,我常常会用到支持软件开发过程的大量开发工具,如版本号控制工具.漏洞跟踪包.生成脚本语言.单元測试框架和需求分析工具等等.在.NET平台上,大量的支持工具可以非常好地独立工作,可是,为了使得各种工具之间都够互相协作,还是常常须要一些手动工作. 随着Visual Studio产品线中Team Foundation