`
yahaitt
  • 浏览: 760795 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

猎兔分词

阅读更多
  1、猎兔分词的特性:

l         可以作为lucene的一个模块调用,作为二元分词方法的替代。该组件直接扩展org.apache.lucene.analysis.Tokenizerorg.apache.lucene.analysis.Analyzer 类。

l         分词准确率98%以上。

l         同时支持分词和词性标注。

l         提供参数调节分词准确性和切分速度。

l         100%采用java实现的分词组件,无内存泄漏问题。可长期不间断运行。

l         采用多种分词方法结合,包括基于概率的n元切分方法,隐马尔科夫模型,未登录词识别算法,歧义识别算法和基于规则的方法等。

l         未登录词的识别包括:人名,地名,译名,企业机构名的完整识别。

l         采用多个大规模语料库训练概率词库。

l         针对多线程使用优化,占用内存少。

支持组合分词的方式。是针对合成词的特殊优化。例如,中华人民共和国是一个词,共和国也是一个词。

2、应用

CnAnalyzer.java
  1. package com.feedsky;   
  2.   
  3. import java.io.Reader;   
  4.   
  5. import org.apache.lucene.analysis.Analyzer;   
  6. import org.apache.lucene.analysis.LowerCaseFilter;   
  7. import org.apache.lucene.analysis.PorterStemFilter;   
  8. import org.apache.lucene.analysis.TokenStream;   
  9.   
  10. import com.lietu.seg.result.CnTokenizer;   
  11. import com.lietu.seg.result.PlaceFilter;   
  12.   
  13. public class CnAnalyzer extends Analyzer {   
  14.     //~ Static fields/initializers ---------------------------------------------   
  15.   
  16.     /**  
  17.      * An array containing some common English words that are not usually  
  18.      * useful for searching. and some double-byte interpunctions.....  
  19.      */  
  20.     /*private static String[] stopWords = {  
  21.         "www","的","和","与","时","在",  
  22.         "是","被","所","那","这","有",  
  23.         "将","会","为","对","了","过",  
  24.         "去"};*/  
  25.   
  26.     //~ Instance fields --------------------------------------------------------   
  27.   
  28.     /** stop word list */  
  29.     //private Set stopSet;   
  30.   
  31.     //~ Constructors -----------------------------------------------------------   
  32.   
  33.     /**  
  34.      * Builds an analyzer which removes words in STOP_WORDS.  
  35.      */  
  36.     public CnAnalyzer() {   
  37.         //stopSet = StopFilter.makeStopSet(stopWords);   
  38.     }   
  39.   
  40.     /**  
  41.      * Builds an analyzer which removes words in the provided array.  
  42.      *  
  43.      * @param stopWords stop word array  
  44.      */  
  45.     public CnAnalyzer(String[] stopWords) {   
  46.         //stopSet = StopFilter.makeStopSet(stopWords);   
  47.     }   
  48.   
  49.     //~ Methods ----------------------------------------------------------------   
  50.   
  51.     /**  
  52.      * get token stream from input  
  53.      *  
  54.      * @param fieldName lucene field name  
  55.      * @param reader input reader  
  56.      *  
  57.      * @return TokenStream  
  58.      */  
  59.     public final TokenStream tokenStream(String fieldName, Reader reader) {   
  60.         TokenStream result =  new CnTokenizer(reader);   
  61.         result = new LowerCaseFilter(result);   
  62.         result = new PorterStemFilter(result);   
  63.         result = new PlaceFilter(result);   
  64.         return result;   
  65.     }   
  66.        
  67. }   

 

testCnAnalyzer.java
  1. package com.feedsky;   
  2.   
  3. import java.io.StringReader;   
  4.   
  5. import org.apache.lucene.analysis.Token;   
  6. import org.apache.lucene.analysis.TokenStream;   
  7.   
  8. import com.lietu.seg.result.CnTokenizer;   
  9.   
  10. public class testCnAnalyzer {   
  11.        
  12.     public static void main(String[] args) {   
  13.         try {   
  14.             testCnAnalyzer();   
  15.         } catch (Exception e) {   
  16.             // TODO Auto-generated catch block   
  17.             e.printStackTrace();   
  18.         }   
  19.     }   
  20.   
  21.     public static void testCnAnalyzer() throws Exception {   
  22.   
  23.         long startTime;   
  24.   
  25.         long endTime;   
  26.   
  27.         StringReader input;   
  28.   
  29.         CnTokenizer.makeTag = false;   
  30.   
  31.         String sentence ="其中包括兴安至全州、桂林至兴安、全州至黄沙河、阳朔至平乐、桂林至阳朔、桂林市国道过境线灵川至三塘段、平乐至钟山、桂林至三江高速公路。";   
  32.   
  33.         input = new java.io.StringReader(sentence);   
  34.   
  35.         startTime = System.currentTimeMillis();   
  36.   
  37.         TokenStream tokenizer = new com.lietu.seg.result.CnTokenizer(input);   
  38.   
  39.         endTime = System.currentTimeMillis();   
  40.   
  41.         System.out.println("first seg time cost:" + (endTime - startTime));   
  42.   
  43.         for (Token t = tokenizer.next(); t != null; t = tokenizer.next())   
  44.   
  45.         {   
  46.   
  47.             System.out.println(t.termText() + " " + t.startOffset() + " "  
  48.   
  49.             + t.endOffset() + " " + t.type());   
  50.   
  51.         }   
  52.   
  53.     }   
  54.   
  55. }   

 

TestArray.java
  1. package com.feedsky;   
  2.   
  3. import java.util.ArrayList;   
  4.   
  5. import com.lietu.seg.result.CnToken;   
  6. import com.lietu.seg.result.Tagger;   
  7. /**  
  8.  * 以数组形式返回结果,ArrayList中保存的对象类型是seg.result.CnToken.  
  9.  * TestArray.java  
  10.  *java -Ddic.dir=/home/spider/luceneindex/dict -classpath .:/usr/java/jdk1.5.0_11/lib/tools.jar:/usr/java/jdk1.5.0_11/lib/dt.jar:/usr/java/jdk1.5.0_11/jre/lib/:/home/spider/luceneindex/classes:/home/spider/luceneindex/lib/seg.jar com.feedsky.TestArray  
  11.  
  12.  * @author  
  13.  */  
  14. public class TestArray {   
  15.   
  16.      public static void testFormatSegResult() throws Exception {   
  17.             long startTime;   
  18.             long endTime;   
  19.                
  20.             Tagger.makeTag= true;   
  21.                
  22.             String sentence ="上海雷天软件科技有限... 公司 上海雷天软件科技有限公司是一家从事通信软件制作的公司,为适应市场的高速发展,组织有更具潜力的团队,现诚聘请有资深经验,渴望成就与新挑战并能承受快速发展压力的年轻才俊加盟。户籍不限,唯才是用。 联系方式: 电 话:021-36030126 E-mail:zhujc@linghui.com 职位1: 软件开发工程师 职位描述: JAVA软件工程师(3-4人)责任:负责java软件程序编码工作,";   
  23.   
  24.             ArrayList result = Tagger.getFormatSegResult(sentence);   
  25.                
  26.             startTime = System.currentTimeMillis();   
  27.             for (int i=0; i
  28.             {   
  29.                 CnToken t = (CnToken)result.get(i);   
  30.                 System.out.println(t.termText + " " + t.startOffset() + " "  
  31.                                    + t.endOffset() + " "+t.type);   
  32.             }   
  33.             endTime = System.currentTimeMillis();   
  34.             System.out.println("first seg time cost:" + ( endTime - startTime));   
  35.         }   
  36.     public static void main(String[] args){   
  37.         try{   
  38.             testFormatSegResult();   
  39.         }catch(Exception e){   
  40.             e.printStackTrace();   
  41.         }   
  42.     }   
  43. }   

 

TestSentence1.java
  1. package com.feedsky;   
  2.   
  3. import com.lietu.seg.result.Tagger;   
  4. /**  
  5.  * 返回是个分割好的句子  
  6.  * TestSentence1.java  
  7.  *  
  8.  * @author  
  9.  */  
  10. public class TestSentence1 {   
  11.   
  12.     public static void  testSentence()   
  13.     {   
  14.         String sSentence="二桥工程指挥部指挥长王燮培告诉记者,";   
  15.         String sSentenceResult;   
  16.            
  17.         long startTime = System.currentTimeMillis();   
  18.         sSentenceResult= Tagger.getNormalSegResult(sSentence);   
  19.         System.out.println("seg time cost:" + (System.currentTimeMillis() - startTime));    
  20.            
  21.         System.out.println(sSentenceResult);   
  22.            
  23.         sSentence="我看见一座座山。";   
  24.         sSentenceResult= Tagger.getNormalSegResult(sSentence);   
  25.         System.out.println(sSentenceResult);   
  26.   
  27.         sSentence="1969年,一个偶然的机会,他们受法国文化部艺术司司长安东尼奥先生之邀,";   
  28.         sSentenceResult= Tagger.getNormalSegResult(sSentence);   
  29.         System.out.println(sSentenceResult);   
  30.     }   
  31.   
  32.     public static void main(String[] args){   
  33.         testSentence();   
  34.     }   
  35. }   

 

TokenTest.java
  1. package com.feedsky;   
  2.   
  3. import java.util.ArrayList;   
  4.   
  5. import com.lietu.seg.result.CnToken;   
  6. import com.lietu.seg.result.Tagger;   
  7.   
  8. public class TokenTest {   
  9.   
  10.     /**  
  11.      * @param args  
  12.      */  
  13.     public static void main(String[] args) {   
  14.         try {   
  15.             testFormatSegResult();   
  16.         } catch (Exception e) {   
  17.             // TODO Auto-generated catch block   
  18.             e.printStackTrace();   
  19.         }   
  20.   
  21.     }   
  22.   
  23.     public static void testFormatSegResult() throws Exception {   
  24.   
  25.         long startTime;   
  26.   
  27.         long endTime;   
  28.   
  29.         Tagger.makeTag = false;   
  30.   
  31.         String sentence ="其中包括兴安至全州、桂林至兴安、全州至黄沙河、阳朔至平乐、桂林至阳朔、桂林市国道过境线灵川至三塘段、平乐至钟山、桂林至三江高速公路。";   
  32.   
  33.         ArrayList result = Tagger.getFormatSegResult(sentence);   
  34.   
  35.         startTime = System.currentTimeMillis();   
  36.   
  37.         for (int i = 0; i < result.size(); i++) {   
  38.             CnToken t = (CnToken) result.get(i);   
  39.             System.out.println(t.termText() + " " + t.startOffset() + " "  
  40.                     + t.endOffset() + " " + t.type());   
  41.         }   
  42.         endTime = System.currentTimeMillis();   
  43.         System.out.println("first seg time cost:" + (endTime - startTime));   
  44.     }   
  45.   
  46. }   

 

Item.java
  1. package com.feedsky;   
  2.   
  3. public class Item {   
  4.     private String url;   
  5.   
  6.     private String docid;   
  7.   
  8.     private String content;   
  9.   
  10.     public String getContent() {   
  11.         return content;   
  12.     }   
  13.   
  14.     public void setContent(String content) {   
  15.         this.content = content;   
  16.     }   
  17.   
  18.     public String getDocid() {   
  19.         return docid;   
  20.     }   
  21.   
  22.     public void setDocid(String docid) {   
  23.         this.docid = docid;   
  24.     }   
  25.   
  26.     public String getUrl() {   
  27.         return url;   
  28.     }   
  29.   
  30.     public void setUrl(String url) {   
  31.         this.url = url;   
  32.     }   
  33.   
  34. }   

 

在运行这些程序前,需要设置环境,用以指定猎兔分词中需要用到的词库所在目录   -Ddic.dir=D:/wjlproject/lietuTest/dict

或者通过在eclipse中的Arguments标签中的VM arguments输入框中输入 -Ddic.dir=D:/wjlproject/lietuTest/dict

如果发现运行时内存溢出问题,可以设置内存的最小和最大值来避免这个情况的发生

-Ddic.dir=D:/wjlproject/httpclient/dict -Xms30m -Xmx512m

分享到:
评论

相关推荐

    猎兔Lucene.NET中文分词源码seg_src.rar

    《猎兔Lucene.NET中文分词源码seg_src.rar》是一个包含了Lucene.NET中文分词模块的源代码压缩包,其重要性和价值在于为开发者提供了深入理解与自定义中文分词算法的宝贵资源。Lucene.NET是Apache Lucene搜索引擎库的...

    baidu.rar_ baidu_dictionary_中文分词_中文分词 词典_分词词典

    《中文分词与百度词典:深入理解与应用》 中文分词是自然语言处理(NLP)领域的一项基础任务,对于中文文本的理解至关重要。它涉及到将连续的汉字序列切分成具有语义意义的词语单元,是信息检索、机器翻译、情感...

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

    在提供的压缩包文件中,包含了各种与分词相关的源码,例如"zt_逆向最大匹配分词算法"可能是实现逆向最大匹配算法的具体代码,"秒盘古分词"可能是指快速版本的盘古分词程序,"中文分词"和"英文分词"源码分别针对中文...

    java版本结巴分词

    Java版本的结巴分词是基于Java实现的中文分词工具,它在处理中文文本时具有高效、灵活和易用的特点。结巴分词(Jieba)最初是由Python开发的,但为了满足Java开发者的需求,也有了Java版本。本文将深入探讨Java版...

    分词词库_中文分词词库最新整理(TXT格式)

    ### 分词词库_中文分词词库最新整理(TXT格式) #### 知识点概述 本文档将根据提供的文件信息“分词词库_中文分词词库最新整理(TXT格式)”来生成相关知识点。该文件主要包含了中文分词词库的内容,通过分析这些...

    基于 Java 的中文分词器分词效果评估对比项目

    基于 Java 的中文分词器分词效果评估对比项目。它主要实现了以下功能: 分词效果评估:用户可以通过程序对比不同分词器的分词结果,以及计算分词速度、行数完美率、行数错误率、字数完美率、字数错误率等指标。 ...

    IK智能分词器下载8.12.2版本

    IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载8.12.2版本IK智能分词器下载...

    百度中文分词词库

    中文分词是中文信息处理中的关键技术之一,尤其在搜索引擎、自然语言处理和机器学习等领域扮演着至关重要的角色。"百度中文分词词库"是一个专门用于分词的资源,它包含了大量的词汇及其组合方式,为精确地将连续的...

    word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估

    本话题将深入探讨四种常用的Java分词工具:word分词器、ansj分词器、mmseg4j分词器以及ik-analyzer,以及它们在实际应用中的效果评估。 首先,ansj分词器是由李弄潮开发的一款开源分词工具,它具有强大的词典支持和...

    php分词 thinkphp分词源码

    在IT行业中,分词是文本处理的一个重要环节,特别是在搜索引擎、信息检索、自然语言处理等领域。PHP作为一种广泛应用的服务器端脚本语言,同样有多种实现分词功能的库和工具。ThinkPHP作为PHP的热门框架,也提供了...

    中文自动分词算法

    在本文中,我们讨论了分词的基本知识、分词的困难、基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法、最大匹配算法、最少切分算法和基于统计语言模型的分词算法等。通过对这些方法的分析,我们...

    盘古分词,分词技术

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

    es7.0 ik的分词器

    描述中提到,"es提供的分词是英文分词,对于中文的分词就做的非常不好了",这意味着在处理中文文档时,ES的内置分词器可能无法满足需求。为了更好地进行中文文本的索引和检索,就需要使用专门为中文设计的分词工具,...

    lucene6.6+拼音分词+ik中文分词包

    《深入理解Lucene 6.6:拼音与IK中文分词技术详解》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用。在处理中文文本时,分词是至关重要的一步,它决定了搜索的精度和效果。本文将详细讲解如何在...

    C# 搜索引擎 分词

    在IT领域,尤其是在自然语言处理(NLP)中,分词是至关重要的一步。本文将深入探讨使用C#实现搜索引擎的分词技术。分词,简单来说,就是将连续的文本序列按照语言规则分解成一系列独立的词语,是信息检索、文本分析...

    分语算法,分词算法介绍

    分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 ...

    文本分词词典 分词 搜索引擎

    文本分词是自然语言处理(NLP)中的基础任务,对于构建搜索引擎至关重要。搜索引擎的核心功能是索引和检索大量信息,而有效分词是确保准确匹配用户查询与文档内容的关键步骤。在这里,我们将深入探讨“文本分词词典...

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    IK中文分词器原理

    ### IK中文分词器原理详解 #### 一、概述 IK中文分词器是一种广泛应用于中文文本处理领域的高效工具,其核心功能在于能够精准地识别并切割中文文本中的词汇单元,进而为后续的信息检索、自然语言处理等工作提供基础...

    php中文实现分词搜索

    当我们面临中文数据的处理,特别是在搜索引擎或者信息检索系统中,分词搜索是必不可少的环节。"php中文实现分词搜索"这个主题涉及到的是如何利用PHP来处理中文文本并进行有效的分词,从而实现精准的搜索功能。 首先...

Global site tag (gtag.js) - Google Analytics