Как мне классифицировать данные по их словам в mongodb? - PullRequest
0 голосов
/ 04 мая 2018

Я студент, который пытается познакомиться с MongoDB.

В настоящее время я создаю программу на Java, которая получает твиты с помощью твиттер-потока и сохраняет эти твиты в дБ с помощью MongoDB.

Я сделал все, чтобы сохранить твиты до MongoDB, и теперь я хочу классифицировать эти твиты по словам.

Как это:

Позволяет сказать:

Tweet1 = " I am A" 
Tweet2 = "I am B"

И что я хочу сделать, так это когда я их как-то классифицирую, я хочу, чтобы это выглядело так:

I :  Tweet1, Tweet2
Am : Tweet1, Tweet2
A : Tweet1
B : Tweet2

Должен ли я использовать индекс для этого? Неважно, действительно ли он изменяет базу данных или просто ищет по индексу. Я просто хочу, чтобы мой результат выглядел следующим образом.

Я впервые работаю с базами данных, поэтому все эти индексы и базы данных меня действительно смущают.

Было бы здорово, если бы кто-нибудь дал мне несколько советов для этого.

Спасибо!

1 Ответ

0 голосов
/ 04 мая 2018

Это инвертированный индекс. Задав слово, вы хотите быстро найти твиты, в которых оно содержится. Ниже приведен пример кода Java, который делает это. В тот момент, когда написаны два примера твитов, вы должны включить код для извлечения их из MongoDB.

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.TreeMap;

public class SimpleInvertedIndex {

    public static void main(String[] args) {

        //inverted index
        Map<String, LinkedList<String>> index = new TreeMap<>();

        //tweets data
        Map<String, String> tweets = new HashMap<>();

        //Sample tweets
        tweets.put("Tweet1", " I am A");
        tweets.put("Tweet2", "I am B");

        //build the inverted index
        for (Map.Entry<String, String> entry : tweets.entrySet()) {
            String tweetId = entry.getKey();
            String[] values = entry.getValue().trim().split(" ");

            for (int i = 0; i < values.length; i++) {
                index.putIfAbsent(values[i], new LinkedList<>());
                LinkedList<String> updatedList = index.get(values[i]);
                updatedList.add(tweetId);
                index.put(values[i], updatedList);
            }
        }

        //verify by printing out
        for (Map.Entry<String, LinkedList<String>> entry : index.entrySet()) {
            System.out.print(entry.getKey() + " : ");
            System.out.print(entry.getValue());
            System.out.println();
        }
    }
}

Выход:

A  : [Tweet1]
B  : [Tweet2]
I  : [Tweet2, Tweet1]
am : [Tweet2, Tweet1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...