n グラム (n 単語のシーケンス) とそのコンテキスト (頻度と共に n グラムの近くに現れる単語) のコレクションをモデル化する必要があります。私の考えはこれでした:
public class Ngram {
private String[] words;
private HashMap<String, Integer> contextCount = new HashMap<String, Integer>();
}
次に、すべての異なる n-gram をカウントするために、次のような別の Hashmap を使用します。
HashMap<String, Ngram> ngrams = new HashMap<String, Ngram>();
テキストを受け取りながら追加します。問題は、n-gram の数が 10,000 程度を超えると、JVM ヒープがいっぱいになり (最大 1.5GB に設定されている)、すべてが非常に遅くなることです。
そのようなメモリ消費を避けるために、これを行うためのより良い方法はありますか? また、コンテキストはn-gram間で簡単に比較できるはずですが、私のソリューションではそれが可能かどうかはわかりません.