Exemplo n.º 1
0
        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
            });
        }