Мне нужно смоделировать коллекцию n-граммов (последовательности из n слов) и их контексты (слова, которые появляются рядом с n-граммами вместе с их частотой). Моя идея была такой:
public class Ngram {
private String[] words;
private HashMap<String, Integer> contextCount = new HashMap<String, Integer>();
}
Затем, для подсчета всех разных n-грамм, я использую другой Hashmap, например
HashMap<String, Ngram> ngrams = new HashMap<String, Ngram>();
и добавляю к нему при получении текста. Проблема в том, что когда число n-грамм превышает 10 000 или около того, заполняется куча JVM (она установлена на максимум 1,5 ГБ), и все очень сильно замедляется.
Есть ли лучший способ сделать это, чтобы избежать такого потребления памяти? Кроме того, контексты должны быть легко сопоставимы между n-граммами, что, я не уверен, возможно с моим решением.