package cn.edu.bjut.textmining.chapter5; import cn.edu.bjut.textmining.chapter5.support.DocumentRegistry; import cn.edu.bjut.textmining.chapter5.support.ResultWriter; import cn.edu.bjut.textmining.chapter5.support.SampleNews; import cn.edu.bjut.textmining.chapter5.support.TNewsCorpusLoader; import cn.edu.bjut.textmining.chapter5.support.TextFeatures; /** 对单位化TF-IDF进行球面K-Means。 */ public class TextKMeansDemo { public static void main(String[] args) { try { java.util.List records = SampleNews.load(); TextFeatures.Result features = TextFeatures.fit(TNewsCorpusLoader.titles(records), false); double[][] vectors = features.vectors; KMeansEngine.Result result = KMeansEngine.fit(vectors, 3, 30, 0, 3, 6); System.out.printf( "迭代轮数=%d,收敛=%s,目标值=%.9f%n", result.iterations(), result.converged(), KMeansEngine.objective(vectors, result)); SampleNews.printClusters(result.labels()); ResultWriter.features("news_sample", features); DocumentRegistry.write("news_sample", records, features, result.labels(), DocumentRegistry.SMALL_CONFIG); System.out.println("记录与向量行清单:outputs/chapter5/news_sample_document_registry.tsv"); } catch (Exception e) { e.printStackTrace(); } } }