/// <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()); }
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); }
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(); }
/// <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()); }
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."); }