Я пытаюсь вычислить tf и idf коллекции документов. Моя проблема в том, что я получаю бесконечность, и я не хочу бесконечности, но мне нужны двойные результаты.Результаты бесконечности
Вот мой код:
String key = entry.getKey().toString();
Integer value = entry.getValue().intValue();
System.out.println("key " + key + " value " + value);
BigDecimal tf=new BigDecimal(entry.getValue()/collection.size());
BigDecimal idf=new BigDecimal(Math.log(counter/entry.getValue()));
BigDecimal tfidf =new BigDecimal((tf.doubleValue())*(idf.doubleValue()));
System.out.println("TF*IDF: " + key + ": " + tfidf.doubleValue());
вход: Карта, где строка является ключевым словом и Integer, сколько раз появляется слово в документе.
выход: ключевое слово + TF * IDF: номер
Любая идея, как решить эту проблему?
Пожалуйста, дайте пример ввода, фактический выход и желаемый результат. – aioobe
Я думаю, что idf никогда не будет 0, потому что карта всегда имеет что-то – user3310978
Скорее всего, либо entry.getValue(), collection.size(), либо счетчик имеют значение 0. Это, скорее всего, причина того, что вы получаете бесконечность. Вам нужно отлаживать, чтобы убедиться, что либо неприемлемо, что одно из этих значений будет равно нулю, либо добавьте 1 к этим значениям, чтобы убедиться, что вы не получаете бесконечности. – Thresh