2016-02-24 42 views
0

我在做一個項目,我需要爲分析創建'n-gram'。我目前有一種方法可以爲int'n'這樣做,並將所有術語整理在一起,除了ArrayList中的最後一個單詞,它完全忽略了這一點,我不確定爲什麼?下面是輸出...N-Gram Creator未取回最終字

Original: Making pancakes today? Need a recipe? Check https://t.co/lsrRy8CW22 #PancakeDay https://t.co/WiPX4joM4v 

Bag of Words: [make, pancak, today, recip, check, pancakeday] 

2-gram: [make pancak, pancak today, today recip, recip check] 

3- gram: [make pancak today, pancak today recip, today recip check] 

正如你所看到的,它跳過最後一個字pancakeday,而且我不確定爲什麼。

這裏是方法...

public void ngramCreator(int n){ 
    ngramList = new ArrayList<String>(); 
    for(String word : bagOfWords){ 
     if (int i = 0 < bagOfWords.size() - n) { 
      String ngram = ""; 
      for (int j = 0; j < n-1; j++) 
       ngram += bagOfWords.get(i + j) + " "; 
      ngram += bagOfWords.get(i + n - 1); 
      ngramList.add(ngram); 
      i++; 
     } 
    } 
    System.out.println(ngramList); 
} 

感謝所有幫助傢伙,完全欣賞它。

+2

嘗試我<= bagOfWords.size() - n。因此,你甚至可以訪問最後一個袋子元素 – istovatis

+0

,這工作的人!歡呼:)! –

+0

@istovatis您應該添加它作爲答案,因爲它解決了OP的問題 –

回答

0

由於您的bagOfWords包含n個元素,因此您應該迭代整個列表。 下面的代碼應該做的伎倆。

if (int i = 0 <= bagOfWords.size() - n) { 
    // The rest ngrams implementation is correct 
}