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;
} }

基于ansj_seg和nlp-lang的简单nlp工具类的更多相关文章

  1. 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Caching; usi ...

  2. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  3. Apache Commons Lang之日期时间工具类

    码农不识Apache,码尽一生也枉然. FastDateFormat FastDateFormat是一个快速且线程安全的时间操作类,它完全可以替代SimpleDateFromat.因为是线程安全的,所 ...

  4. JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】

    1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ...

  5. JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】

    1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ...

  6. 基于数组阻塞队列 ArrayBlockingQueue 的一个队列工具类

    java语言基于ArrayBlockingQueue 开发的一个根据特定前缀和后缀的队列.每天自动循环生成. 1.定义队列基类 Cookie package com.bytter.util.queue ...

  7. SSM-MyBatis-10:Mybatis中SqlSession的getMapper()和简单的工具类MyBatisUtils

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- getMapper的作用,获取到接口,直接通过点的方式调用方法,以免直接手打的方式写错方法名,(强类型的方式) ...

  8. 字符串排序简单的工具类,数组转list,list转数组

    public static void main(String[] args) { /* String[] str = {"a", "c", "b&qu ...

  9. 基于Java反射的map自动装配JavaBean工具类设计

    我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤: public List<Role> findRoles(Map<String,Object> p ...

  10. 基于json-lib-2.2.2-jdk15.jar的JSON解析工具类大集合

    json解析之前的必备工作:导入json解析必须的六个包 资源链接:百度云:链接:https://pan.baidu.com/s/1dAEQQy 密码:1v1z 代码示例: package com.s ...

随机推荐

  1. activity属性设置大全

    activity属性设置大全 android:allowTaskReparenting=["true" | "false"]         是否允许activ ...

  2. android异常Unable to instantiate activity ComponentInfo解决方法

    我是下面提到的第四条: 在Order and Export 中 把新加的 android-support-v4.jar的前面的对号打上勾 保存:就可以了: 做android开发的可能都碰到" ...

  3. [OS] 操作系统-进程线程-经典面试笔试题

    题目转自:http://blog.csdn.net/morewindows/article/details/7392749 ·线程的基本概念.线程的基本状态及状态之间的关系? 线程,有时称为轻量级进程 ...

  4. Bootstrap如何适配移动浏览器

    移动设备优先 1.由meta标签决定的 <meta name="viewport" content="width=device-width, initial-sca ...

  5. filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行

    filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行

  6. [APIO2017]商旅 0/1分数规划

    ---题面--- 题解: upd: 在洛谷上被Hack了...思路应该是对的,代码就别看了 感觉有个地方还是非常妙的,就是因为在x买东西,在y卖出,就相当于直接从x走向了y,因为经过中间的城市反正也不 ...

  7. 洛谷 P4735 最大异或和 解题报告

    P4735 最大异或和 题目描述 给定一个非负整数序列\(\{a\}\),初始长度为\(N\). 有\(M\)个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数\(x\),序列的 ...

  8. POJ. 2253 Frogger (Dijkstra )

    POJ. 2253 Frogger (Dijkstra ) 题意分析 首先给出n个点的坐标,其中第一个点的坐标为青蛙1的坐标,第二个点的坐标为青蛙2的坐标.给出的n个点,两两双向互通,求出由1到2可行 ...

  9. 爬虫实例——爬取煎蛋网OOXX频道(反反爬虫——伪装成浏览器)

    煎蛋网在反爬虫方面做了不少工作,无法通过正常的方式爬取,比如用下面这段代码爬取无法得到我们想要的源代码. import requests url = 'http://jandan.net/ooxx' ...

  10. 用户登录拦截器查询到登录用户后如何将用户信息传递到后面的Controller

    taotao创建订单代码中之前忘了加入用户信息,那么加上呢? 分析:用户创建订单的时候,我们会强制要求用户先登录,也就是说,创建订单的Controller执行时,一定是用户已经登录了的,而用户只要登录 ...