• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ljacqu / wordeval / 14562991048

20 Apr 2025 08:19PM UTC coverage: 55.116% (+1.7%) from 53.367%
14562991048

push

github

ljacqu
Merge remote-tracking branch 'origin/master' into dependencies

269 of 568 branches covered (47.36%)

212 of 313 new or added lines in 36 files covered. (67.73%)

6 existing lines in 5 files now uncovered.

738 of 1339 relevant lines covered (55.12%)

3.27 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

36.36
/src/main/java/ch/jalu/wordeval/evaluators/impl/DiacriticHomonyms.java
1
package ch.jalu.wordeval.evaluators.impl;
2

3
import ch.jalu.wordeval.dictionary.Word;
4
import ch.jalu.wordeval.evaluators.AllWordsEvaluator;
5
import ch.jalu.wordeval.evaluators.export.EvaluatorExportUtil;
6
import ch.jalu.wordeval.evaluators.result.WordGroupWithKey;
7
import ch.jalu.wordeval.util.StreamUtils;
8
import com.google.common.collect.HashMultimap;
9
import com.google.common.collect.ListMultimap;
10
import com.google.common.collect.Multimaps;
11
import com.google.common.collect.SetMultimap;
12
import lombok.Getter;
13

14
import java.util.ArrayList;
15
import java.util.Collection;
16
import java.util.Comparator;
17
import java.util.HashSet;
18
import java.util.List;
19
import java.util.Set;
20

21
/**
22
 * Groups words which only differ in diacritics which are not considered
23
 * distinct letters in the language, such as {des, dés, dès} in French or
24
 * {schon, schön} in German.
25
 */
26
public class DiacriticHomonyms implements AllWordsEvaluator {
2✔
27

28
  @Getter
6✔
29
  private final List<WordGroupWithKey> results = new ArrayList<>();
30

31
  @Override
32
  public void evaluate(Collection<Word> words) {
33
    SetMultimap<String, Word> wordsByNoAccentRep = words.stream()
3✔
34
        .sorted(Comparator.comparing(w -> Character.isUpperCase(w.getRaw().charAt(0))))
10✔
35
        .filter(StreamUtils.distinctByKey(Word::getLowercase))
5✔
36
        .collect(Multimaps.toMultimap(
4✔
37
            Word::getWithoutAccents,
38
            word -> word,
2✔
39
            HashMultimap::create));
40

41
    Multimaps.asMap(wordsByNoAccentRep).forEach((wordRep, wordsInGroup) -> {
5✔
42
      if (wordsInGroup.size() > 1) {
4✔
43
        results.add(new WordGroupWithKey(wordsInGroup, wordRep));
9✔
44
      }
45
    });
1✔
46
  }
1✔
47

48
  @Override
49
  public String getId() {
50
    return "group.homonymsByDiacritic";
×
51
  }
52

53
  @Override
54
  public ListMultimap<Object, Object> getTopResults(int topScores, int maxLimit) {
NEW
55
    Comparator<WordGroupWithKey> comparator = Comparator.comparingInt((WordGroupWithKey group) -> group.words().size())
×
NEW
56
        .thenComparing(group -> group.key().length())
×
UNCOV
57
        .reversed(); // todo: unit test
×
58

59
    List<WordGroupWithKey> sortedResult = results.stream()
×
60
        .sorted(comparator)
×
61
        .toList();
×
62

63
    Set<Integer> uniqueValues = new HashSet<>();
×
64
    ListMultimap<Object, Object> filteredResults = EvaluatorExportUtil.newListMultimap();
×
65
    for (WordGroupWithKey wordGroup : sortedResult) {
×
NEW
66
      int score = wordGroup.words().size();
×
67
      if (uniqueValues.add(score) && uniqueValues.size() > topScores) {
×
68
        break;
×
69
      }
NEW
70
      List<String> wordList = wordGroup.words().stream()
×
71
          .map(Word::getRaw)
×
72
          .toList();
×
73
      filteredResults.put(score, wordList);
×
74
      if (filteredResults.size() >= maxLimit) {
×
75
        break;
×
76
      }
77
    }
×
78

79
    return filteredResults;
×
80
  }
81
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc