IKAnalyzer 分词器性能的一个疑问
@linliangyi 你好,今天在为 OSC 的全文搜索改造时做的一个小实验,是在一台普通的 PC 上进行(Win7/2.6G CPU/4G)的。
版本:Lucene 4.0/IKAnalyzer 2012 FF
我的测试程序如下:
package net.oschina.demo; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wltea.analyzer.core.IKSegmenter; import org.wltea.analyzer.core.Lexeme; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; /** * 测试 IK 分词器 * User: Winter Lau * Date: 13-1-10 * Time: 上午11:48 */ public class IKTester { private final static Log log = LogFactory.getLog(IKTester.class); public static void main(String[] args) { String text = "IK Analyzer 2012 是一个结合词典分词和文法分词的中文分词开源工具包。它使用了全新的正向迭代最细粒度切分算法。"; long ct = System.currentTimeMillis(); for(String word : splitKeywords(text)){ System.out.println(word); } System.out.printf("TIME %dn", (System.currentTimeMillis() - ct)); } /** * 关键字切分 * @param sentence 要分词的句子 * @return 返回分词结果 */ public static List<String> splitKeywords(String sentence) { List<String> keys = new ArrayList<String>(); if(StringUtils.isNotBlank(sentence)) { StringReader reader = new StringReader(sentence); IKSegmenter ikseg = new IKSegmenter(reader, true); try{ do{ Lexeme me = ikseg.next(); if(me == null) break; String term = me.getLexemeText(); keys.add(term); }while(true); }catch(IOException e){ log.error("Unable to split keywords", e); } } return keys; } }这段程序只是很简单的将一个句子切分成关键词列表。
但是在我机器上多次执行,每次时间都在 600 毫秒以上。
这个速度似乎是慢了点,是不是我的用法有什么问题吗?
补充:在 IK 3.x 下测试数据差不多。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
头一回看见
@红薯 发帖提问
StringReader ,IKSegmenter 这些对象的实例化比较耗时间,而不是分词的过程耗时间,经测试循环多次之后,分词的性能并不差
StringReader ,IKSegmenter 这些对象的实例化比较耗时间,而不是分词的过程耗时间,经测试循环多次之后,分词的性能并不差