/// <summary>
        /// Evaluates the specified chunk samples.
        /// </summary>
        /// <param name="samples">The chunk samples to be evaluated.</param>
        /// <param name="partitions">The partitions (folds).</param>
        public void Evaluate(IObjectStream <ChunkSample> samples, int partitions)
        {
            var partitioner = new CrossValidationPartitioner <ChunkSample>(samples, partitions);

            while (partitioner.HasNext)
            {
                var trainingSampleStream = partitioner.Next();

                var model = ChunkerME.Train(languageCode, trainingSampleStream, parameters, chunkerFactory);

                var evaluator = new ChunkerEvaluator(new ChunkerME(model), listeners);

                evaluator.Evaluate(trainingSampleStream.GetTestSampleStream());

                FMeasure.MergeInto(evaluator.FMeasure);
            }
        }
        public void TestDummyFactory() {

            var model = TrainModel(new DummyChunkerFactory());

            Assert.IsInstanceOf<DummyChunkerFactory>(model.Factory);
            Assert.IsInstanceOf<DummyChunkerFactory.DummyContextGenerator>(model.Factory.GetContextGenerator());
            Assert.IsInstanceOf<DummyChunkerFactory.DummySequenceValidator>(model.Factory.GetSequenceValidator());


            using (var stream = new MemoryStream()) {
                model.Serialize(new UnclosableStream(stream));
                stream.Seek(0, SeekOrigin.Begin);

                var fromSerialized = new ChunkerModel(stream);
                Assert.IsInstanceOf<DummyChunkerFactory>(model.Factory);
                Assert.IsInstanceOf<DummyChunkerFactory.DummyContextGenerator>(
                    fromSerialized.Factory.GetContextGenerator());
                Assert.IsInstanceOf<DummyChunkerFactory.DummySequenceValidator>(
                    fromSerialized.Factory.GetSequenceValidator());
            }

            var chunker = new ChunkerME(model);

            String[] toks1 = {
                "Rockwell", "said", "the", "agreement", "calls", "for",
                "it", "to", "supply", "200", "additional", "so-called", "shipsets",
                "for", "the", "planes", "."
            };

            String[] tags1 = {
                "NNP", "VBD", "DT", "NN", "VBZ", "IN", "PRP", "TO", "VB",
                "CD", "JJ", "JJ", "NNS", "IN", "DT", "NNS", "."
            };

            chunker.Chunk(toks1, tags1);
        }
        public void TestTokenProbMinScoreOpenNLP() {

            var model = new ChunkerModel(Tests.OpenFile("opennlp/models/en-chunker.bin"));

            Assert.NotNull(model);

            var ckr = new ChunkerME(model);

            Assert.NotNull(ckr);

            var preds = chunker.TopKSequences(toks1, tags1, -5.55);

            Assert.AreEqual(4, preds.Length);
            Assert.AreEqual(expect1.Length, preds[0].Probabilities.Count);
            Assert.True(expect1.SequenceEqual(preds[0].Outcomes));
            Assert.False(expect1.SequenceEqual(preds[1].Outcomes));
            


        }