N-грамм с ArrayList

Я занимаюсь проектом, в котором я анализирую «ngrams». В моей программе есть метод, который создает биграммы и триграммы. Однако они объединяют только последовательные соседние слова, где я хочу получить все комбинации слов...

Например,

 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"

Но я хочу, чтобы он получил комбинацию ВСЕХ слов в строке. Например

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..."

Как я могу изменить свой метод для создания такой биграммы?

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++;
        }
    }
}

Большое спасибо за любую оказанную помощь.


person John Lewis    schedule 24.02.2016    source источник
comment
Вам не хватает фигурных скобок для вложенного цикла? Цикл будет выполняться только bigram += fullBagOfWords.get(i + j) + " ";   -  person radoh    schedule 24.02.2016
comment
@radoh - он отлично работает для верхнего примера, вот что я получаю, но я хочу расширить свой метод, чтобы получить комбинацию ВСЕХ слов   -  person John Lewis    schedule 24.02.2016
comment
Почему в start day, 0, нулевое расстояние, а не 1?   -  person radoh    schedule 24.02.2016
comment
@radoh - о, да, извините, это опечатка   -  person John Lewis    schedule 24.02.2016


Ответы (1)


Если я правильно понимаю задачу, она должна быть очень простой

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));
    }
}
person radoh    schedule 24.02.2016
comment
это работает немного так, как я хочу, но есть ли способ добавить расстояние между каждым словом? - person John Lewis; 24.02.2016
comment
@JohnLewis Точно добавить расстояние, как и где? Можете ли вы уточнить это в своем первоначальном вопросе? - person radoh; 24.02.2016
comment
iv изменил свой вопрос, я забыл изначально опубликовать его, извините - person John Lewis; 24.02.2016
comment
@JohnLewis Я исправил свой ответ - person radoh; 24.02.2016