Примечание. Исходные коды включают в себя несколько классов, поэтому ради вашего времени я не буду публиковать его, но предоставлю вам контекст.Пожалуйста, прости, если я не могу хорошо объяснить.Я много работал над этим, и мое объяснение имеет смысл для меня, но, возможно, не имеет смысла для других.
У меня есть задача определить, к какой категории относится пользовательский ввод.Например, если пользователь вводит: я люблю собак и кошек.Программа выведет две верхние категории: собаки, кошки
Если пользователь только введет: «Я люблю собак», программа выведет две верхние категории как «собаки, другие категории не найдены»
"нет категории" - это ответ по умолчанию, если найдена только одна категория или ее нет вообще.
Я создал списки массивов для следующих категорий: собаки, кошки, птицы.Эти массивы содержат ключевые слова, которые заставят программу распознать, в какую категорию будет входить пользовательский ввод.
Мне нужно получить наивысший уровень вероятности и второй наивысший уровень вероятности (если применимо) и связать их со строкой.это выведет, что категория.
Это мой код, который пытается взять 2 верхних вероятности и заставить их выводить на консоль. Моя проблема заключается в том, чтобы категории связывались с соответствующей строкой, чтобы обеспечить вывод категорий с наибольшим правдоподобием.
//Create prioritization
int topDouble = 0;
String topString = "no category"; //default response
int secondDouble = 0;
String secondString = "no category"; // default response
ArrayList<Double> likelyDouble = new ArrayList<Double>();
likelyDouble.add(cats);
likelyDouble.add(dogs);
likelyDouble.add(birds);
ArrayList<String> likelyString = new ArrayList<String>();
likelyString.add("you talked about cats");
//to parallel likelyDouble cats category
likelyString.add("you talked about dogs");
//to parallel likelyDouble dogs category
likelyString.add("you talked about birds");
//to parallel likelyDouble cats category
int count = 0;
for (double d : likelyDouble){
if((d>0) && (d > topDouble)){
topDouble = (int) d;
topString = likelyString.get(count);
}
else if((d>0) && (d > secondDouble)){
secondDouble = (int) d;
secondString = likelyString.get(count);
}
}
System.out.print(topString + "\n");
System.out.print(secondString);
Вывод, который я получаю по умолчанию:
Пользовательский ввод: мне нравятся собаки и кошки.
Собаки
нет категории
К вашему сведению Программа определяет вероятность того, что пользователь говорит об определенной категории, на основе позиции впредложение и количество раз, на которые ссылается эта категория.Вероятность - это значение, которое рассчитывается.так что если категория вообще не упоминается, вероятность равна 0.
Спасибо за всю вашу помощь!