senを用いて形態素の出現頻度を数える

// 読み込んだ文章を sen を用いて形態素解析した上,それぞれの形態素の出現頻度を HashMap に
// 記録する.
//
// 9-Sep-2009
//
// (メモ) sen に付属していた StringTaggerDemo.java をベースにした.
//
// [コンパイルと実行]
// javac senTest.java
// java -Dsen.home=${SEN_HOME} senTest

import java.io.*;
import net.java.sen.StringTagger;
import net.java.sen.Token;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.Iterator;

public class senTest {
    public static void main(String args[]) {
	try {
	    BufferedReader fin = new BufferedReader(new FileReader("test.txt"));
	    StringTagger tagger = StringTagger.getInstance();

	    // 形態素の頻度を記録するための Map
	    Map<String,Integer> map = new HashMap<String,Integer>();

	    String s;
	    while ((s = fin.readLine()) != null) {
		Token[] token = tagger.analyze(s);

		if (token != null) {
		    for (int i = 0; i < token.length; i++) {
			// 品詞情報を取り出し,名詞のみを Map へ登録する候補とする
			String[] pos = token[i].getPos().split("-");

			if(pos[0].equals("名詞") == true){
			    // 基本形を記録する
			    String ss = token[i].getBasicString();
			    Integer freq = (Integer)map.get(ss);
			    
			    // Map に問い合わせて,未登録ならば出現頻度を 1 とし,
			    // 登録済みならば +1 した値を上書きする.
			    // (注) HashMap.put(key,value) は key が登録済みの場合,
			    //     新たな値で上書きする仕様である.
			    if(freq == null){
				map.put(ss, new Integer(1));
			    } else {
				map.put(ss, new Integer(freq + 1));
			    }
			}
		    }
		}
	    }
	    
	    fin.close();
	    
	    // 全ての要素を Set の iterator を利用して出力
	    Set set = map.keySet();
	    Iterator iterator = set.iterator();
	    while(iterator.hasNext()){
		Object obj = iterator.next();
		System.out.println(obj + ":" + map.get(obj));
	    }
	    
	} catch (Exception e) {
	    e.printStackTrace();
	}
    }
}