2016-02-24 4 views
0

Je suis en train de réaliser un projet où j'analyse des 'ngrams'. J'ai une méthode dans mon programme qui crée des bigrammes et des trigrammes. Cependant, ils ne reçoivent que les mots adjacents consécutifs ensemble où je veux obtenir toutes les combinaisons de mots ...N-Gram avec ArrayList

Par exemple,

Original String - "chilli, start, day, suffer, raynaud, check, raynaudsuk, great, tip, loveyourglov, ram" 
Bigram - "chilli start, start day, day suffer, suffer raynaud, raynaud check, check raynaudsuk, raynaudsuk great, great tip, tip loveyourglov, loveyourglov ram" 

Mais je le veux pour obtenir une combinaison de tous les mots la chaîne. Par exemple

Expected Bigram - "chilli start,1, chilli day,2, chilli suffer,3, chilli raynaud,4, chilli check,5, chilli raynaudsuk,6, chilli great,7, chilli tip,8, chilli loveyourglov,9, chilli ram,10, start day,1, etc..." 

Comment puis-je modifier ma méthode pour produire un bigram comme celui-ci?

public ArrayList<String> bigramList; 
ArrayList<String> fullBagOfWords = new ArrayList<String>(); 


public void bigramCreator(){ 
    int i = 0; 
    bigramList = new ArrayList<String>(); 
    for(String bi : fullBagOfWords){ 
     int n = 2; 
     if (i <= fullBagOfWords.size() - n) { 
      String bigram = ""; 
      for (int j = 0; j < n-1; j++) 
      bigram += fullBagOfWords.get(i + j) + " "; 
      bigram += fullBagOfWords.get(i + n - 1); 
      bigramList.add(bigram); 
      i++; 
     } 
    } 
} 

Merci beaucoup pour toute aide apportée.

+0

N'êtes-vous pas manque des accolades pour la boucle imbriquée? La boucle n'exécutera que 'bigram + = fullBagOfWords.get (i + j) +" ";' – radoh

+0

@radoh - cela fonctionne bien pour l'exemple supérieur, c'est ce que je reçois mais je veux étendre ma méthode pour obtenir une combinaison de TOUS les mots –

+0

Pourquoi y a-t-il une distance nulle dans 'start day, 0,', ne devrait-elle pas être '1'? – radoh

Répondre

0

Si je comprends bien la tâche, il devrait être très simple

for (int i = 0; i < fullBagOfWords.size() - 1; i++) { 
    for (int j = i + 1; j < fullBagOfWords.size(); j++) { 
     bigramList.add(fullBagOfWords.get(i) + " " + fullBagOfWords.get(j) + ", " + (j - i)); 
    } 
} 
+0

cela fonctionne un peu comme je le veux, mais y at-il de toute façon ajouter la distance entre chaque mot? –

+0

@JohnLewis Ajouter distance comment/où excatly? Pouvez-vous le préciser dans votre question initiale? – radoh

+0

iv a changé ma question, j'ai oublié de l'afficher à l'origine désolé –