中文分词封装-TokenizerUtil

介绍

现阶段,应用于搜索引擎和自然语言处理的中文分词库五花八门,使用方式各不统一,虽然有适配于Lucene和Elasticsearch的插件,但是我们想在多个库之间选择更换时,依旧有学习时间。

Hutool针对常见中文分词库做了统一接口封装,既定义一套规范,隔离各个库的差异,做到一段代码,随意更换。

Hutool现在封装的引擎有:

注意此工具和模块从Hutool-4.4.0开始支持。

原理

类似于Java日志门面的思想,Hutool将分词引擎的渲染抽象为三个概念:

  • TokenizerEngine 分词引擎,用于封装分词库对象
  • Result 分词结果接口定义,用于抽象对文本分词的结果,实现了Iterator和Iterable接口,用于遍历分词
  • Word 表示分词中的一个词,既分词后的单词,可以获取单词文本、起始位置和结束位置等信息通过实现这三个接口,用户便可抛开分词库的差异,实现多文本分词。

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, " ");

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""