Я работал над анализатором разговоров в WhatsApp, и теперь я заинтересован в том, чтобы сделать эту вещь TF-IDF.
У меня есть в одной стороне список всех слов, которые появляются в разговоре, без грамматических ошибок, все они появляются в словаре.
С другой стороны, для ввода калькулятора tdif у меня есть:
- для каждого сообщения, Список, каждый список, содержащий каждое слово сообщения
- Список этих списков, представляющих весь разговор
Вот часть, которая меня немного смущает.
У меня есть цикл for, который перебирает список слов, а внутри этого цикла другой цикл for, который вычисляет tfidf этого слова для всего разговора.
Каждый внутренний цикл должен давать мне разные значения (логически), но я не знаю, что делать с этим значением.
Что я делаю, так это суммирую эти значения в переменной, а затем делю ее на количество раз, когда значение> 0.
Результаты: "Микроволновая печь", "Привет" и некоторые случайные слова. Я уверен, что проблема в том, как я вычисляю «среднее» значение.
Надеюсь, вы понимаете меня и помогаете.
TFIDFCalculator tfidf = new TFIDFCalculator();
for (String s : wordList) {
double avg = 0;
int j = 0;
for (List doc : documents) {
double n = tfidf.tfIdf(doc, documents, s);
if (!Double.isNaN(n)) {
avg += n;
if (n > 0)
j++;
}
}
if (relevantWords.length == m)
relevantWords = java.util.Arrays.copyOf(relevantWords, relevantWords.length + (relevantWords.length / 2));
relevantWords[m] = new Word(s, avg/j);
//System.out.println("Word added: " + s + "/" + avg);
m++;