UppercaseSeriesFilter implements TokenFilter { @Override public void apply(TokenSequence tokenSequence) { List<Token> upperCaseSequence = new ArrayList<Token>(); for (Token token : tokenSequence) { String word = token.getText(); if (word.length() == 0) continue; boolean hasLowerCase = false; boolean hasUpperCase = false; for (int i = 0; i < word.length(); i++) { char c = word.charAt(i); if (Character.isUpperCase(c)) { hasUpperCase = true; } if (Character.isLowerCase(c)) { hasLowerCase = true; break; } } if (hasUpperCase && !hasLowerCase) { upperCaseSequence.add(token); } else if (!hasLowerCase) { } else { if (upperCaseSequence.size() > 1) { this.checkSequence(upperCaseSequence); } upperCaseSequence.clear(); } } if (upperCaseSequence.size() > 1) { this.checkSequence(upperCaseSequence); } } UppercaseSeriesFilter(String sessionId); @Override void apply(TokenSequence tokenSequence); static String getKnownWord(String sessionId, String word);  }
@Test public void testReplace() throws Exception { Diacriticizer diacriticizer = mock(Diacriticizer.class); when(diacriticizer.diacriticize("VEUX")).thenReturn(new HashSet<>(Arrays.asList("veux"))); when(diacriticizer.diacriticize("SAVOIR")).thenReturn(new HashSet<>(Arrays.asList("savoir"))); when(diacriticizer.diacriticize("L'")).thenReturn(new HashSet<>(Arrays.asList("l'"))); when(diacriticizer.diacriticize("AMERIQUE")).thenReturn(new HashSet<>(Arrays.asList("Amérique"))); System.setProperty("config.file", "src/test/resources/test.conf"); ConfigFactory.invalidateCaches(); final Config config = ConfigFactory.load(); final String sessionId = "test"; TalismaneSession.get(sessionId).setDiacriticizer(diacriticizer); UppercaseSeriesFilter filter = new UppercaseSeriesFilter(sessionId); String text = "Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE sur L'AMERIQUE!"; Sentence sentence = new Sentence(text, sessionId); TokenSequence tokenSequence = new TokenSequence(sentence, sessionId); tokenSequence.addToken("".length(), "Je".length()); tokenSequence.addToken("Je ".length(), "Je VEUX".length()); tokenSequence.addToken("Je VEUX ".length(), "Je VEUX SAVOIR".length()); tokenSequence.addToken("Je VEUX SAVOIR ".length(), "Je VEUX SAVOIR la".length()); tokenSequence.addToken("Je VEUX SAVOIR la ".length(), "Je VEUX SAVOIR la VERITE".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE".length(), "Je VEUX SAVOIR la VERITE,".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, ".length(), "Je VEUX SAVOIR la VERITE, je".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, je ".length(), "Je VEUX SAVOIR la VERITE, je VEUX".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, je VEUX ".length(), "Je VEUX SAVOIR la VERITE, je VEUX SAVOIR".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, je VEUX SAVOIR ".length(), "Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA ".length(), "Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE ".length(), "Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE sur".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE sur ".length(), "Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE sur L'".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE sur L'".length(), "Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE sur L'AMERIQUE".length()); tokenSequence.addToken("Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE sur L'AMERIQUE".length(), "Je VEUX SAVOIR la VERITE, je VEUX SAVOIR LA VERITE sur L'AMERIQUE!".length()); filter.apply(tokenSequence); System.out.println(tokenSequence); StringBuilder sb = new StringBuilder(); for (Token token : tokenSequence) { sb.append(token.getText()); sb.append('|'); } assertEquals("Je|veux|savoir|la|VERITE|,|je|veux|savoir|La|Verite|sur|l'|Amérique|!|", sb.toString()); }