// 読み込んだ文章を 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();
}
}
}