中文分词--anjs_seg

ToAnalysis 精准分词

精准分词是Ansj分词的店长推荐款
它在易用性,稳定性.准确性.以及分词效率上.都取得了一个不错的平衡.如果你初次尝试Ansj如果你想开箱即用.那么就用这个分词方式是不会错的.
DicAnalysis 用户自定义词典优先策略的分词
用户自定义词典优先策略的分词,如果你的用户自定义词典足够好,或者你的需求对用户自定义词典的要求比较高,那么强烈建议你使用DicAnalysis的分词方式.
可以说在很多方面Dic优于ToAnalysis的结果
NlpAnalysis 带有新词发现功能的分词
nlp分词是总能给你惊喜的一种分词方式.
它可以识别出未登录词.但是它也有它的缺点.速度比较慢.稳定性差.ps:我这里说的慢仅仅是和自己的其他方式比较.应该是40w字每秒的速度吧.
个人觉得nlp的适用方式.1.语法实体名抽取.未登录词整理.主要是对文本进行发现分析等工作
IndexAnalysis 面向索引的分词
面向索引的分词。顾名思义就是适合在lucene等文本检索中用到的分词。 主要考虑以下两点
召回率
o召回率是对分词结果尽可能的涵盖。比如对“上海虹桥机场南路” 召回结果是[上海/ns, 上海虹桥机场/nt, 虹桥/ns, 虹桥机场/nz, 机场/n, 南路/nr]
准确率
o其实这和召回本身是具有一定矛盾性的Ansj的强大之处是很巧妙的避开了这两个的冲突 。比如我们常见的歧义句“旅游和服务”->对于一般保证召回 。大家会给出的结果是“旅游 和服 服务” 对于ansj不存在跨term的分词。意思就是。召回的词只是针对精准分词之后的结果的一个细分。比较好的解决了这个问题
BaseAnalysis 最小颗粒度的分词
基本就是保证了最基本的分词.词语颗粒度最非常小的..所涉及到的词大约是10万左右.
基本分词速度非常快.在macAir上.能到每秒300w字每秒.同时准确率也很高.但是对于新词他的功能十分有限.
这里写图片描述
配置文件说明
在默认情况下,如果你想做更多的全局设定在程序调用时候,配置文件是个必不可少的玩意,在ansj中配置文件名为library.properties,这是一个不可更改的约定.下面让我们看看都有哪些选项在这个配置文件中.
字段名 默认值 说明
isNameRecognition true 是否开启人名识别
isNumRecognition true 是否开启数字识别
isQuantifierRecognition true 是否数字和量词合并
isRealName false 是否取得真实的词,默认情况会取得标注化后的
isSkipUserDefine false 是否用户辞典不加载相同的词
dic “library/default.dic” 自定义词典路径
dic_[key] “你的词典路径” 针对不同语料调用不同的自定义词典
ambiguity “library/ambiguity.dic” 歧义词典路径
ambiguity_[key] “library/ambiguity.dic” 歧义词典路径
crf null crf词典路径,不设置为默认
crf_[key] “你的模型路径” 针对不同语料调用不同的分词模型

String strbuf = "洁面仪配合洁面深层清洁毛孔 清洁鼻孔面膜碎觉使劲挤才能出一点点皱纹 脸颊毛孔修复的看不见啦 草莓鼻历史遗留问题没辙 脸和脖子差不多颜色的皮肤才是健康的 长期使用安全健康的比同龄人显小五到十岁 28岁的妹子看看你们的鱼尾纹";
        StopRecognition filter = new StopRecognition();
        List<String> stopword = new ArrayList<String>();
        try {
            stopword =Files.readLines(new File("F:\\data\\dict\\chinese_stopword.txt"), Charset.defaultCharset());
        } catch (IOException e) {
            e.printStackTrace();
        }
        //添加停用词词典
        filter.insertStopWords( stopword );
        filter.insertStopNatures("w");
        filter.insertStopNatures("m");
        filter.insertStopNatures("ng");
        filter.insertStopNatures("t");
        filter.insertStopNatures("nr");
        filter.insertStopNatures("b");
        filter.insertStopNatures("n");
        filter.insertStopWords("生");
        filter.insertStopNatures("ns");

        //
        Result parse = BaseAnalysis.parse(strbuf);
        System.out.println("基础分词:"+parse);
        System.out.println("------------------");
        DicLibrary.insert("dic", "夜划车");
        System.out.println("dic:"+DicAnalysis.parse( strbuf ));
        Result parse1 = ToAnalysis.parse(strbuf);
        System.out.println("精准分词:"+parse1);
        Result parse11 = ToAnalysis.parse(strbuf).recognition(filter);
        System.out.println("精准分词filter:"+parse11);

        Result parse22 = NlpAnalysis.parse(strbuf);
        System.out.println("nly分词:"+parse22);
        Result parse2 = NlpAnalysis.parse(strbuf).recognition( filter );
        System.out.println("nly分词filter:"+parse2);

        Result parse3 = IndexAnalysis.parse(strbuf).recognition(filter);
        System.out.println("search分词:"+parse3);
        //关键词提取
        KeyWordComputer key=new KeyWordComputer(10);
        Iterator it = key.computeArticleTfidf(strbuf).iterator() ;
        StringBuffer value = new StringBuffer();
        while(it.hasNext()) {
            Keyword key2=(Keyword)it.next();
            value.append(key2.getName() +"="+key2.getFreq()+","+key2.getScore());
        }
        String out = value.toString();
        String OutValue = out.substring(0, out.length()-1);
        System.out.println("keyword:"+OutValue);
        System.out.println("------------------");
        SummaryComputer summaryComputer = new SummaryComputer(strbuf,"");
        System.out.println( summaryComputer.toSummary().getKeyWords());
        String title = "苏州通安强拆引发事件";
        String content = "苏州高新区镇镇府门口被许多愤怒群众包围,据说是拆迁户没有拿到镇府补贴的, 宅基地补偿款,具体数额比较大,涉水比较深,因为,电视台都不敢来采访这件事情,镇府想冷处理这个事件。 昨天听说传闻,凌晨2.30分左右,公鞍部门出动500警力(其中不乏从周边城市调来的武警)将闹事群众或打 或驱散或抓捕,但是被打是肯定的,因为医院里躺好了被警嚓打伤的群众。";
        KeyWordComputer kwc = new KeyWordComputer(5);
        Collection<Keyword> result = kwc.computeArticleTfidf(title, content);
        System.out.println(result);
        SummaryComputer summaryComputer1 = new SummaryComputer(title,content);
        System.out.println( "summaryComputer1"+summaryComputer1.toSummary().getKeyWords());

经过测试分词效果还是可以的,有机会和jieba分词比较一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值