package cn.edu.bjut.textmining.chapter5.support; import java.io.BufferedReader; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.TreeSet; /** 九篇标题和同一个词表,所有小样本实验保持一致。 */ public final class SampleNews { public static List load() { List result = new ArrayList<>(); try (BufferedReader reader = Files.newBufferedReader( ProjectPaths.data("news_sample.tsv"), StandardCharsets.UTF_8)) { reader.readLine(); String line; while ((line = reader.readLine()) != null) { String[] fields = line.split("\t", 4); result.add( new TNewsCorpusLoader.NewsRecord( fields[2], fields[3], Integer.parseInt(fields[1]))); } } catch (IOException e) { throw new UncheckedIOException("读取九条新闻失败", e); } if (result.size() != 9) { throw new IllegalStateException("样本清单应包含9篇新闻"); } return result; } public static double[][] vectors() { return TNewsSmallVectorizer.tfIdf(TNewsCorpusLoader.titles(load())); } public static String[] goldLabels() { List records = load(); String[] result = new String[records.size()]; for (int i = 0; i < result.length; i++) { result[i] = records.get(i).getLabel(); } return result; } public static void printClusters(int[] labels) { List records = load(); for (int cluster : new TreeSet(asList(labels))) { System.out.println("簇 " + (cluster + 1) + ":"); for (int i = 0; i < labels.length; i++) { if (labels[i] == cluster) { System.out.println(" N" + (i + 1) + " " + records.get(i).getTitle()); } } } } private static List asList(int[] values) { List result = new ArrayList<>(); for (int value : values) { result.add(value); } return result; } }