zoukankan      html  css  js  c++  java
  • 基于ansj_seg和nlp-lang的简单nlp工具类

    1、首先在pom中引入ansj_seg和nlp-lang的依赖包,

      ansj_seg包的作用:

        这是一个基于n-Gram+CRF+HMM的中文分词的java实现;

        分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上;

        目前实现了.中文分词. 中文姓名识别 . 用户自定义词典,关键字提取,自动摘要,关键字标记等功能;

        可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目;

      nlp-lang包的作用(nlp常用工具和组件):

        工具:词语标准化、tire树结构、双数组tire树、文本断句、html标签清理、Viterbi算法增加;

        组件:汉字转拼音、简繁体转换、bloomfilter、指纹去重、SimHash文章相似度计算、词贡献统计、基于内存的搜索提示、WordWeight词频统计,词idf统计,词类别相关度统计;

      如下:

    <!-- nlp-lang -->
    <dependency>
        <groupId>org.nlpcn</groupId>
        <artifactId>nlp-lang</artifactId>
        <version>1.7.2</version>
    </dependency>
    <!-- ansj_seg -->
    <dependency>
        <groupId>org.ansj</groupId>
        <artifactId>ansj_seg</artifactId>
        <version>5.1.2</version>
    </dependency>

    2、创建WordUtil类,如下:

    package com.mengyao.nlp.util;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import org.ansj.app.keyword.KeyWordComputer;
    import org.ansj.app.keyword.Keyword;
    import org.ansj.app.summary.SummaryComputer;
    import org.ansj.app.summary.pojo.Summary;
    import org.ansj.domain.Result;
    import org.ansj.domain.Term;
    import org.ansj.splitWord.analysis.IndexAnalysis;
    import org.ansj.splitWord.analysis.NlpAnalysis;
    import org.ansj.splitWord.analysis.ToAnalysis;
    import org.apache.commons.lang3.StringUtils;
    import org.nlpcn.commons.lang.jianfan.JianFan;
    import org.nlpcn.commons.lang.pinyin.Pinyin;
    import org.nlpcn.commons.lang.util.WordAlert;
    import org.nlpcn.commons.lang.util.WordWeight;
    
    /**
     *
     * @author mengyao
     *
     */
    public class WordUtil { public static void main(String[] args) { System.out.println("2016/06/25".matches("^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$")); System.out.println("20160625".matches("^\d{8}$")); } /** * 文章摘要 * @param title * @param content * @return */ public static String getSummary(String title, String content) { SummaryComputer summaryComputer = new SummaryComputer(title, content); Summary summary = summaryComputer.toSummary(); return summary.getSummary(); } /** * 带标题的文章关键词提取 * @param title * @param content * @return */ public static List<Keyword> getKeyWord(String title, String content) { List<Keyword> keyWords = new ArrayList<Keyword>(); KeyWordComputer<NlpAnalysis> kwc = new KeyWordComputer<NlpAnalysis>(20); Collection<Keyword> result = kwc.computeArticleTfidf(title, content); for (Keyword keyword : result) { keyWords.add(keyword); } return keyWords; } /** * 不带标题的文章关键词提取 * @param content * @return */ public static List<Keyword> getKeyWord2(String content) { List<Keyword> keyWords = new ArrayList<Keyword>(); KeyWordComputer<NlpAnalysis> kwc = new KeyWordComputer<NlpAnalysis>(20); Collection<Keyword> result = kwc.computeArticleTfidf(content); for (Keyword keyword : result) { keyWords.add(keyword); } return keyWords; } /** * 标准分词 * @param text * @return */ public static List<Term> getToSeg(String text) { List<Term> words = new ArrayList<Term>(); Result parse = ToAnalysis.parse(text); for (Term term : parse) { if (null!=term.getName()&&!term.getName().trim().isEmpty()) { words.add(term); } } return words; } /** * NLP分词 * @param text * @return */ public static List<Term> getNlpSeg(String text) { List<Term> words = new ArrayList<Term>(); Result parse = NlpAnalysis.parse(text); for (Term term : parse) { if (null!=term.getName()&&!term.getName().trim().isEmpty()) { words.add(term); } } return words; } /** * Index分词 * @param text * @return */ public static List<Term> getIndexSeg(String text) { List<Term> words = new ArrayList<Term>(); Result parse = IndexAnalysis.parse(text); for (Term term : parse) { if (null!=term.getName()&&!term.getName().trim().isEmpty()) { words.add(term); } } return words; } /** * 简体转繁体 * @param word * @return */ public static String jian2fan(String text) { return JianFan.j2f(text); } /** * 繁体转简体 * @param word * @return */ public static String fan2jian(String text) { return JianFan.f2j(text); } /** * 拼音(不带音标) * @param word * @return */ public static String pinyin(String text) { StringBuilder builder = new StringBuilder(); List<String> pinyins = Pinyin.pinyin(text); for (String pinyin : pinyins) { if (null != pinyin) { builder.append(pinyin+" "); } } return builder.toString(); } /** * 拼音(不带音标,首字母大写) * @param word * @return */ public static String pinyinUp(String text) { StringBuilder builder = new StringBuilder(); List<String> pinyins = Pinyin.pinyin(text); for (String pinyin : pinyins) { if (StringUtils.isEmpty(pinyin)) { continue; } builder.append(pinyin.substring(0,1).toUpperCase()+pinyin.substring(1)); } return builder.toString(); } /** * 拼音(带数字音标) * @param word * @return */ public static String tonePinyin(String text) { StringBuilder builder = new StringBuilder(); List<String> pinyins = Pinyin.tonePinyin(text); for (String pinyin : pinyins) { if (null != pinyin) { builder.append(pinyin+" "); } } return builder.toString(); } /** * 拼音(带符号音标) * @param word * @return */ public static String unicodePinyin(String text) { StringBuilder builder = new StringBuilder(); List<String> pinyins = Pinyin.unicodePinyin(text); for (String pinyin : pinyins) { if (null != pinyin) { builder.append(pinyin+" "); } } return builder.toString(); } /** * 词频统计 * @param words * @return */ public static Map<String, Double> wordCount(List<String> words) { WordWeight ww = new WordWeight(); for (String word : words) { ww.add(word); } return ww.export(); } /** * 词频统计 * @param words * @return */ public static List<String> wordCount1(List<String> words) { List<String> wcs = new ArrayList<String>(); WordWeight ww = new WordWeight(); for (String word : words) { ww.add(word); } Map<String, Double> export = ww.export(); for (Entry<String, Double> entry : export.entrySet()) { wcs.add(entry.getKey()+":"+entry.getValue()); } return wcs; } /** * 语种识别:1英文;0中文 * @param words * @return */ public static int language(String word) { return WordAlert.isEnglish(word)?1:0; } }
  • 相关阅读:
    作业4.称体重
    一、虚拟环境.二、路由配置主页与404.三、2.x路由分发.四、伪静态.五、request对象.六、FBV与CBV.七、文件上传.
    一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
    Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
    学习Django,http协议,
    值类型之间的相互转化,运算符,if条件判断,循环,函数
    js导读,js引入,js选择器,事件,操作页面文档,计算后样式,数据类型
    字体图标,盒子显隐,overflow属性,伪类设计边框,盒子阴影2d形变
    浮动布局,定位布局(固定定位,绝对定位,相对定位),过渡动画
    盒子总结,文本属性操作,reset操作,高级选择器,高级选择器优先级,边界圆角(了解),a标签的四大伪类,背景图片操作,背景图片之精灵图
  • 原文地址:https://www.cnblogs.com/mengyao/p/7451876.html
Copyright © 2011-2022 走看看