Home

Awesome

jieba-android

结巴分词的Android版本

感谢jieba分词原作者fxsjy,感谢jieba分词的java版本作者huaban,本代码的移植基于java版jieba-analysis,在其基础上加入了Android Asset下字典文件的生成和读取,并重点优化了在手机上的启动速度。直接读取原始字典文件进行初始化在测试手机上需要28秒完成,通过将加载字典文件生成的字典树存储成特殊格式的中间文件,本工程代码将初始化时间降到1.5秒,分词速度在1秒以内。实现详情参考文章:https://www.jianshu.com/p/fda5cf1d3e6a

Demo App效果展示

单纯分词效果:

效果展示1

分词结合搜索效果:

效果展示2

接入方式

在gradle中加入:

compile 'jackmego.com.jieba_android:jieba_android-release:0.1.0'

在proguard-rules中添加下面的混淆规则:

-keep class jackmego.com.jieba_android.RequestCallback { *; }
-keep class jackmego.com.jieba_android.JiebaSegmenter { *; }
-keep class jackmego.com.jieba_android.JiebaSegmenter$** {   # keep enum
    **[] $VALUES;
    public *;
}
-keep class jackmego.com.jieba_android.SegToken { *; }

使用的时候首先进行初始化,一般在MyApplication里进行:

// 异步初始化
JiebaSegmenter.init(getApplicationContext());

该初始化是异步进行的,速度仅需1.5秒即可完成包含35万词典的字典树的生成。 该Android分词器提供了三个接口用于分词,下面两个简单接口分别是同步和异步分词接口:

// 异步接口
public void getDividedStringAsync(final String query, final RequestCallback<ArrayList<String>> callback) {...}

// 同步接口
public ArrayList<String> getDividedString(String query) {...}

同时保留了结巴分词原有的分词接口process,可以指定分词模式是索引模式(INDEX)或搜索引擎模式(SEARCH),两者的差别在于搜索引擎模式分词更精细,索引模式相对更粗粒度。

public static enum SegMode {
        INDEX,
        SEARCH
    }

public List<SegToken> process(String query, SegMode mode) {...}

主要参数

加载35万词典1.5秒,分词1秒以内。