2012-07-12 2 views
2

J'ai essayé d'extraire ngrams à partir de modèles qui sont extraits de documents texte, modèles ont un nombre différent de termes.extrait n-grammes à partir de modèles

par exemple: si le motif p = {t1, t2, t3}

et nous devons extraire ngram 3

il devrait être comme ça

t1 
t2 
t3 

t1, t2 
t2,t3 

t1,t2,t3 

j'ai écrit quelques-uns code mais ne fonctionne pas bien.

 public Hashtable<String, Pattern> findGrams(XMLDocument d) { 
    ArrayList<Pattern> patterns = d.getPatterns(); 

    System.out.println("patterns " + d.getPatterns()); 

    ArrayList terms = new ArrayList(); 
    Hashtable Grams = new Hashtable(); 

    String s = ""; 

    // to extract all terms from the pattern 
    for (int i = 0; i < patterns.size(); i++) { 
     Pattern pat = (Pattern) patterns.get(i); 
     terms.clear(); 
     for (int z = 0; z < pat.getNumitems(); z++) { 
      terms.add(pat.getItems().get(z).toString()); 
     } 

     // to generate grams from the pattern 
     int j = 0; 
     int x=0; 
     for (int y = 1; y <= ngram ; y++) { 

      for (x = 0; x < terms.size() & j != y; x++) { 
        s = terms.get(x).toString(); 

        if (y > 1) { 
         for (j = x + 1; j < terms.size() & terms.indexOf(j) < ngram; j++) { 
          s = s + "," + terms.get(j).toString(); 
         } 
        } 

        if (!Grams.contains(s)) { 
         System.out.println(s); 
         Grams.put(s, i); 
        } 
       } 

     } 
    } 
    return (Grams); 
} 

toute aide s'il vous plaît,

+1

J'ai trouvé difficile de trouver ce que vous demandez ici. Pourriez-vous fournir un exemple concret avec une entrée donnée et une sortie attendue? –

+0

par exemple: si le motif p = {t1, t2, t3} et nous devons extraire ngram 3 il devrait être comme celui-ci pour ngram 1: t1 puis t2 puis t3 pour ngram 2: t1, t2 puis t2, t3 pour le ngramme 3: t1, t2, t3 – Mubarak

+0

Est-ce que c'est ce devoir? Il peut s'agir d'un doublon de http://stackoverflow.com/questions/3656762/n-gram-generation-from-a-sentence? – radimpe

Répondre

0

J'espère que cela vous donnera voulez-vous besoin.

import java.util.*; 

public class Test { 

    public static List<String> ngrams(int n, String str) { 
     List<String> ngrams = new ArrayList<String>(); 
     String[] words = str.split(" "); 
     for (int i = 0; i < words.length - n + 1; i++) 
      ngrams.add(concat(words, i, i+n)); 
     return ngrams; 
    } 

    public static String concat(String[] words, int start, int end) { 
     StringBuilder sb = new StringBuilder(); 
     for (int i = start; i < end; i++) 
      sb.append((i > start ? " " : "") + words[i]); 
     return sb.toString(); 
    } 

    public static void main(String[] args) { 
     for (int n = 1; n <= 3; n++) { 
      for (String ngram : ngrams(n, "t1 t2 t3")) 
       System.out.println(ngram); 
      System.out.println(); 
     } 
    } 
} 
Questions connexes