package javaapplication2; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class HinshiCount { public class Item { public final String str; public final String part; public int count = 0; public Item(final String str, final String part) { this.str = str; this.part = part; this.count = 1; } public void inc() { ++count; } } private final Map map = new HashMap(); /** * 文字列登録 * @param str * @param part */ public void append(final String str, final String part) { final Item item = map.get(str); if (item != null) { item.inc(); } else { final Item newItem = new Item(str, part); map.put(str, newItem); } } /** * 出力 * @param stream */ public void print(final PrintStream stream) { final List list; { // 出現頻度が多い順にソート final Item[] items = map.values().toArray(new Item[map.size()]); Arrays.sort(items, new Comparator() { public int compare(final Item o1, final Item o2) { return o2.count - o1.count; } }); list = Arrays.asList(items); } { // 出力 for (final Iterator i = list.iterator(); i.hasNext();) { final Item item = i.next(); stream.printf("%d\t%s\t%s\n", item.count, item.str, item.part); } } } /** * @param args * @throws IOException */ public static void main(final String[] args) throws IOException { final HinshiCount hinshiCount = new HinshiCount(); final String fileName = args[0]; { // ファイル読み込み final File inFile = new File(fileName); final FileInputStream inputStream = new FileInputStream(inFile); final InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF8"); final BufferedReader reader = new BufferedReader(inputStreamReader); while (true) { final String line = reader.readLine(); if (line == null) { break; } final String[] fields = line.split("\t"); if (fields.length < 4) { continue; } final String part = fields[3]; final String[] parts = part.split("-"); if (parts[0].equals("名詞")) { hinshiCount.append(fields[0], part); } } reader.close(); inputStreamReader.close(); inputStream.close(); } { // データ出力 final File outFile = new File(fileName + "_out1.txt"); final PrintStream printStream = new PrintStream(outFile); hinshiCount.print(printStream); printStream.close(); } } }