static S dropWords(S s, L words) { ret dropWords_impl(s, asSet(toLowerCase(words))); } static S dropWords(S s, S words) { ret dropWords(s, splitWords(words)); } static S dropWords(S s, S... words) { ret dropWords_impl(s, asSet(toLowerCase(words))); } static Set dropWords_preprocess(S words) { ret asSet(splitWords(toLowerCase(words))); } static S dropWords(S s, Set set) { ret dropWords_impl(s, asCISet(set)); } static S dropWords_impl(S s, Set set) { L tok = nlTok(s); for (int i = 1; i < l(tok); ) if (set.contains(tok.get(i).toLowerCase())) removeToken(tok, i); else i += 2; ret join(tok); }