public static HMMGroup CreateHiddenMarkovModel(IEnumerable <string> fileNames, int?length = null, SplitAlgorithm algo = SplitAlgorithm.Simple, bool ignoreCase = false) { string[][] ngrams = null; switch (algo) { case SplitAlgorithm.Simple: ngrams = GetNgramsSimple(fileNames, length ?? 8); break; case SplitAlgorithm.Pairs: ngrams = GetNgramsPairs(fileNames, length ?? 8); break; case SplitAlgorithm.ByWord: ngrams = GetNgrams(fileNames, length, true, ignoreCase); break; } var codebook = new Codification("data", ngrams); var sequence = codebook.ParallelTransform("data", ngrams); ngrams = null; var topology = new Forward(states: 4); int symbols = codebook["data"].NumberOfSymbols; var hmm = new HiddenMarkovModel(topology, symbols); var teacher = new BaumWelchLearning(hmm); teacher.Learn(sequence); return(new HMMGroup { Model = hmm, Codebook = codebook, Length = length }); }