private static Set<String> parseFullText(String string, int phraseSize) { if (string == null) { return Collections.emptySet(); } Set<String> set = new HashSet<>(); Deque<String> phraseWords = new LinkedList<>(); for (String word : WORD_PATTERN.split(string)) { word = parseWord(word); if (word != null) { word = word.toLowerCase(); set.add(word); if (phraseSize > 1) { phraseWords.addLast(word); if (phraseWords.size() > 1) { if (phraseWords.size() > phraseSize) { phraseWords.removeFirst(); } addPhraseWords(set, phraseWords); } } } } while (phraseWords.size() > 2) { phraseWords.removeFirst(); addPhraseWords(set, phraseWords); } return set; }