2017-10-20 8 views
0

Je travaille sur la modélisation de sujets avec une bibliothèque de maillets. Mon fichier est dans filePath path et csvIterator semble pouvoir lire les données car model.getData() a environ 27000 lignes qui sont égales à mon dataset. J'ai écrit une boucle pour imprimer les occurrences et les séquences thématiques du 10 premier document, mais la taille des jetons est 0. Où est-ce que je me suis trompé? Dans ce qui suit, je veux montrer les 5 mots principaux dans les sujets avec des proportions pour le 10 premier document, mais toutes les sorties sont les mêmes.Obtention d'instances et de séquences de sujets de tous les documents dans un maillet

exemple dans cosole:

---- Document 0

0 0,200 com (1723) twitter (1225) http (871) cbr (688) canberra (626)

1 0,200 com (981) twitter (901) jour (205) peut (159) wed (156)

2 0,200 twitter (1068) com (947) acte (433) actvcc (317) canberra (302)

3 0,200 http (1039) peut emplois berra (841) (378) DLVR (313) com (228)

4 0,200 com (1185) www (1074) http (831) nouvelles (708) (560 canberratimes)

---- Document 1

0 0,200 com (1723) twitter (1225) http (871) cbr (688) canberra (626)

1 0,200 com (981) twitter (901) jour (205) peut (159) mer (156)

2 0,200 twitter (1068) com (947) acte (433) actvcc (317) canberra (302)

3 0,200 http (1039) canberra (841) emplois (378) DLVR (313) com (228)

4 0,200 com (1185) www (1074) http (831) nouvelles (708) canberratimes (560

comme je sais, le modèle LDA génère chaque document et les assigne aux mots de sujets. Alors pourquoi les résultats de chaque document sont-ils les mêmes?

ArrayList<Pipe> pipeList = new ArrayList<Pipe>(); 
    pipeList.add(new CharSequenceLowercase()); 
    pipeList.add(new CharSequence2TokenSequence(Pattern.compile("\\p{L}[\\p{L}\\p{P}]+\\p{L}"))); 
    //stoplists/en.txt 
    pipeList.add(new TokenSequenceRemoveStopwords(new File(pathStopWords), "UTF-8", false, false, false)); 
    pipeList.add(new TokenSequence2FeatureSequence()); 

    InstanceList instances = new InstanceList(new SerialPipes(pipeList)); 

    Reader fileReader = new InputStreamReader(new FileInputStream(new File(filePath)), "UTF-8"); 
//header of my data set 
// row,location,username,hashtaghs,text,retweets,date,favorites,numberOfComment 
    CsvIterator csvIterator = new CsvIterator(fileReader, 
      Pattern.compile("^(\\d+)[,]*[^,]*[,]*[^,]*[,]*[^,]*[,]*([^,]*)[,]*[^,]*[,]*[^,]*[,]*[^,]*[,]*[^,]*$"), 
      2, 0, 1); 
    instances.addThruPipe(csvIterator); // data, label, name fields 

    int numTopics = 5; 
    ParallelTopicModel model = new ParallelTopicModel(numTopics, 1.0, 0.01); 

    model.addInstances(instances); 

    model.setNumThreads(2); 


    model.setNumIterations(50); 
    model.estimate(); 

    Alphabet dataAlphabet = instances.getDataAlphabet(); 
    ArrayList<TopicAssignment> arrayTopics = model.getData(); 

    for (int i = 0; i < 10; i++) { 
     System.out.println("---- document " + i); 
     FeatureSequence tokens = (FeatureSequence) model.getData().get(i).instance.getData(); 
     LabelSequence topics = model.getData().get(i).topicSequence; 

     Formatter out = new Formatter(new StringBuilder(), Locale.US); 
     for (int position = 0; position < tokens.getLength(); position++) { 
      out.format("%s-%d ", dataAlphabet.lookupObject(tokens.getIndexAtPosition(position)), 
        topics.getIndexAtPosition(position)); 
     } 
     System.out.println(out); 

     double[] topicDistribution = model.getTopicProbabilities(i); 

     ArrayList<TreeSet<IDSorter>> topicSortedWords = model.getSortedWords(); 


     for (int topic = 0; topic < numTopics; topic++) { 
      Iterator<IDSorter> iterator = topicSortedWords.get(topic).iterator(); 
      out = new Formatter(new StringBuilder(), Locale.US); 
      out.format("%d\t%.3f\t", topic, topicDistribution[topic]); 
      int rank = 0; 
      while (iterator.hasNext() && rank < 5) { 
       IDSorter idCountPair = iterator.next(); 
       out.format("%s (%.0f) ", dataAlphabet.lookupObject(idCountPair.getID()), idCountPair.getWeight()); 
       rank++; 
      } 
      System.out.println(out); 
     } 

     StringBuilder topicZeroText = new StringBuilder(); 
     Iterator<IDSorter> iterator = topicSortedWords.get(0).iterator(); 

     int rank = 0; 
     while (iterator.hasNext() && rank < 5) { 
      IDSorter idCountPair = iterator.next(); 
      topicZeroText.append(dataAlphabet.lookupObject(idCountPair.getID()) + " "); 
      rank++; 
     } 

    } 

Répondre

2

Les rubriques sont définies au niveau du modèle et non au niveau des documents. Ils devraient être les mêmes pour tous.

Il semblerait que tout votre texte soit constitué d'URL. L'ajout d'un PrintInputPipe à votre séquence d'importation peut faciliter le débogage.