Оптимизация
This commit is contained in:
parent
c8dedeb4d5
commit
d4b8489cf6
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user