论坛首页 Java企业应用论坛

发布IKAnalyzer中文分词器V3.1.6GA

浏览 14198 次
精华帖 (3) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-01  
linliangyi2007 写道
piziwang 写道


删除原有的主词典 岂不是其他地方的lucene+IKanalyzer全文检索 就无法使用了啊?

替换IK的词典,会不会影响到内存中已经加载的IK词典??


这个也是一个问题,是会影响的。如果你既要全部的词典,又要个性化关键字,那你只能自己在分词后进行二次匹配,来决定那些词要留了。

也只能对分词后的结果再次进行二次匹配了。
谢谢您啊!呵呵

顺便问一句:网上很多论坛帖子的标签Tag是如何生成的啊??
0 请登录后投票
   发表时间:2009-12-03  
在lucene3.0下使用会有错误的?
0 请登录后投票
   发表时间:2009-12-03  
lucene3.0下出现以下错误

Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z
at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:137)
at org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:246)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:773)
at org.apache.lucene.index.DocumentsWriter.addDocument(DocumentsWriter.java:751)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1928)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1902)
at IKAnalyzerDemo.main(IKAnalyzerDemo.java:43)
0 请登录后投票
   发表时间:2009-12-03  
jacky2007 写道
lucene3.0下出现以下错误

Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z
at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:137)
at org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:246)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:773)
at org.apache.lucene.index.DocumentsWriter.addDocument(DocumentsWriter.java:751)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1928)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1902)
at IKAnalyzerDemo.main(IKAnalyzerDemo.java:43)



IK3.1.6GA不支持Lucene3.0版本,原因是Lucene3.0完全改变了先前版本的analysis部分的API。在lucene2.9开始,已经声明要废除旧API,不过做了兼容处理,到了3.0则彻底删除了。

为此IK Analyzer将在下周一份发布 3.2.0版本,新版本将全面跟随lucene3.0的升级。新版本会支持lucene2.9 - lucene3.0 以及 solr1.4 ,但不再对lucene2.4的API支持。

目前3.2.0版本已经在测试阶段,您可以留下email,提前获取新版本体验。谢谢
0 请登录后投票
   发表时间:2009-12-03  
linliangyi2007 写道
jacky2007 写道
lucene3.0下出现以下错误

Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z
at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:137)
at org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:246)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:773)
at org.apache.lucene.index.DocumentsWriter.addDocument(DocumentsWriter.java:751)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1928)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1902)
at IKAnalyzerDemo.main(IKAnalyzerDemo.java:43)



IK3.1.6GA不支持Lucene3.0版本,原因是Lucene3.0完全改变了先前版本的analysis部分的API。在lucene2.9开始,已经声明要废除旧API,不过做了兼容处理,到了3.0则彻底删除了。

为此IK Analyzer将在下周一份发布 3.2.0版本,新版本将全面跟随lucene3.0的升级。新版本会支持lucene2.9 - lucene3.0 以及 solr1.4 ,但不再对lucene2.4的API支持。

目前3.2.0版本已经在测试阶段,您可以留下email,提前获取新版本体验。谢谢


谢谢回复.
email:ccx1999#163.com(请把#换成@)
0 请登录后投票
   发表时间:2010-02-24  
huangfox 写道
请问
对 “玩具汽车” 进行分词被分成: “玩具”和“汽车”
但是检索需求 查“车”也能够检索出 玩具汽车
请问是否可以将“玩具汽车”
分成:




玩具
汽车
即:第一按字分;第二按词分。

若是要改源代码,怎么处理呢?
  ps:对分词源码还没有读过呢~


你可以加一个简单的单字切分的子分词器到IK中,实现IK的ISegmenter接口,并修改Configuration中的loadSegmenter方法。
同时必须使用IKAnalyzer(false)方式构造分词器,这样不会过滤重叠的单字切分。
0 请登录后投票
   发表时间:2010-08-10  
在使用中有几个问题 请老师在百忙中回答一下
1 我在mydict.dic里面写了 “7仔”这个词,分词分不出来,是不是因为数字和文字混在一起就不行啊?(其他自定义的词是可以的)
2 如果我想分出来的词,都是长度为2以上的,怎么做呢?
3 我代码里写了
  Analyzer analyzer = new IKAnalyzer();
  this.iwriter =  new IndexWriter(indexDir,analyzer ,true , IndexWriter.MaxFieldLength.UNLIMITED);
  那怎么获取到 IKSegmentation ikSeg
  因为我想根据切分出来的Lexeme的Type来判断是否只是TYPE_CJK_NORMAL
  因为我只需要把这个类型的词进行索引
0 请登录后投票
   发表时间:2010-08-10  
guava 写道
在使用中有几个问题 请老师在百忙中回答一下
1 我在mydict.dic里面写了 “7仔”这个词,分词分不出来,是不是因为数字和文字混在一起就不行啊?(其他自定义的词是可以的)
2 如果我想分出来的词,都是长度为2以上的,怎么做呢?
3 我代码里写了
  Analyzer analyzer = new IKAnalyzer();
  this.iwriter =  new IndexWriter(indexDir,analyzer ,true , IndexWriter.MaxFieldLength.UNLIMITED);
  那怎么获取到 IKSegmentation ikSeg
  因为我想根据切分出来的Lexeme的Type来判断是否只是TYPE_CJK_NORMAL
  因为我只需要把这个类型的词进行索引



1.词典只能处理全中文的词汇,对于数字型字符,会被分配到数字切分器处理,无法进入中文切分过程

2/3综合两个问题,我想你的需求是仅需要对词典包含的词进行切分,那么你可以修改源码, org.wltea.analyzer.cfg.Configuration类中的public static List<ISegmenter> loadSegmenter()方法,移除其中的QuantifierSegmenter和LetterSegmenter子分词器
另外,修改org.wltea.analyzer.Context中的addLexeme方法,过滤长度小于2的词语,只添加Type为TYPE_CJK_NORMAL的词元
0 请登录后投票
   发表时间:2010-08-10  
guava 写道
在使用中有几个问题 请老师在百忙中回答一下
1 我在mydict.dic里面写了 “7仔”这个词,分词分不出来,是不是因为数字和文字混在一起就不行啊?(其他自定义的词是可以的)
2 如果我想分出来的词,都是长度为2以上的,怎么做呢?
3 我代码里写了
  Analyzer analyzer = new IKAnalyzer();
  this.iwriter =  new IndexWriter(indexDir,analyzer ,true , IndexWriter.MaxFieldLength.UNLIMITED);
  那怎么获取到 IKSegmentation ikSeg
  因为我想根据切分出来的Lexeme的Type来判断是否只是TYPE_CJK_NORMAL
  因为我只需要把这个类型的词进行索引



另外提醒你,如果可以尽可能升级Lucene到3.0并下载Ik Analyzer 3.2.3版本
0 请登录后投票
   发表时间:2010-08-11  
/**
* 向分词结果集添加词元
* @param lexeme
*/
public void addLexeme(Lexeme lexeme){
if(!Dictionary.isStopWord(segmentBuff , lexeme.getBegin() , lexeme.getLength())){
if(lexeme.getLength()>1 && lexeme.getLexemeType()==0){
this.lexemeSet.addLexeme(lexeme);
}

}
}

作了这样的修改 ok了 谢谢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics