java 汉语词频_如何用java完成一个中文词频统计程序

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

1 importjava.io.IOException;2 importjava.io.UnsupportedEncodingException;3

4 importkevin.zhang.NLPIR;5

6

7

8 public classWordCut {9

10 /**

11 *@paramargs12 *@throwsIOException13 */

14 public static void main(String[] args) throwsIOException {15 //TODO Auto-generated method stub

16 String test = "张华平推出的NLPIR分词系统,又名ICTCLAS2013,新增新词识别、关键词提取、微博分词功能。";17 wordCut(test);18

19

20 }21 public static void wordCut(String stringInput) throwsIOException{22 NLPIR nlpir = newNLPIR();23 String argu="C:\\Users\\Press-Lab\\Desktop\\20130702101845_NLPIR-JNI-发布包\\NLPIR-JNI-发布包\\NLPIR_Test\\";24 System.out.println("NLPIR init");25 if(nlpir.NLPIR_Init(argu.getBytes("GB2312"),0,"0".getBytes("GB2312")) == false){26 System.out.println("init failed");27 return;28 }29 byte nativeBytes[] = nlpir.NLPIR_ParagraphProcess(stringInput.getBytes("GB2312"), 0);30 String nativeStr = new String(nativeBytes, 0, nativeBytes.length, "GB2312");31 System.out.println("分词结果为: " +nativeStr);32

33

34

35 }36

37 }

这里要当心地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 wordMap = new HashMap();

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> infoIds = new ArrayList>(

wordMap.entrySet());

Collections.sort(infoIds, new Comparator>() {

public int compare(Map.Entry o1,

Map.Entry o2) {

return ( o2.getValue()-o1.getValue());

}

});

for (int i = 0; i < infoIds.size(); i++) {

Entry ent=infoIds.get(i);

System.out.println(ent.getKey()+"="+ent.getValue());

}

}

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值