现阶段,应用于搜索引擎和自然语言处理的中文分词库五花八门,使用方式各不统一,虽然有适配于Lucene和Elasticsearch的插件,但是我们想在多个库之间选择更换时,依旧有学习时间。
Hutool针对常见中文分词库做了统一接口封装,既定义一套规范,隔离各个库的差异,做到一段代码,随意更换。
Hutool现在封装的引擎有:
注意 此工具和模块从Hutool-4.4.0开始支持。
类似于Java日志门面的思想,Hutool将分词引擎的渲染抽象为三个概念:
通过实现这三个接口,用户便可抛开分词库的差异,实现多文本分词。
Hutool同时会通过TokenizerFactory根据用户引入的分词库的jar来自动选择用哪个库实现分词。
//自动根据用户引入的分词库的jar来自动选择使用的引擎
TokenizerEngine engine = TokenizerUtil.createEngine();
//解析文本
String text = "这两个方法的区别在于返回值";
Result result = engine.parse(text);
//输出:这 两个 方法 的 区别 在于 返回 值
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
当你引入Ansj,会自动路由到Ansi的库去实现分词,引入HanLP则会路由到HanLP,依此类推。
也就是说,使用Hutool之后,无论你用任何一种分词库,代码不变。
此处以HanLP为例:
TokenizerEngine engine = new HanLPEngine();
//解析文本
String text = "这两个方法的区别在于返回值";
Result result = engine.parse(text);
//输出:这 两个 方法 的 区别 在于 返回 值
String resultStr = CollUtil.join((Iterator<Word>)result, " ");