private List<List<String>> filter(List<String[]> lines) throws FileNotFoundException, IOException {

		Supplier<List<String>> stoplistSupplier = getStoplistSupplier();
		Set<String> stopList = new HashSet<>(stoplistSupplier.get());
		POSTagger posTagger = getPosTagger();
		Lemmatizer lemmatizer = getLemmatizer();
		Predicate<String> predicate = getPredicate();
		Sanitezer sanitezer = getSanitezer();

		List<List<String>> tokenizedTweets = new ArrayList<List<String>>();

		for (String[] toks : lines) {
			List<String> toksTemp = new ArrayList<>();

			/* Stoplist's Predicate */

			for (String token : toks) {
				if (!stopList.contains(token) && predicate.apply(token)) {
					toksTemp.add(sanitezer.sanitize(token));
				}
			}

			toks = toksTemp.toArray(new String[toksTemp.size()]);

			/* POS Tagging */
			String[] tags = posTagger.tag(toks);

			/* Collecting NOUNS (and stemming..) */
			List<String> nounsInLine = new ArrayList<>();
			for (int i = 0; i < tags.length; i++) {

				if (tags[i].startsWith("NN")) {
					String word = toks[i];

					/* Plural, stemming */
					if (tags[i].endsWith("S")) {
						lemmatizer.setCurrent(toks[i]);
						if (lemmatizer.lemmatize()) {
							word = lemmatizer.getCurrent();
							if (debug) {
								// log.d(MessageFormat.format("Stemming: {0} -> {1}",
								// toks[i], word));
							}
						}
					}

					nounsInLine.add(word.toLowerCase());
				}
			}
			//if (!nounsInLine.isEmpty())
			tokenizedTweets.add(nounsInLine);
		}

		return tokenizedTweets;
	}