基于j ava的中文分词工具ANSJ
ANSJ
这是一个基于n-Gra m+C RF+HMM的中文分词的j a va实现.
分词速度达到每秒钟大约200万字左右mac air下测试 准确率能达到96%以上
目前实现了.中文分词.中文姓名识别.用户自定义词典,关键字提取 自动摘要关键字标记等功能
可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目.分词的目的是创建一个高稳定可用的中文分词工具,可以利用到各种需要文字处理的场景中下面简单介绍一下Ansj中文分词的主要算法及特点.
数据结构
高度优化Trie树
在用户自定义词典以及各种类似于Map的场景中,大量使用的一个工具,众所周知,Tr ie具有高速的文本扫描能力,和较低的内存占用率,是最好的AC机之一,弦外之音,在我的认知范围内,貌似没有之一.相比其它结构在性能和构造上做到了很好的平衡,但是在j ava中,大量构建map尤其是has hmap,是一个非常昂贵的操作,通过对于一个map放入大量的key也注定其在自动拆箱装箱,以及解决冲突,大量hash匹配上做了过多的小消耗,虽然多数人认为,这种消耗属于纳秒级别的,但是对于动不动就上GB的文本来说,这个消耗是不可忽略的,所以作者在这里使用了首字母hash次字二分的方式来避免过多的消耗内存,也正应为有了这个机制.可以保证Ansj加载更多的用户自定义词典,有人问我具体的数字.大约500万词,1 Gd e内存.在这里作者强烈推荐这个小家伙,你可以通过nlp-lang包来获取这个小工具,居家神器.
三数组trie树
三数组trie树,好吧我知道你们会吐槽我明明用的DAT(Double Array Tree),为什么在这里改成了TAT(Tree Array Tree)。我也不想如此但是为了严谨一些真实的还原算法 的确是用了三个数组来实现的DA T的主要是为了在判断词语之后避免一次无谓的倒退算是空间换取时间的一个策略吧具体感兴趣的可以参见nlp-lang中DAT的创建。对于DAT算法个人觉得。如非必要勿用其在构造和修改上具有很多不确定性不符合简单可依赖的理念有兴趣的人可以了解下。在我小时候的博客中写了几篇关于DA T的文章虽然很水。据说也有几个人看明白了。
机器学习
隐马尔科夫语言模型最短路径ansj中和ngram一起使用.通过两个词语之间的关联来确定,用来做语义消歧.
TF/I DF词袋模型关键词抽取中用到.用来确定一个词的重要程度.同时利用关键词对文章进行自动摘要
CRF类似CRF的上下文基于词的标注用来实现新词发现功能,同时新词发现也服务于关键词抽取
ToAnalysis精准分词
精准分词是Ansj分词的***店长推荐款***
它在易用性,稳定性.准确性.以及分词效率上.都取得了一个不错的平衡.如果你初次尝试Ansj如果你想开箱即用.那么就用这个分词方式是不会错的.
DicAnalysis用户自定义词典优先策略的分词
用户自定义词典优先策略的分词,如果你的用户自定义词典足够好,或者你的需求对用户自定义词典的要求比较高,那么强烈建议你使用DicAnalysis的分词方式.可以说在很多方面Dic优于ToAnalysis的结果
NlpAnalysis带有新词发现功能的分词nlp分词是总能给你惊喜的一种分词方式.
它可以识别出未登录词.但是它也有它的缺点.速度比较慢.稳定性差.ps:我这里说的慢仅仅是和自己的其他方式比较.应该是40w字每秒的速度吧.
个人觉得nlp的适用方式.1.语法实体名抽取.未登录词整理.主要是对文本进行发现分析等工作
IndexAnalysis面向索引的分词
面向索引的分词。顾名思义就是适合在lucene等文本检索中用到的分词。 主要考虑以下两点
召回率*召回率是对分词结果尽可能的涵盖。 比如对“上海虹桥机场南路”召回结果是[上海/ns,上海虹桥机场/nt,虹桥/ns,虹桥机场/nz,机场/n,南路/nr]准确率*其实这和召回本身是具有一定矛盾性的Ansj的强大之处是很巧妙的避开了这两个的冲突。比如我们常见的歧义句“旅游和服务”->对于一般保证召回。大家会给出的结果是“旅游和服服务”对于a nsj不存在跨te r m的分词。意思就是。召回的词只是针对精准分词之后的结果的一个细分。比较好的解决了这个问题
BaseAnalysis最小颗粒度的分词
基本就是保证了最基本的分词.词语***颗粒度最非常小***的. .所涉及到的词大约是***10万***左右.
基本分词速度非常快.在macAir上.能到每秒300 w字每秒.同时准确率也很高.但是对于新词他的功能十分有限.
功能统计
String str="洁面仪配合洁面深层清洁毛孔清洁鼻孔面膜碎觉使劲挤才能出一点点皱纹脸颊毛孔修复的看不见啦草莓鼻历史遗留问题没辙脸和脖子差不多颜色的皮肤才是健康的长期使用安全健康的比同龄人显小五到十岁28岁的妹子看看你们的鱼尾纹" ;
System.out.println(BaseAnalys is.pars e(str));
洁/ag,面/q,仪/k,配合/v,洁/ag,面/q,深层/b,清洁/a,毛孔/n, ,清洁/a,鼻孔/n,面膜/n,碎/a,觉/v,使劲/v,挤/v,才能/v,出/v,一/m,点点/v,皱纹/n, ,脸颊/n,毛孔/n,修复/v,的/u,看/v,不见/v,啦/y, ,草莓/n,鼻/ng,历史/n,遗留/vn,问题/n,没辙/v, ,脸/n,和/c,脖子/n,差不多/l,颜色/n,的/u,皮肤/n,才/d,是/v,健康/a,的/u, ,长期/d,使用/v,安全/an,健康/a,的/u,比/p,同龄人/n,显/v,小/a,五/m,到/v,十/m,岁/q, ,28/m,岁/q,的/u,妹子/n,看看/v,你们/r,的/u,鱼尾纹/n
Sys te m.o ut.println(To Ana lys is.p arse(str));
洁/ag,面/q,仪/k,配合/v,洁/ag,面/q,深层/b,清洁/a,毛孔/n, ,清洁/a,鼻孔/n,面膜/n,碎/a,觉/v,使劲/v,挤/v,才能/v,出/v,一/m,点点/v,皱纹/n, ,脸颊/n,毛孔/n,修复/v,的/u,看/v,不见/v,啦/y, ,草莓/n,鼻/ng,历史/n,遗留/vn,问题/n,没辙/v, ,脸/n,和/c,脖子/n,差不多/l,颜色/n,的/u,皮肤/n,才/d,是/v,健康/a,的/u, ,长期/d,使用/v,安全/an,健康/a,的/u,比/p,同龄人/n,显/v,小/a,五/m,到/v,十岁/mq, ,28岁/mq,的/u,妹子/n,看看/v,你们/r,的/u,鱼尾纹/n
System.out.println(D icAnalys is.pars e(str));
洁/ag,面/q,仪/k,配合/v,洁/ag,面/q,深层/b,清洁/a,毛孔/n, ,清洁/a,鼻孔/n,面膜/n,碎/a,觉/v,使劲/v,挤/v,才能/v,出/v,一/m,点点/v,皱纹/n, ,脸颊/n,毛孔/n,修复/v,的/u,看/v,不见/v,啦/y, ,草莓/n,鼻/ng,历史/n,遗留/vn,问题/n,没辙/v, ,脸/n,和/c,脖子/n,差不多/l,颜色/n,的/u,皮肤/n,才/d,是/v,健康/a,的/u, ,长期/d,使用/v,安全/an,健康/a,的/u,比/p,同龄人/n,显/v,小/a,五/m,到/v,十岁/mq, ,28岁/mq,的/u,妹子/n,看看/v,你们/r,的/u,鱼尾纹/n
System.out.println(IndexAnalys is.parse(str));
洁/ag,面/q,仪/k,配合/v,洁/ag,面/q,深层/b,清洁/a,毛孔/n, ,清洁/a,鼻孔/n,面膜/n,碎/a,觉/v,使劲/v,挤/v,才能/v,出/v,一/m,点点/v,皱纹/n, ,脸颊/n,毛孔/n,修复/v,的/u,看/v,
不见/v,啦/y, ,草莓/n,鼻/ng,历史/n,遗留/vn,问题/n,没辙/v, ,脸/n,和/c,脖子/n,差不多/l,颜色/n,的/u,皮肤/n,才/d,是/v,健康/a,的/u, ,长期/d,使用/v,安全/an,健康/a,的/u,比/p,同龄人/n,显/v,小/a,五/m,到/v,十岁/mq, ,28岁/mq,的/u,妹子/n,看看/v,你们/r,的/u,鱼尾纹/n
System.out.println(N lpAnalys is.parse(str));
洁/a g,面仪/nw,配合/v,洁面/nw,深层/b,清洁/a,毛孔/n, ,清洁/a,鼻孔/n,面膜/n,碎觉/nw,使劲/v,挤/v,才/d,能/v,出/v,一点点/nw,皱纹/n, ,脸颊/n,毛孔/n,修复/v,的/u,看/v,不/d,见/v,啦/y, ,草莓/n,鼻历史/nw,遗留/vn,问题/n,没辙/v, ,脸/n,和/c,脖子/n,差不多/l,颜色/n,的/u,皮肤/n,才/d,是/v,健康/a,的/u, ,长期/d,使用/v,安全/an,健康/a,的/u,比/p,同龄人/n,显/v,小/a,五/m,到/v,十岁/mq, ,28岁/mq,的/u,妹子/n,看看/v,你们/r,的/u,鱼尾纹/n
停用词过滤
停用词需求是一种及其常见的需求,好处很多很多,令人惊讶的是坏处比好处还多,所以一般情况下不要用这个破玩意.我觉得主要是古时候,计算能力有限,大家不想对于无畏的字符串,计算太多,放给处女座程序员,一般觉得,tmd有个家伙没用一直在耗费我的cpu,删了丫的,好吧,我真不是处女座黑.反正这个功能也得有,并且已经将这个功能移位了.调用如下.
1.实例化一个过滤器
StopReco gnition filter=new S topReco gnition();filter.insertStopNatures("uj"); //过滤词性filter.insertStopNatures("ul");filter.insertStopN atures("nul l");filter.insertStopWord s("我"); //过滤单词
filter.insertStop Re gexes("小.*?"); //支持正则表达式
调用过滤
Result modifResult=ToAnalysis.parse(str).reco gnition(fitler); //过滤分词结果测试例子
欢迎/v,使用/v,ansj/en,_,seg/en,,/w,ansj/en,中文/nz,分词/v,在/p,这里/r,如果/c,遇到/v,什么/r,问题/n,都/d,可以/v,联系/v,./w,一定/d,尽/v,所能/v,./w,帮助/v,大家
/r,./w,ansj/en,_,seg/en,更快/d,,/w,更/d,准/a,,/w,更/d,自由/a, !/w
欢迎/什么/r,问题/n,都/d,可以/v,联系/v,./w,一定/d,尽/v,所能/v,./w,帮助/v,大家
/http://www.sz129.com
Megalayer 商家算是比较新晋的国内主机商,主要方向是美国、香港、菲律宾等机房的独立服务器为主,以及站群服务器和显卡服务器。同时也有新增价格并不是特别优惠的VPS云服务器。上午的时候有网友问问有没有CN2线路的美国独立服务器的,这里我推荐他选择Megalayer看看,目前也是有活动截止到月底的。Megalayer 商家创办2年左右时间,如果我们初次使用建议月付体验。目前在进行且可能截止到6月...
农历春节将至,腾讯云开启了热门爆款云产品首单特惠秒杀活动,上海/北京/广州1核2G云服务器首年仅38元起,上架了新的首单优惠活动,每天三场秒杀,长期有效,其中轻量应用服务器2G内存5M带宽仅需年费38元起,其他产品比如CDN流量包、短信包、MySQL、直播流量包、标准存储等等产品也参与活动,腾讯云官网已注册且完成实名认证的国内站用户均可参与。活动页面:https://cloud.tencent.c...
昨天,遇到一个网友客户告知他的网站无法访问需要帮他检查到底是什么问题。这个同学的网站是我帮他搭建的,于是我先PING看到他的网站是不通的,开始以为是服务器是不是出现故障导致无法打开的。检查到他的服务器是有放在SugarHosts糖果主机商中,于是我登录他的糖果主机后台看到服务器是正常运行的。但是,我看到面板中的IP地址居然是和他网站解析的IP地址不同。看来官方是有更换域名。于是我就问 客服到底是什...