要想完成一个中文词频统计功能,首先必须使用一个中文分词器,这里使用的是中科院的。下载地址是http://ictclas.nlpir.org/downloads,由于本人电脑系统是win32位的,因此下载的是 NLPIR-JNI-发布包.zip,解压之后导入myeclipse,这里我并没有使用该项目自带的Test,而是根据该网站上提供的API进行开发。首先要做的是改写nlpir.properties中的dll_or_so_path属性,要改成项目中的NLPIR_JNI.dll的绝对路径。下面贴出我的代码:

 import java.io.IOException;
import java.io.UnsupportedEncodingException; import kevin.zhang.NLPIR; public class WordCut { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String test = "张华平推出的NLPIR分词系统,又名ICTCLAS2013,新增新词识别、关键词提取、微博分词功能。";
wordCut(test); }
public static void wordCut(String stringInput) throws IOException{
NLPIR nlpir = new NLPIR();
String argu="C:\\Users\\Press-Lab\\Desktop\\20130702101845_NLPIR-JNI-发布包\\NLPIR-JNI-发布包\\NLPIR_Test\\";
System.out.println("NLPIR init");
if(nlpir.NLPIR_Init(argu.getBytes("GB2312"),0,"0".getBytes("GB2312")) == false){
System.out.println("init failed");
return;
}
byte nativeBytes[] = nlpir.NLPIR_ParagraphProcess(stringInput.getBytes("GB2312"), 0);
String nativeStr = new String(nativeBytes, 0, nativeBytes.length, "GB2312");
System.out.println("分词结果为: " + nativeStr); } }

这里要当心地23行和25行,和官网上提供的文档略有差异,argu的路径是项目中的Data文件的上一层目录的绝对路径。29行中第二参数0代表着不需要词性标注,1表示需要。
然后这里就可以输出切分完词的字符串。下一步是对" "隔开的词统计词频,并按照降序的目录打印出来。不多说,贴代码。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; public class WordCount {
public static void main(String[] args){
String wordsinput = "张华平 推出 的 NLPIR 分词 系统 , 又 名 ICTCLAS2013 , 新增 新词 识别 、 的 关键词 的 提取 、 微 博 分词 功能";
HashMap<String, Integer> wordMap = new HashMap<String, Integer>();
String[] words = wordsinput.split(" ");
for(int i = 0; i < words.length ; i++){
if(!wordMap.containsKey(words[i])){
wordMap.put(words[i], 1);
}else{
int val = wordMap.get(words[i]);
wordMap.put(words[i],val + 1);
}
} List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(
wordMap.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return ( o2.getValue()-o1.getValue());
}
});
for (int i = 0; i < infoIds.size(); i++) {
Entry<String,Integer> ent=infoIds.get(i);
System.out.println(ent.getKey()+"="+ent.getValue()); }
} }

  这路是打印出所有的词频,可以按照自己的需求,去掉标点符号和没有的助词。

如何用java完成一个中文词频统计程序的更多相关文章

  1. Java实现中文词频统计

    昨日有个中文词频统计的需求, 百度一番后, 发现一大堆标题党文章, 讲的与内容严重不符, 这里就简单记录下自己实现的流程吧! 与英文单词的词频统计不同, 中文的难点在于如何分词, 不过好在有许多优秀的 ...

  2. 初学Hadoop之中文词频统计

    1.安装eclipse 准备 eclipse-dsl-luna-SR2-linux-gtk-x86_64.tar.gz 安装 1.解压文件. 2.创建图标. ln -s /opt/eclipse/ec ...

  3. Python中文词频统计

    以下是关于小说的中文词频统计 这里有三个文件,分别为novel.txt.punctuation.txt.meaningless.txt. 这三个是小说文本.特殊符号和无意义词 Python代码统计词频 ...

  4. jieba (中文词频统计) 、collections (字频统计)、WordCloud (词云)

    py库: jieba (中文词频统计) .collections (字频统计).WordCloud (词云) 先来个最简单的: # 查找列表中出现次数最多的值 ls = [1, 2, 3, 4, 5, ...

  5. py库: jieba (中文词频统计) 、collections (字频统计)、WordCloud (词云)

    先来个最简单的: # 查找列表中出现次数最多的值 ls = [1, 2, 3, 4, 5, 6, 1, 2, 1, 2, 1, 1] ls = ["呵呵", "呵呵&qu ...

  6. 【第二周】Java实现英语文章词频统计(改进1)

    本周根据杨老师的spec对英语文章词频统计进行了改进 1.需求分析: 对英文文章中的英文单词进行词频统计并按照有大到小的顺序输出, 2.算法思想: (1)构建一个类用于存放英文单词及其出现的次数 cl ...

  7. 如何用java创建一个jdbc程序

    第一个jdbc程序 JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和 ...

  8. Hadoop基础学习(一)分析、编写并执行WordCount词频统计程序

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jiq408694711/article/details/34181439 前面已经在我的Ubuntu ...

  9. 《用Java写一个通用的服务器程序》01 综述

    最近一两年用C++写了好几个基于TCP通信类型程序,都是写一个小型的服务器,监听请求,解析自定义的协议,处理请求,返回结果.每次写新程序时都把老代码拿来,修改一下协议解析部分和业务处理部分,然后就一个 ...

随机推荐

  1. Java连接postgreSQL数据库,找不到表。

    postgreSQL数据库遵守SQL标准,表名库名不区分大小写. 数据库中是存在 gongan_address_ALL的表的,但是执行下列代码就会出错. stmt = c.createStatemen ...

  2. css动画animation-keyframes

    随着css3的流行,现在很多可以使用css3实现的动画效果,基本上就选择css3实现,尤其是在移动端的(移动端对css3的支持度相对比较高,PC端有很多IE8及以下的浏览器拖着后腿呢). 最近做了一个 ...

  3. [java,2017-12-01] 播放音频文件

    废话不多说,直接上代码 jar包 <!-- 2017-12-01音频播放jar包 --> <dependency> <groupId>javazoom</gr ...

  4. 阿里Canal配置(编写中)

    首先在源mysql的.ini文件中进行配置 [client]default-character-set=utf8 [mysqld]basedir = E:/testCanal/mysql-5.7.17 ...

  5. 2014最新 iOS App 提交上架store 详细流程

    http://blog.csdn.net/tt5267621/article/details/39430659

  6. a.每个 HTML 文件里开头都有个<!DOCTYPE>

    <!DOCTYPE> 位于文档中最前面的位置,告诉浏览器以哪个HTML版本进行解析. 在 HTML5 中只有一种:<!DOCTYPE html> .

  7. python学习笔记_week17

    note jQuery http://jquery.cuishifeng.cn/ 模块 <=>类库 DOM/BOM/JavaScript的类库 版本: 1.x 1.12 2.x 3.x 转 ...

  8. Linq的常见查询

    首先定义几个模型类: /// <summary> /// 员工类 /// </summary> public class Employee { /// <summary& ...

  9. linux inode 详解 / 线上inode爆满解决方案

    本文大量参考阮一峰大神博客,整理笔记 之所以写inode文章是由于一次线上问题,引发对inode深入的思考. 磁盘的inode监控与磁盘空间的监控同等重要,线上服务器一定要做好磁盘inode与磁盘空间 ...

  10. Mybatis学习4——多对一

    一个用户对多个订单 在用户中添加属性List<user> User.java package pojo; import java.util.Date; import java.util.L ...