Оптимизация

This commit is contained in:
Mark Struchkov 2019-08-22 16:56:03 +03:00
parent c8dedeb4d5
commit d4b8489cf6

View File

@ -80,27 +80,33 @@ public class AutoResponder<U extends Unit> {
private Optional<U> nextUnit(@NonNull Set<U> nextUnits, String message) { private Optional<U> nextUnit(@NonNull Set<U> nextUnits, String message) {
Set<U> searchUnit = new HashSet<>(); Set<U> searchUnit = new HashSet<>();
nextUnits.stream() for (U unit : nextUnits) {
.filter(nextUnit -> nextUnit.getPhrase() != null if (unit.getPhrase() != null
&& !nextUnit.getPhrase().isEmpty() && !unit.getPhrase().isEmpty()
&& nextUnit.getPhrase().equalsIgnoreCase(message) && unit.getPhrase().equalsIgnoreCase(message)) {
) searchUnit.add(unit);
.forEach(searchUnit::add); }
nextUnits.stream()
.filter(nextUnit -> nextUnit.getPattern() != null && patternReg(nextUnit, message))
.forEach(searchUnit::add);
nextUnits.stream()
.filter(nextUnit -> percentageMatch(nextUnit, Parser.parse(message)) >= nextUnit.getMatchThreshold())
.forEach(searchUnit::add);
if (searchUnit.isEmpty()) {
nextUnits.stream()
.filter(nextUnit -> (nextUnit.getPattern() == null && (nextUnit.getKeyWords() == null || nextUnit.getKeyWords().isEmpty())))
.forEach(searchUnit::add);
} }
for (U unit : nextUnits) {
if (unit.getPattern() != null && patternReg(unit, message)) {
searchUnit.add(unit);
}
}
for (U unit : nextUnits) {
if (percentageMatch(unit, Parser.parse(message)) >= unit.getMatchThreshold()) {
searchUnit.add(unit);
}
}
if (searchUnit.isEmpty()) {
for (U nextUnit : nextUnits) {
if ((nextUnit.getPattern() == null && (nextUnit.getKeyWords() == null || nextUnit.getKeyWords().isEmpty()))) {
searchUnit.add(nextUnit);
}
}
}
return searchUnit.stream().max(UNIT_PRIORITY_COMPARATOR); return searchUnit.stream().max(UNIT_PRIORITY_COMPARATOR);
} }
@ -110,14 +116,15 @@ public class AutoResponder<U extends Unit> {
} }
private Double percentageMatch(U unit, Set<String> words) { private Double percentageMatch(U unit, Set<String> words) {
if (unit.getKeyWords() != null && !unit.getKeyWords().isEmpty()) { Set<String> keyWords = unit.getKeyWords();
Set<String> temp = new HashSet<>(unit.getKeyWords()); if (keyWords != null && !keyWords.isEmpty()) {
Set<String> temp = new HashSet<>(keyWords);
temp.retainAll(words); temp.retainAll(words);
log.info("Ключевые слова юнита: {} ({})", unit.getKeyWords(), unit.getKeyWords().size()); log.info("Ключевые слова юнита: {} ({})", keyWords, keyWords.size());
log.info("Ключевые слова от пользователя: {}", words); log.info("Ключевые слова от пользователя: {}", words);
log.info("Пересечение: {} ({})", temp, temp.size()); log.info("Пересечение: {} ({})", temp, temp.size());
log.info("Процент: {} Необходимо: {}", (double) temp.size() / (double) unit.getKeyWords().size() * 100.0, unit.getMatchThreshold()); log.info("Процент: {} Необходимо: {}", (double) temp.size() / (double) keyWords.size() * 100.0, unit.getMatchThreshold());
return (double) temp.size() / (double) unit.getKeyWords().size() * 100.0; return (double) temp.size() / (double) keyWords.size() * 100.0;
} else { } else {
return 0.0; return 0.0;
} }