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