IKAnalyzer 分词器性能的一个疑问

发布于 2021-11-18 05:00:08 字数 2114 浏览 844 评论 3

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤独患者 2021-11-18 17:30:14

头一回看见
@红薯 发帖提问

累赘 2021-11-18 13:06:17

StringReader ,IKSegmenter 这些对象的实例化比较耗时间,而不是分词的过程耗时间,经测试循环多次之后,分词的性能并不差

掩饰不了的爱 2021-11-18 07:23:31

StringReader ,IKSegmenter 这些对象的实例化比较耗时间,而不是分词的过程耗时间,经测试循环多次之后,分词的性能并不差

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文