Пример #1
0
        /// <summary>
        ///     Learns a program to extract a sequence of regions from a file.
        /// </summary>
        private static void LearnSequence()
        {
            var session = new SequenceSession();
            // It is advised to learn a sequence with at least 2 examples because generalizing a sequence from a single element is hard.
            // Also, we need to give positive examples continuously (i.e., we cannot skip any example).
            var input =
                SequenceSession.CreateStringRegion(
                    "United States\n Carrie Dodson 100\n Leonard Robledo 75\n Margaret Cook 320\n" +
                    "Canada\n Concetta Beck 350\n Nicholas Sayers 90\n Francis Terrill 2430\n" +
                    "New Zealand\n Nettie Pope 50\n Mack Beeson 1070");

            // Suppose we want to extract all last names from the input string.
            session.AddConstraints(
                new SequenceExample(input, new[]
            {
                input.Slice(15, 21),     // input => "Carrie"
                input.Slice(34, 41),     // input => "Leonard"
            })
                );

            SequenceProgram topRankedProg = session.Learn();

            if (topRankedProg == null)
            {
                Console.Error.WriteLine("Error: Learning fails!");
                return;
            }

            foreach (StringRegion r in topRankedProg.Run(input))
            {
                string output = r != null ? r.Value : "null";
                Console.WriteLine(output);
            }
        }
        public List <string> RunSequence(string programAsString, string input)
        {
            //programAsString = programAsString.Replace("\\", "");
            var program     = Loader.Instance.Sequence.Load(programAsString);
            var inputRegion = SequenceSession.CreateStringRegion(input);

            var result = program.Run(inputRegion);

            return(result.Select(region => region.Value).ToList());
        }
Пример #3
0
        private void HandleSequenceInitPacket(SequenceInitPacket packet)
        {
            var seqSession = new SequenceSession(packet);

            if (packet.IsOperation)
            {
                seqSession.IsOperation   = true;
                seqSession.OperationGuid = packet.OperationGuid;
            }
            lock (_lockObj)
                _activeSequenceSessions.Add(packet.SequenceGuid, seqSession);
        }
Пример #4
0
            public override void Run()
            {
                if (!Directory.Exists(ReportDirPath))
                {
                    Directory.CreateDirectory(ReportDirPath);
                }
                Console.WriteLine($"Learning Extraction.Text sequence program for {SubBenchmarkName}");

                while (!Success && TryGetNextExample(out SequenceExample nextConstraint))
                {
                    var session = new SequenceSession();
                    UsedExamples.Add(nextConstraint);
                    session.Constraints.Add(UsedExamples);
                    Program = session.Learn();
                    Success = Program != null && AllExamples.All(e => Valid(e, Program));
                }
                RecordResult();
            }
Пример #5
0
        /// <summary>
        ///     Learns a program to extract a sequence of regions using its preceding sibling as reference.
        /// </summary>
        private static void LearnSequenceReferencingSibling()
        {
            var session = new SequenceSession();
            var input   =
                SequenceSession.CreateStringRegion(
                    "United States\n Carrie Dodson 100\n Leonard Robledo 75\n Margaret Cook 320\n" +
                    "Canada\n Concetta Beck 350\n Nicholas Sayers 90\n Francis Terrill 2430\n" +
                    "New Zealand\n Nettie Pope 50\n Mack Beeson 1070");

            // areas = { "United States", "Canada", "New Zealand" }
            StringRegion[] areas = { input.Slice(0, 13), input.Slice(72, 78), input.Slice(140, 151) };

            // Suppose we want to extract all last names from the input string.
            session.AddConstraints(
                new SequenceExample(areas[0], new[]
            {
                input.Slice(15, 21),     // "United States" => "Carrie"
                input.Slice(34, 41),     // "United States" => "Leonard"
            })
                );

            SequenceProgram topRankedProg = session.Learn();

            if (topRankedProg == null)
            {
                Console.Error.WriteLine("Error: Learning fails!");
                return;
            }

            // Note: we can't use SequenceProgram.Run(StringRegion) because of sibling referencing.
            // Read the documentation for more information.
            IEnumerable <IEnumerable <StringRegion> > outputSeq = topRankedProg.Run(areas);

            foreach (Record <IEnumerable <StringRegion>, StringRegion> tup in outputSeq.ZipWith(areas))
            {
                foreach (StringRegion output in tup.Item1)
                {
                    Console.WriteLine("\"{0}\" => \"{1}\"", tup.Item2, output == null ? "null" : output.Value);
                }
            }
        }
        public string LearnSequence(List <TextExtractExample> textExtractExamples)
        {
            var session          = new SequenceSession();
            var sequenceExamples = new List <SequenceExample>();

            foreach (var textExtractExample in textExtractExamples)
            {
                var inputRegion    = SequenceSession.CreateStringRegion(textExtractExample.text);
                var exampleRegions = new List <StringRegion>();
                foreach (var textExtractSelection in textExtractExample.selections)
                {
                    var exampleRegion = inputRegion.Slice((uint)textExtractSelection.startPos, (uint)textExtractSelection.endPos);
                    exampleRegions.Add(exampleRegion);
                }

                sequenceExamples.Add(new SequenceExample(inputRegion, exampleRegions));
            }

            session.AddConstraints(sequenceExamples);
            var program = session.Learn();

            return(program.Serialize());
        }
Пример #7
0
        private static void Main(string[] args)
        {
            /*LearnRegion();
             *
             * LearnRegionUsingMultipleFiles();
             *
             * LearnRegionWithNegativeExamples();
             *
             * LearnRegionWithAdditionalReferences();
             *
             * LearnRegionReferencingParent();
             *
             * LearnRegionReferencingPrecedingSibling();
             *
             * LearnRegionReferencingSucceedingSibling();
             *
             * LearnTop3RegionPrograms();
             *
             * LearnAllRegionPrograms();
             *
             * LearnRegionWithRegexes();
             *
             * SerializeProgram();*/

            // Learning sequence is similar to learning region.
            // We only illustrate some API usages. Other sequence learning APIs are similar to their region APIs counterpart.
            // Note: we need to give positive examples continuously.
            // For instance, suppose we learn a list of {A, B, C, D, E}.
            // {A, B} is a valid set of examples, while {A, C} is not.
            // In case of { A, C}, Extraction.Text assumes that B is a negative example.
            // This helps our learning converge more quickly.
            //LearnSequence();

            //LearnSequenceReferencingSibling();

            var session = new SequenceSession();
            // It is advised to learn a sequence with at least 2 examples because generalizing a sequence from a single element is hard.
            // Also, we need to give positive examples continuously (i.e., we cannot skip any example).
            var input =
                SequenceSession.CreateStringRegion(
                    "We have some programs to showcase now. Example: Hello. Now do you see? Example: Yes. Now we move on to another definition. Example: what is up. This is getting so? Example: what. tiring. What is the time? Example: It detects!.");

            // Suppose we want to extract all last names from the input string.
            session.AddConstraints(
                new SequenceExample(input, new[]
            {
                input.Slice(48, 53),    // input => "Carrie"
                input.Slice(80, 83),    // input => "Leonard"
                input.Slice(132, 142),
                input.Slice(173, 177),
            })
                );

            SequenceProgram topRankedProg = session.Learn();

            if (topRankedProg == null)
            {
                Console.Error.WriteLine("Error: Learning fails!");
                return;
            }

            foreach (StringRegion r in topRankedProg.Run(input))
            {
                string output = r != null ? r.Value : "null";
                Console.WriteLine(output);
            }
            Console.WriteLine("\n\nDone.");
        }