идентифицировать документы по результатам кластеризации mahout - PullRequest
3 голосов
/ 16 октября 2010

Я использую mahout для кластеризации текстовых документов, проиндексированных с помощью solr.

Я использовал поле «текст» в документе для формирования векторов. Затем я использовал драйвер k-means в mahout для кластеризации, а затем утилиту clusterdumper для вывода результатов.

У меня возникают трудности с пониманием результатов вывода из самосвала. Я мог видеть кластеры, сформированные с векторами терминов в этих кластерах. Но как мне извлечь документы из этих кластеров. Я хочу, чтобы результатом были входные документы, появляющиеся в разных кластерах.

1 Ответ

1 голос
/ 18 января 2012

У меня тоже была эта проблема. Идея состоит в том, что кластерный дампер сбрасывает все данные вашего кластера с точками и так далее. У вас есть два варианта:

  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 и удалите всю информацию о сроках и весах.
...