zoukankan      html  css  js  c++  java
  • 如何用java完成一个中文词频统计程序

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

     1 import java.io.IOException;
     2 import java.io.UnsupportedEncodingException;
     3 
     4 import kevin.zhang.NLPIR;
     5 
     6 
     7 
     8 public class WordCut {
     9 
    10     /**
    11      * @param args
    12      * @throws IOException 
    13      */
    14     public static void main(String[] args) throws IOException {
    15         // TODO Auto-generated method stub
    16         String test = "张华平推出的NLPIR分词系统,又名ICTCLAS2013,新增新词识别、关键词提取、微博分词功能。";
    17         wordCut(test);
    18         
    19 
    20     }
    21     public static void wordCut(String stringInput) throws IOException{
    22         NLPIR nlpir = new NLPIR();
    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<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());  
    		      
    		}  
    	}
    		
    
    }
    

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

  • 相关阅读:
    美容:盐水按摩 靓肤不花钱 健康程序员,至尚生活!
    关于黑眼圈形成和应对方法! 健康程序员,至尚生活!
    女人必知25个养颜排毒美容锦囊 健康程序员,至尚生活!
    让你睡眠更香甜的九种食物 健康程序员,至尚生活!
    几款美容瘦身的花茶配方 健康程序员,至尚生活!
    吃出来的美白方法 健康程序员,至尚生活!
    达人DIY护肤经验分享 健康程序员,至尚生活!
    【男士必看】男士护肤必备攻略 健康程序员,至尚生活!
    一起学习手撕包菜如何做 健康程序员,至尚生活!
    抵制美食诱惑 春节美食瘦身建议 健康程序员,至尚生活!
  • 原文地址:https://www.cnblogs.com/dongqiSilent/p/3423318.html
Copyright © 2011-2022 走看看