public static IEnumerable<TransitionEmissions> BuildTransitionEmissionsFromBrownText()
        {
            var assembly = Assembly.GetExecutingAssembly ();

            using (var fileStream = assembly.GetManifestResourceStream (Brown_Ca01File)) {
                if (fileStream == null) {
                    throw new InvalidOperationException ("brown-ca01.txt should exist. It doesn't, so you're seeing this error");
                }

                using (var stringReader = new StreamReader (fileStream)) {
                    string line = stringReader.ReadLine ();

                    while (line != null) {
                        var transitionEmissions = new TransitionEmissions ();

                        foreach (var tuple in ReadLine(line)) {
                            transitionEmissions.AddTransitionEmission (tuple.Item1, tuple.Item2);
                        }

                        yield return transitionEmissions;

                        line = stringReader.ReadLine ();
                    }
                }
            }
        }
        public void ExceptionThrownWhenTransitionIsNull()
        {
            // arrange
            var transitionEmission = new TransitionEmissions ();

            // act
            transitionEmission.AddTransitionEmission (null, Emission);

            // assert - exception
        }
        public void RecordsAddedWhenAccessedThroughMethod()
        {
            // arrange
            var transitionEmission = new TransitionEmissions ();

            // act
            transitionEmission.AddTransitionEmission (Transition, Emission);

            // assert
            Assert.AreEqual (1, transitionEmission.Records.Count);
            Assert.AreEqual (Transition, transitionEmission.Records [0].Transition);
            Assert.AreEqual (Emission, transitionEmission.Records [0].Emission);
        }
        public void HiddenMarkovModelInstantiatedWithProperTransitionEmissions()
        {
            // arrange
            const string Transition = "noun";
            const string Emission = "Cardio";

            var transitionEmissions = new TransitionEmissions ();
            transitionEmissions.AddTransitionEmission (Transition, Emission);
            var transitionEmissionsList = new List<TransitionEmissions> ();
            transitionEmissionsList.Add (transitionEmissions);

            var hmm = new HiddenMarkovModelBuilder (transitionEmissionsList).Build();

            // act
            var result = hmm.GetEmissions (new[] { Transition });

            // assert
            Assert.AreEqual (1, result.Count ());
            Assert.AreEqual (Emission, result.First ().Emissions.First());
        }
        private List<TransitionEmissions> BuildTestTransitionEmissions()
        {
            // http://nlp.stanford.edu:8080/parser/index.jsp - Thank You!
            // My dog also likes eating sausage.
            // My/PRP$ dog/NN also/RB likes/VBZ eating/VBG sausage/NN ./.
            var firstTransitionEmissions = new TransitionEmissions ();
            firstTransitionEmissions.AddTransitionEmission ("PRP$", "My");
            firstTransitionEmissions.AddTransitionEmission ("NN", "dog");
            firstTransitionEmissions.AddTransitionEmission ("RB", "also");
            firstTransitionEmissions.AddTransitionEmission ("VBZ", "likes");
            firstTransitionEmissions.AddTransitionEmission ("VBG", "eating");
            firstTransitionEmissions.AddTransitionEmission ("NN", "sausage");
            firstTransitionEmissions.AddTransitionEmission (".", ".");

            // My/PRP$ dog/NN likes/VBZ eating/VBG turkey/NN ./.
            var secondTransitionEmissions = new TransitionEmissions ();
            secondTransitionEmissions.AddTransitionEmission ("PRP$", "My");
            secondTransitionEmissions.AddTransitionEmission ("NN", "dog");
            secondTransitionEmissions.AddTransitionEmission ("VBZ", "likes");
            secondTransitionEmissions.AddTransitionEmission ("VBG", "eating");
            secondTransitionEmissions.AddTransitionEmission ("NN", "turkey");
            secondTransitionEmissions.AddTransitionEmission (".", ".");

            // My/PRP$ dog/NN likes/VBZ walking/VBG ./.
            var thirdTransitionEmissions = new TransitionEmissions ();
            thirdTransitionEmissions.AddTransitionEmission ("PRP$", "My");
            thirdTransitionEmissions.AddTransitionEmission ("NN", "dog");
            thirdTransitionEmissions.AddTransitionEmission ("VBZ", "likes");
            thirdTransitionEmissions.AddTransitionEmission ("VBG", "walking");
            thirdTransitionEmissions.AddTransitionEmission (".", ".");

            return new List<TransitionEmissions> { firstTransitionEmissions, secondTransitionEmissions, thirdTransitionEmissions };
        }