该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-14
linliangyi2007 写道 treason111 写道 楼主你好!我在solr1.3用了你的IKAnalyzer3.1.5GA分词,一开始用得都很好,就是在配置扩展词典的时候出错了,首先我没有找到WEBINF/classes目录,于是自己建了一个,把IKAnalyzer.cfg.xml文件放进去,然后就出错了“HTTP Status 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.wltea.analyzer.dic.Dictionary”好像是字典位置不对,能给我解释一下路径该怎么设置呢?我是这么设置的“<entry key="ext_dict">solr/WEB-INF/classes/t-base.dic</entry> ”,我用的是tomcat6,感谢您浪费宝贵的时间为我解答
首先,建议你是用3.1.6GA版本,其次,出现的异常说明你的路径下面没有扩展字典,因为对字典文件的载入是使用classloader的,所以看上去像是类没找到,实际上是字典没找到。 好的,非常感谢您!我马上试试 |
|
返回顶楼 | |
发表时间:2010-03-14
楼主,我换成就可以了。另外,我想问问,是不是新字典的新词都会加入到主字典里呢?如果是,那随着我添加字典种类的增多,主字典会不会越来越大呢?
|
|
返回顶楼 | |
发表时间:2010-03-15
treason111 写道 楼主,我换成就可以了。另外,我想问问,是不是新字典的新词都会加入到主字典里呢?如果是,那随着我添加字典种类的增多,主字典会不会越来越大呢?
所谓加入主词典不是指被记录到主词典文件中,而是指和主词典放在同一内存区域被匹配,这个是必须的。一般而言,1万个词元暂用1M内存,词典对重复的词不会加载两次,不必担心内存浪费 |
|
返回顶楼 | |
发表时间:2010-03-17
您好,我使用ik分词遇到个问题,就是 比如我查询工行的文章,如果文章量很少,会返回 的文章有 带有工字,并且带有行字的文章出现,怎么样来避免此问题,
第二我希望ik分词器分词至少两个字的分词,比希望分词到字,怎么样来处理,希望您能够回复。 |
|
返回顶楼 | |
发表时间:2010-03-17
lz我直接替换之前的jar文件可以吗?需要修改什么吗?
|
|
返回顶楼 | |
发表时间:2010-03-17
最后修改:2010-03-17
zhutouying98 写道 您好,我使用ik分词遇到个问题,就是 比如我查询工行的文章,如果文章量很少,会返回 的文章有 带有工字,并且带有行字的文章出现,怎么样来避免此问题,
第二我希望ik分词器分词至少两个字的分词,比希望分词到字,怎么样来处理,希望您能够回复。 你需要对org.wltea.analyzer.Context中的方法 /** * 向分词结果集添加词元 * @param lexeme */ public void addLexeme(Lexeme lexeme){ if(!Dictionary.isStopWord(segmentBuff , lexeme.getBegin() , lexeme.getLength())){ this.lexemeSet.addLexeme(lexeme); } } 修改为 /** * 向分词结果集添加词元 * @param lexeme */ public void addLexeme(Lexeme lexeme){ if(lexeme.getLength() > 1 && !Dictionary.isStopWord(segmentBuff , lexeme.getBegin() , lexeme.getLength())){ this.lexemeSet.addLexeme(lexeme); } } 就好。你需要下载源码然后编译。 如果取得所有的单字,你在搜索的时候,会搜不到词典中没有的词,个人认为这不是好主意 |
|
返回顶楼 | |
发表时间:2010-03-17
lym6520 写道 lz我直接替换之前的jar文件可以吗?需要修改什么吗?
如果你是3.0.0 - 3.1.6GA的替换,你不需要做任何修改。 从3.1.X替换到3.2.0的,如果你使用的是Lucene2.9,那么也不需要修改。 |
|
返回顶楼 | |
发表时间:2010-04-13
林老师你好,最近项目中在使用你的ik3.1.5分词器,其中要使用词库扩展功能,
按照使用文档中的的第一种方式Dictionary.loadExtendWords(dictList); 给Dictionary传入一个从数据库读出的List List绝对不是空的 但是 始终java.lang.ExceptionInInitializerError at org.wltea.analyzer.seg.ChineseSegmenter.<init>(ChineseSegmenter.java:37) at org.wltea.analyzer.cfg.Configuration.loadSegmenter(Configuration.java:114) at org.wltea.analyzer.IKSegmentation.<init>(IKSegmentation.java:54) at iktest.test.testik(test.java:20) at iktest.test.main(test.java:36) Caused by: java.lang.NullPointerException at org.wltea.analyzer.dic.Dictionary.loadExtendWords(Dictionary.java:421) at org.wltea.analyzer.dic.LoadMyDict.initConn(LoadMyDict.java:30) at org.wltea.analyzer.dic.Dictionary.<init>(Dictionary.java:84) at org.wltea.analyzer.dic.Dictionary.<clinit>(Dictionary.java:42) ... 5 more 非常困惑不知道为什么出现这个问题望老师指教 |
|
返回顶楼 | |
发表时间:2010-04-19
最后修改:2010-04-19
private static ArrayList<PseudoOriginalBeanVo> getPseudoOriginalList(String str){ ArrayList list=new ArrayList(); try { StringReader reader = new StringReader(str); IKSegmentation analyzer = new IKSegmentation(reader,false); Lexeme a=analyzer.next(); while(a!=null){ PseudoOriginalBeanVo vo=new PseudoOriginalBeanVo(); vo.setBegin(a.getBegin()); vo.setEnd(a.getEndPosition()); vo.setLength(a.getLength()); vo.setText(a.getLexemeText()); vo.setType(a.getLexemeType()); list.add(vo); a=analyzer.next(); } } catch (Exception ex) { MyLog.info("vo:"+ex.toString()); } return list; } 整个系统就调用这一个方法,需要用到中文分词, 不太熟悉,整个系统就无法释放内存,系统内存监视都切图了.希望楼主以及各位指点 |
|
返回顶楼 | |
发表时间:2010-04-20
最后修改:2010-04-20
zhang310 写道 private static ArrayList<PseudoOriginalBeanVo> getPseudoOriginalList(String str){ ArrayList list=new ArrayList(); try { StringReader reader = new StringReader(str); IKSegmentation analyzer = new IKSegmentation(reader,false); Lexeme a=analyzer.next(); while(a!=null){ PseudoOriginalBeanVo vo=new PseudoOriginalBeanVo(); vo.setBegin(a.getBegin()); vo.setEnd(a.getEndPosition()); vo.setLength(a.getLength()); vo.setText(a.getLexemeText()); vo.setType(a.getLexemeType()); list.add(vo); a=analyzer.next(); } } catch (Exception ex) { MyLog.info("vo:"+ex.toString()); } return list; } 整个系统就调用这一个方法,需要用到中文分词, 不太熟悉,整个系统就无法释放内存,系统内存监视都切图了.希望楼主以及各位指点 IK的词典是单例模型,在启动时载入,且不会释放内存。里面有27w的词条,是分词需要的。这个肯定是不会释放的,释放就遭了,呵呵 |
|
返回顶楼 | |