Применить TFIDF к разговору - PullRequest
0 голосов
/ 06 ноября 2018

Я работал над анализатором разговоров в 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++;
...