今天下午部门内部技术分享是分词器算法。这次的主讲是大名鼎鼎的Ansj分词器的作者-孙健

作者简介:
1. Ansj分词器作者
2. elasticsearch-sql(elasticsearch的sql插件)作者,支持sql查询
3. nlp-lang自然语言工具包发起人
4. NLPCN(自然语言处理组织)发起人
等等…
网站:http://www.nlpcn.org/
GIT地址:https://github.com/NLPchina

具体作者详情请百度、Google

    大神首先对中文分词的概念进行详细的解释,并对比了传统分词和自然语言分词的区别和优略势。然后又讲到目前中文分词在应用过程中遇到的一些困难,其中就包括中文歧义的识别(包含交叉歧义、组合歧义、真歧义)、人名识别、地名识别和机构名识别。在这几种难题中,又以机构名识别最为困难(机构名称各种简称如:北京大学(北大)、腾讯(鹅场)等)。召回率和准确率的关系,正向匹配、逆向匹配等等。生动的讲解了分词的原理和难度所在。

    但是讲到怎么实现的时候,大家都是一脸懵逼的,各种算法(Trie Tree、双数组trie树、CRF模型等)。听完就什么都不记得了,呵呵。

    不过讲到最后的时候给我们分享了下HashMap的一种简单实现分词器的思路,意外的收获。下面通过代码说明(五分钟搞定^_^)。

HashMap简单实现的分词器

public class TokenizerDemo {private static Map<String, String> map = new HashMap<String, String>();//词典中最长词的长度,map中的key的最长长度private static final int maxSize = 3;static{//可以从数据库中加载或词表中加载map.put("中国", "");map.put("北京", "");map.put("中关村", "");map.put("海淀", "");}public static void main(String[] args) {String text = "中国人民共和国首都是北京,中关村在海淀区。";int length = text.length();for(int i=0; i<length; i++){int endIdx = i+maxSize;if(endIdx>length){endIdx = length;}//最大逆序匹配for(int j=0; j<maxSize; j++){String s = text.substring(i, endIdx);if(map.get(s)!=null){//跳过匹配过的词(后面会说明跳过匹配词的原因)i=endIdx-1;System.out.println(s);break;}else{endIdx-=1;if(endIdx==i){break;}}}}}
}

输出结果:
中国
北京
中关村
海淀

注意:
如果不跳过已经匹配的词会出现”北京剧院” 拆分成 [北京]、[京剧]、[剧院] 三个词,
如果跳过匹配过的词就会拆分成 [北京]、[剧院]。

分词原理:

从词典中找出最长词的长度,这里为maxSize=3,按照maxSize的长度从文本的第一位(i=0)截取要抽取的文本【中国人】,然后去Map中查找是否有对应的值,如果没有减去一个长度截取(maxSize-1)【中国】,去Map中查找,找到则停止当前查找,接着从匹配当前词后面的字(i=2)【人民共】开始继续上述的步骤开始查找。

代码执行的流程如下:

 第一次循环(i=0):中国人  -> 无命中(map中没找到)  (j=0)中国    -> map命中               (j=1)  【注释:命中后i+2(当前词)的长度。所以i=2】第二次循环(i=2):人民共  -> 无命中                (j=0)人民    -> 无命中                (j=1)人      -> 无命中                (j=2)第三次循环(i=3):民共和  -> 无命中                (j=0)民共    -> 无命中                (j=1)民      -> 无命中                (j=2)...依次类推,找出文本中所有匹配词典中的词

很简单的代码就说明了分词器的原理(只是最简单、能命中词而以)。

应用场景

敏感词、文字过滤是一个网站必不可少的功能,可以使用这么简单的几行代码实现网站的敏感词过滤功能,自己这么简单几行代码就能实现是不是很棒。

本人简书blog地址:http://www.jianshu.com/u/1f0067e24ff8    
点击这里快速进入简书

GIT地址:http://git.oschina.net/brucekankan/
点击这里快速进入GIT

HashMap实现中文分词器相关推荐

  1. java HashMap实现中文分词器 应用:敏感词过滤实现

    今天下午部门内部技术分享是分词器算法.这次的主讲是大名鼎鼎的Ansj分词器的作者-孙健. 作者简介: Ansj分词器作者 elasticsearch-sql(elasticsearch的sql插件)作 ...

  2. Trie Tree 实现中文分词器

    前言 继上一篇HashMap实现中文分词器后,对Trie Tree的好奇,又使用Trie Tree实现了下中文分词器.效率比HashMap实现的分词器更高. Trie Tree 简介 Trie Tre ...

  3. 11大Java开源中文分词器的使用方法和分词效果对比

    2019独角兽企业重金招聘Python工程师标准>>> 本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了1 ...

  4. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较...

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  5. Java开源的11个中文分词器使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  6. 【分词器】11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  7. 11大Java开源中文分词器的使用方法和分词效果对比(转)

    原文出处: 杨尚川 本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码 ...

  8. [024] 11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  9. Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

最新文章

  1. AI攻击AI,升级的网络安全战
  2. SciDB 15.7 centos6.5 安装教程
  3. netbeans下开发rails快捷键 及 Ruby On Rails开发技巧总结
  4. jsp做看板_如何使用看板做敏捷开发
  5. php 伸展菜单代码,上下伸展的JS菜单
  6. Linux 下 I/O 多路复用技术 epoll
  7. git 代码提交过程
  8. c++之find()函数
  9. ubuntu 发包和抓包工具的使用
  10. Flash遮罩——水波、瀑布
  11. 【数据库】三级模式两级映射详解
  12. 四色定理c语言,阅读下列程序说明和C代码,将应填入(n)处。【程序5说明】著名的四色定理指出..._考试资料网...
  13. 友盟统计如何去掉“站长统计”
  14. 如何通过关键字和搜索结果分析用户需求
  15. IE浏览器高通网站打不开dump分析选择目录总结
  16. 酷狗音乐模仿还在继续
  17. Vue项目中操作svg文件
  18. geber文件各层英文缩写对应关系
  19. 骰子gif图片,一到六,png格式,骰子游戏的骰子素材
  20. tsm oracle备份,TSM下oracle备份

热门文章

  1. 六、乘胜追击,将剩下的Git知识点搞定
  2. Mysql安装两种方法
  3. 不再内卷!视觉字幕化新任务合集
  4. 下一代对话系统中的关键技术(上篇)
  5. 北京内推 | 微软亚洲研究院MSRA STCA招聘多模态算法实习生
  6. 如何用Transformer来做目标检测?一文简述DERT及其变体
  7. AIRAVATA:量化机器学习中的参数泄露
  8. 那个双非本科,还想转算法岗的姑娘,最后怎么了?
  9. 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法
  10. 2018ACM-ICPC Asia Nanjing Regional Contest