Я пытаюсь написать код на Java (часть задания mapreduce), чтобы проверить предложение для определенных ключевых слов, когда любое ключевое слово, найденное в предложении, должно проверять предложение за 2 слова до ключевого слова и / или до 3 слова после. если он находит совпадение, он что-то выводит.
Я пишу код для перебора 3 ArrayLists
строк следующим образом:
1 - итерация по Arraylist1<String)
и проверка if ArrayList1.get(i)= ArrayList2.get(j)
. если равно, переходите к 2 (ниже), в противном случае i++
.
2 - перебирать ArraList3. Проверьте до 2 слов до ArraList1[i]
и до 3 слов после ArrayList1[i]
. Если в этом диапазоне он находит совпадение в пределах ArrayList3
, он должен что-то вывести.
Теперь проблема заключается в выполнении условий 2 слов до и 3 слов после. Потому что необходимо учитывать множество условий в зависимости от размера предложения (т.е. размер ArrayList1
).
Пример: если вы находитесь на 1-м или 2-м слове предложения, вам нужно проверить 3 слова только после И 1 слова до и 3 слова после (также в зависимости от размера предложения).
for (int i = 0; i < tokensList.size(); i++) {
keywordsListLoop:
for (int j = 0; j < keywordsList.size(); j++) {
if (tokensList.get(i).startsWith(keywordsList.get(j)) == true)
for (int e = i - 2; e < i + 4; e++) {
boolean flag = false;
// I think the rules need to go here
for (int g = 0; g < posWordsList.size(); g++) {
// or perhaps here :s
if (tokensList.get(e).compareTo(posWordsList.get(g)) == 0) {
word.set(keywordsList.get(j));
context.write(word, one);
flag = true;
break; //breaks out of Inner loop (PosWords loop)
}
}
if (flag)
break; //breaks out of outter loop ( e loop)
break keywordsListLoop; //need to make sure this actually breaks out of keywords loop
}
}
//now check next token