Мне нужно смоделировать набор 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-граммами, что, я не уверен, возможно с моим решением.