Сохраняя его на Java, я предполагаю, что вы думаете о его хранении таким образом, чтобы из него легко было создать последовательность.
Сначала вам понадобится хэш-карта со словами, являющимися ключами. Значения этого hashmap будут древовидной картой, ключами которой являются кумулятивная вероятность, а значением будет следующее слово.
Так что это будет что-то вроде:
HashMap<String, TreeMap<Double, String>> words = new HashMap<String, TreeMap<Double,String>>();
TreeMap<Double, String> appleMap = new TreeMap<Double, String>();
appleMap.put( 0.2d, "cake");
appleMap.put( 1.0d, "sauce");
words.put( "apple", appleMap );
TreeMap<Double, String> transformerMap = new TreeMap<Double, String>();
transformerMap.put( 0.95d, "movie");
transformerMap.put( 0.975d, "cat");
transformerMap.put( 1.0d, "dog");
words.put( "transformer", transformerMap );
Очень легко сгенерировать следующее слово из этой структуры.
private String generateNextWord( HashMap<String, TreeMap<Double, String>> words, String currentWord ) {
TreeMap<Double, String> probMap = words.get( currentWord );
double d = Math.random();
return probMap.ceilingEntry( d ).getValue();
}
В реляционной базе данных вы можете просто иметь одну таблицу с тремя столбцами: текущее слово, следующее слово и вес. Таким образом, вы в основном храните ребра графа переходов состояний вашей цепи Маркова
Вы также можете нормализовать его в две таблицы: таблицу вершин для хранения слов по идентификаторам слов и таблицу границ, в которой хранятся идентификатор текущего слова, идентификатор следующего слова и вес, но если вы не хотите хранить дополнительные поля со своими словами, Я не думаю, что это необходимо.