3

我正在使用 mahout 对使用 solr 索引的文本文档进行聚类。

我已经使用文档中的“文本”字段来形成向量。然后我使用 mahout 中的 k-means 驱动程序进行聚类,然后使用 clusterdumper 实用程序转储结果。

我很难理解自卸车的输出结果。我可以看到这些集群中的术语向量形成的集群。但是如何从这些集群中提取文档。我希望结果是出现在不同集群中的输入文档。

4

1 回答 1

1

我也有这个问题。这个想法是集群转储器用点等转储所有集群数据。你有两个选择:

  1. 修改 ClusterDumper.printClusters() 方法,使其不会打印所有术语和权重。我有一些代码,例如:


    String clusterInfo = String.format("Cluster %d (%d) with %d points.\n", value.getId(), clusterCount, value.getNumPoints());
                    writer.write(clusterInfo);
                    writer.write('\n');
    // list all top terms
    if (dictionary != null) {
                        String topTerms = getTopFeatures(value.getCenter(), dictionary, numTopFeatures);
                        writer.write("\tTop Terms: ");
                        writer.write(topTerms);
                        writer.write('\n');
                    }

    // list all the points in the cluster
    List points = clusterIdToPoints.get(value.getId());
                    if (points != null) {
                        writer.write("\tCluster points:\n\t");
                        for (Iterator iterator = points.iterator(); iterator.hasNext();) {
                            WeightedVectorWritable point = iterator.next();
                            writer.write(String.valueOf(point.getWeight()));
                            writer.write(": ");

                            if (point.getVector() instanceof NamedVector) {
                                writer.write(((NamedVector) point.getVector()).getName() + " ");
                            }

                        }
                        writer.write('\n');
                    }

  1. 如果可能的话,做一些 grep 魔法,并消除所有关于术语和权重的信息。
于 2012-01-18T14:06:13.347 回答