public List<Mistake> check(Sentence sentence) { List<Mistake> mistakes = new ArrayList<Mistake>(); if (sentence.getTokens().size() < 2) { return mistakes; } for (int i = 0; i < sentence.getTokens().size(); i++) { Token originalToken = sentence.getTokens().get(i); String wanted = originalToken.getLexeme(); String wantedLowerCase = wanted.toLowerCase(); if (map.containsKey(wantedLowerCase)) { String candidate = RuleUtils.useCasedString(wanted, map.get(wantedLowerCase)); String sentenceText = sentence.getText(); String alternativeText = sentenceText.substring(0, originalToken.getStart()) + candidate + sentenceText.substring(originalToken.getEnd()); if (LOGGER.isDebugEnabled()) { LOGGER.debug("\n****** Sentença alternativa **********:\n" + alternativeText); } Document alternative = new DocumentImpl(alternativeText); this.analyzer.analyze(alternative); Sentence alternativeSentence = alternative.getSentences().get(0); if (alternativeSentence.getTokensProb() - sentence.getTokensProb() > 0.1) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Prob original: " + sentence.getTokensProb()); LOGGER.debug("Prob alternat: " + alternativeSentence.getTokensProb()); LOGGER.debug( "\n****** Possível correção **********:\n" + sentenceText + " -> " + alternativeText); } Token alternativeToken = alternativeSentence.getTokens().get(i); String[] suggestions = {candidate}; String[] longMsgArgs = {wanted, translate(alternativeToken.getPOSTag()), candidate}; String[] shortMsgArgs = {wanted, candidate}; mistakes.add( createMistake( ID, longMsgArgs, shortMsgArgs, suggestions, originalToken.getStart(), originalToken.getEnd(), sentence.getText())); } } } return mistakes; }