Как объединить элемент массива? - PullRequest
0 голосов
/ 02 июня 2010

У меня есть `string example =" этот сайт содержит все примеры из Альманаха разработчиков Java и т. Д. Скопируйте и вставьте эти примеры непосредственно в свои приложения "

после токена и сделайте что-нибудь, что я хочу на примере строки, у меня есть arraylist как:

ArrayList <token > arl = " "this site holds ", "holds all the examples ", "the examples from The Java Developers", " Copy and paste " )

"этот сайт держит", я знаю начало и конец позиции в тесте строки: star = 1 end = 3 "содержит все примеры", я знаю положение stat = 3 end = 6, «Примеры от разработчиков Java», я знаю, что положение stat = 5 end = 10, «Скопируйте и вставьте», я знаю, что положение stat = 14 end = 17,

мы можем видеть, что некоторые элементы в arl перекрываются: «этот сайт содержит», «содержит все примеры», «примеры от разработчиков Java».

Проблема здесь в том, как я могу объединить перекрывающийся элемент с полученным массивом, как

ArrayList result = "" этот сайт содержит все примеры от разработчиков Java "," "Копирование и вставка" ";

Вот мой код: но он объединяет первый элемент, только если проверка перекрывает элемент

public ArrayList<TextChunks> finalTextChunks(ArrayList<TextChunks> textchunkswithkeyword) {
        ArrayList<TextChunks > result = (ArrayList<TextChunks>) textchunkswithkeyword.clone();
            //System.out.print(result.size());
            int j;
            for(int i=0;i< result.size() ;i++) {
                int index = i;
                if(i+1>=result.size()){
                    break;
                }
                j=i+1;
                if(result.get(i).checkOverlapingTwoTextchunks(result.get(j))== true) {
                    TextChunks temp = new TextChunks();
                    temp = handleOverlaping(textchunkswithkeyword.get(i),textchunkswithkeyword.get(j),resultSearchEngine);
                    result.set(i, temp);
                    result.remove(j);
                    i = index;
                    continue;
            }
        }
        return result;  
    }
}

Спасибо в avadce

1 Ответ

2 голосов
/ 02 июня 2010

Следующее должно сделать это или, по крайней мере, проиллюстрировать идею объединения кусков. В основном я уничтожаю существующие куски и воссоздаю новые. Звучит ужасно, но сильно упрощает. Я просто сохраняю слова в списке и перебираю этот список слов для создания новых (объединенных!) Фрагментов.

private List<TextChunks> finalTextChunks(List<TextChunks> textchunkswithkeyword) {

   private List<TextChunks> result = new ArrayList<TextChunk>();
   private List<String> wordList = new ArrayList<String>();

   // store all words in an arraylist, words are stored at their correct positions,
   // ignored words from the original text are represented by null entries
   for (TextChunks chunk : textchunkswithkeyword) {
     int start = chunk.getStartTextchunks();
     List<Token> tokens = chunk.getTokens(); // TODO - implement getTokens() in TextChunks class
     for (int i = 0; i < tokens.length; i++) {
        wordList.set(start+i, tokens.get(i).toString()); // TODO - overwrite toString() in Token class
     }
   }

   // recreate the chunks
   int start = 0;
   boolean isChunk = false;
   StringBuilder chunkBuilder;

   for (int i = 0; i < wordList.size(); i++) {
     String word = wordList.get(i);
     if (word == null) {
       if (isChunk) {
         // end of chunk detected
         TextChunk chunk = new TextChunk(chunkBuilder.toString().split(" "), start, i);
         result.add(chunk);
         isChunk = false;
       } else {
         // do nothing
       }
     } else {
       if (isChunk) {
         // chunk gets longer by one word
         chunkBuilder.append(" ").append(word);
       } else {
         // new chunk starts here
         chunkBuilder = new StringBuilder(word);
         start = i;
         isChunk = true;
       }
   }
   if (isChunk) {
     // create and add the last chunk
     TextChunks chunk = new TextChunk(chunkBuilder.toString(), start, wordList.size()-1);
     result.add(chunk);
   }
   return result;
}

(Предупреждение - абсолютно не проверено, у меня нет ни IDE, ни компилятора)

EDIT

изменил код - вы сказали, что класс TextChunk содержит массив токенов (слов?). Было всего три простых модификации.

РЕДАКТИРОВАТЬ 2

Окончательное редактирование - я частично адаптировал свой код к вашим классам. Что вам нужно сделать:

  1. реализует метод getTokens () в TextChunks, который просто возвращает поле arrt
  2. реализовать конструктор TextChunks, который принимает строку (со словами, разделенными пробелами), начало и конец. Ваш класс Token уже предоставляет статический метод для преобразования строки в массив списков токенов
  3. переписать метод toString () в классе Token, чтобы он просто возвращал строку токена.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...