-
结巴分词与繁简体转换
结巴分词
请参考 结巴分词原理。
结巴分词的不足
这里是针对如果使用繁简体转换,仅仅想使用分词。
那么结巴分词会有哪些不足呢?
HMM 是一种面向未来的分词(预测),但是繁体是一种面向过去的(词组/字固定)
看似非常有用的 HMM,到了繁简体转换全部成为了鸡肋。
词库较大。
结巴分词是面向全体汉字分组的,所以分词的词库较大,这对于繁简体转换的词组某种程度而言是...
2020-01-08 02:09:32 |
Java
-
结巴分词原理讲解之数据归一化
结巴分词的归一化
结巴分词的字典加载有一段源码,做了数据的归一化,使用的是 log 函数。
截取如下:
for (Entry<String, Double> entry : freqs.entrySet()) {
entry.setValue((Math.log(entry.getValue() / total)));
minFreq = Math.min(...
2020-01-08 02:09:32 |
NLP
-
结巴分词原理讲解
分词的必要性
我们平时做文本分析,或者我个人想做一个繁简体转换/同义词替换等工具,分词都是必须的。
对于文本的朗读,统计等等,都是需要基于分词实现。
算法
前缀树算法+DAG 算法 其实是非常有用的。
我们基于最基础的一点,就可以实现最简单的分词。
敏感词(其他词语匹配),也可以基于这种算法。
正则表达式+搜索引擎,也和这些东西是紧密相连的。
算法的重要性
单单就 DFA ...
2020-01-08 02:09:32 |
Java
-
java 敏感词工具实现思路
敏感词
我们只要是涉及到用户可以自由发表言论的网站,或者说收集对应的信息。
都会涉及到用户的输入词敏感问题。
敏感类别
类似于直接给敏感词打一个标签。(label)
内容安全
内容暴露个人信息。
身份证,密码,手机号。银行卡号。
用户名,出生年月,家庭住址。年龄。
暴力色情
反动违法
广告推广垃圾信息
...
2020-01-07 02:09:32 |
Java
-
java 敏感词之 StopWord 停止词优化与特殊符号
背景
默认收集的敏感词字典,实际上有非常多的重复信息。
比如说:
兼职
兼!职
兼@职
兼#职
兼¥职
这种最核心的内容其实只有一个,如果将全部的停止词进行穷尽的话,将会使得敏感词构建的 Map 变得非常大,而且也没办法穷尽。
这种全部存储的方式非常的不灵活。
目的
所以这一节将停止词作为单独的内容,进行相关的处理。
核心目的如下:
(1)为敏感词库瘦身
(2)为后期 ...
2020-01-07 02:09:32 |
Java
-
java 敏感词之字典瘦身
背景
默认收集的敏感词字典,实际上有非常多的重复信息。
比如说:
兼职
兼!职
兼@职
兼#职
兼¥职
这种最核心的内容其实只有一个,如果将全部的停止词进行穷尽的话,将会使得敏感词构建的 Map 变得非常大,而且也没办法穷尽。
这种全部存储的方式非常的不灵活。
目的
所以这一节将停止词作为单独的内容,进行相关的处理。
核心目的如下:
(1)为敏感词库瘦身
(2)为后期 ...
2020-01-07 02:09:32 |
Java
-
java 敏感词之 DFA 算法(Tire Tree 算法)详解
背景
想实现一个基于敏感词库的敏感词工具。
遍历匹配
发现如果是逐个字符遍历的话,效率实在是太低。
这里我首先想到了两种算法:
KMP 算法
Brute-Force 算法
当然单纯只是匹配,其实性能依然非常的低。
正则表达式
当然还有一种方式就是基于正则表达式,个人感觉这种性能也比较差。
正则表达式
直接查了下资料,可以使用 DFA 算法来解决这个问题。
DFA 算法...
2020-01-07 02:09:32 |
Java
-
Regex 正则表达式与 DFA
业务背景
我希望通过 DFA 算法验证一个字符串中是否包含 url/邮箱/数字 等信息,这些直接使用 regex 判断起来比较简单。
因为复杂的事情已经被 regex 处理了,但是个人是在处理 DFA,就不想依赖 regex。
所以就学习下,如何将 regex 转换为 DFA 进行处理。
问题概述
随着计算机语言的结构越来越复杂,为了开发优秀的编译器,人们已经渐渐感到将词法分析独立...
2020-01-07 02:09:32 |
Java