2010-10-15 23 views
3

J'utilise mahout pour regrouper des documents texte indexés en utilisant solr.identifier les documents à partir des résultats de mahout clustering

J'ai utilisé le champ "texte" dans le document pour former des vecteurs. Ensuite, j'ai utilisé le pilote k-means dans mahout pour le clustering, puis l'utilitaire clusterdumper pour vider les résultats.

J'ai des difficultés à comprendre les résultats de sortie du dumper. Je pouvais voir les groupes formés avec des vecteurs à terme dans ces groupes. Mais comment puis-je extraire les documents de ces clusters. Je veux que le résultat soit les documents d'entrée apparaissant dans différents groupes.

+0

Je cherche également une réponse à cette question. Cette discussion: http://www.lucidimagination.com/search/document/dab8c1f3c3addcfe/validating_clustering_output semble impliquer ce problème est ouvert, avec un patch mis en œuvre Mahout 0,5 ici, issues.apache.org/jira/browse/MAHOUT-236. –

Répondre

1

J'ai également eu ce problème. L'idée est que dumper de cluster vide toutes vos données de cluster avec des points et ainsi de suite. Vous avez deux choix:

  1. modifiez la méthode ClusterDumper.printClusters() pour qu'elle n'imprime pas tous les termes et poids. J'ai un code comme:


    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. un peu de magie grep si possible et éliminer toutes les informations sur les termes et les poids.