hanlp源码解读之字符正规化CharTable

简介:

概述:字符正规化是指在分词之前把繁体转成简体、大写转成小写等,在自然语言处理中这是必不可以的一个步骤!在hanlp中的实现方法是基于词典的,也就是正规则字符对照表。就是“data/dictionary/other/CharTable.txt” 这个词典,打开后是下面这个样子的!
image
在java程序中如何实现呢,相信大部分人会想用到用HashMap缓存起来不就可以了吗!当然,这个方法是可行的,但是HashMap在数据量比较大时,时间复杂度是接近O(n)的。这也是为什么加载词典用trie树,而不是直接用HashMap的原因了,当然内存也是一个方面,本篇文章不会讨论!下面我们来看下hanlp代码里的具体实现。

在hanlp中,是采用一维数据实现的,下面一步步来看源码的实现!源码位于com.hankcs.hanlp.HanLP包下的CharTable类中,这个类主是要加把 CharTable.txt加载到一维数组中。为了方便阅读,下面直接在代码中加入注释!

在分词之前会首化调用正规化接口(在启用正规化的情况下)
image
下面来看下CharTable.normalization(text);这个函数的实现:这个函数极其简单,就是对text中的每个字符查询一维数据COVERT,看到这里应该就能明白,正规化最重要的就是加载txt文件到CONVERT数组中
image
下面看具本的代码,敝人在代码中都加入了注释,此处不再另行讲解
image
image
image
image
文章来源于亚当-adam的博客

相关文章
|
算法 搜索推荐 Java
Java8 到 Java17 升级指南(Bug大全)
Java8 到 Java17 升级指南(Bug大全)
817 0
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
378 6
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
2143 1
|
机器学习/深度学习 自然语言处理 算法
深度学习算法简介(一)
深度学习算法简介(一)
828 0
|
存储 边缘计算 人工智能
边缘计算问题之边缘计算的定义如何解决
边缘计算问题之边缘计算的定义如何解决
617 0
|
JSON JavaScript Ubuntu
Ubuntu安装docker
Ubuntu安装docker
5089 0
|
自然语言处理 PHP 数据安全/隐私保护
带你写一个Mp文件解析器-Mp3文件结构全解析(一)
ID3V2一共有四个版本,ID3V2.1/2.2/2.3/2.4,目前流行的播放软件一般只支持第三版即ID3V2.3,由于ID3V1记录在文件的末尾处,ID3V2就只能记录在文件的首部了,也是因为这个原因,对ID3V2的操作比ID3V1要慢,而且ID3V2的结构比ID3V1的结构复杂的多,但是ID3V2可以记录更多的信息,长度可变
23560 4
|
IDE 关系型数据库 MySQL
MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结
MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结
2094 0
MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结
|
安全 Linux 网络安全
如何在 Rocky Linux 9 上打开 80 端口?
如何在 Rocky Linux 9 上打开 80 端口?
770 0
|
前端开发 关系型数据库 MySQL
使用JSP+Servlet+MySQL实现登录注册功能【详细代码】(上)
使用JSP+Servlet+MySQL实现登录注册功能【详细代码】(上)
750 0
使用JSP+Servlet+MySQL实现登录注册功能【详细代码】(上)