jieba-android

Introduction: 结巴分词的 Android 版本
More: Author   ReportBugs   
Tags:

结巴分词的 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 秒以内。

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools