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的博客

相关文章
|
11月前
|
自然语言处理 Go
Golang每日一练(leetDay0074) 词典类设计、单词搜索II
Golang每日一练(leetDay0074) 词典类设计、单词搜索II
97 0
|
数据采集 自然语言处理 算法
java应用集成HanLP进行中文自然语言分词详细完整案例以及demo源码
java应用集成HanLP进行中文自然语言分词详细完整案例以及demo源码
49951 1
java应用集成HanLP进行中文自然语言分词详细完整案例以及demo源码
|
自然语言处理
Ansj与hanlp分词工具对比
一、Ansj1、利用DicAnalysis可以自定义词库: 2、但是自定义词库存在局限性,导致有些情况无效:比如:“不好用“的正常分词结果:“不好,用”。 (1)当自定义词库”好用“时,词库无效,分词结果不变。
1057 0
|
Java 自然语言处理
java中利用hanlp比较两个文本相似度的步骤
 使用 HanLP - 汉语言处理包 来处理,他能处理很多事情,如分词、调用分词器、命名实体识别、人名识别、地名识别、词性识别、篇章理解、关键词提取、简繁拼音转换、拼音转换、根据输入智能推荐、自定义分词器 使用很简单,只要引入hanlp.
4385 0
|
自然语言处理 算法 Java
Hanlp汉字转拼音使用python调用详解
1、hanlp简介 HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
1847 0
|
自然语言处理 算法
中文分词算法工具hanlp源码解析
词图指的是句子中所有词可能构成的图。如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B)。一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图。
1672 0
|
自然语言处理
在Hanlp词典手动添加未登录词的方式介绍
在使用Hanlp词典进行分词的时候,会出现分词不准的情况,原因是内置词典中并没有收录当前这个词,也就是我们所说的未登录词,只要把这个词加入到内置词典中就可以解决类似问题,如何操作呢,
1111 0
|
自然语言处理 算法 Java
pyhanlp 中文词性标注与分词简介
如果想要只获取词性也是可以的,因为原分词器返回的是Java中的ArrayList属性,list中的每个单元都是一个term类,因此我们也可以通过获取term中的word字段来直接获取词语,或者nature属性,直接获取词性。这一特征,我们在之后也会用到。
4440 0
|
机器学习/深度学习 自然语言处理 算法