public async Task Classify()
        {
            var         problemFactory = new ProblemFactory(threeClassDataset);
            SvmTraining training       = new SvmTraining(problemFactory, threeClassDataset);
            var         parameters     = training.SelectParameters(TrainingHeader.CreateDefault(), CancellationToken.None);
            var         results        = await training.Train(parameters).ConfigureAwait(false);

            results.Model.Write(Path.Combine(TestContext.CurrentContext.TestDirectory, "classify.dat"));
            var testSet = ArffDataSet.Create <PositivityType>("Test");

            testSet.UseTotal = true;

            var positive = testSet.AddDocument();

            positive.AddRecord("Good");

            var negative = testSet.AddDocument();

            negative.AddRecord("Bad");

            SvmTesting testing = new SvmTesting(results.Model, problemFactory);

            testing.Classify(testSet);
            Assert.AreEqual(PositivityType.Positive, positive.Class.Value);
            Assert.AreEqual(PositivityType.Negative, negative.Class.Value);
        }
Exemplo n.º 2
0
        public void Setup()
        {
            mockArffDataSet = ArffDataSet.Create <PositivityType>("Test");
            instance        = CreateProcessArff();
            document        = new Document("Test");
            document.Sentences.Add(new SentenceItem("Test"));
            document.Sentences[0].Words.Add(
                WordExFactory.Construct(
                    new TestWordItem("Good")
            {
                Stemmed     = "Good",
                IsSentiment = true
            }));
            document.Sentences[0].Words.Add(
                WordExFactory.Construct(
                    new TestWordItem("Two")
            {
                Stemmed = "Two"
            }));
            document.Sentences[0].Words.Add(
                WordExFactory.Construct(
                    new TestWordItem("#Three")
            {
                Stemmed = "#Three"
            }));
            var factory = ActualWordsHandler.InstanceSimple.Container.Resolve <Func <Document, IParsedReviewManager> >()(document);

            review = factory.Create();
        }
        public void Setup()
        {
            threeClassDataset          = ArffDataSet.Create <PositivityType>("Test");
            threeClassDataset.UseTotal = true;
            twoClassDataset            = ArffDataSet.CreateSimple("Test");
            twoClassDataset.UseTotal   = true;
            twoClassDataset.Header.RegisterNominalClass("Positive", "Negative");

            for (int i = 0; i < 20; i++)
            {
                var positive = threeClassDataset.AddDocument();
                positive.Class.Value = PositivityType.Positive;
                positive.AddRecord("Good");

                positive             = twoClassDataset.AddDocument();
                positive.Class.Value = "Positive";
                positive.AddRecord("Good");

                var negative = threeClassDataset.AddDocument();
                negative.Class.Value = PositivityType.Negative;
                negative.AddRecord("Bad");

                negative             = twoClassDataset.AddDocument();
                negative.Class.Value = "Negative";
                negative.AddRecord("Bad");
            }
        }
Exemplo n.º 4
0
        public void Save(string path)
        {
            if (string.IsNullOrWhiteSpace(path))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(path));
            }

            log.LogInformation("Saving {0}...", path);
            var fileName = $"{Word.Text.CreatePureLetterText()}.arff";

            path = Path.Combine(path, fileName);
            IArffDataSet arff = ArffDataSet.Create <PositivityType>(Word.Text);

            arff.UseTotal = true;
            foreach (WordsContext vector in Vectors)
            {
                IArffDataRow review = arff.AddDocument();
                review.Class.Value = vector.SentimentValue > 0
                    ? PositivityType.Positive
                    : PositivityType.Negative;
                foreach (WordEx wordItem in vector.Words)
                {
                    if (!wordItem.IsAspect &&
                        wordItem.Value == 0)
                    {
                        continue;
                    }

                    DataRecord addedWord = review.AddRecord(wordItem.Text);
                    addedWord.Value = addedWord.Total;
                }
            }

            arff.Save(path);
            log.LogInformation("Saving {0} Completed.", path);
        }