public static void Optimize(Pullenti.Semantic.SemDocument doc, Pullenti.Semantic.SemProcessParams pars) { foreach (Pullenti.Semantic.SemBlock blk in doc.Blocks) { foreach (Pullenti.Semantic.SemFragment fr in blk.Fragments) { _optimizeGraph(fr.Graph); } List <Pullenti.Semantic.SemObject> objs = new List <Pullenti.Semantic.SemObject>(); objs.AddRange(blk.Graph.Objects); foreach (Pullenti.Semantic.SemFragment fr in blk.Fragments) { objs.AddRange(fr.Graph.Objects); } foreach (Pullenti.Semantic.SemFragment fr in blk.Fragments) { for (int i = fr.Graph.Links.Count - 1; i >= 0; i--) { Pullenti.Semantic.SemLink li = fr.Graph.Links[i]; if (!objs.Contains(li.Source) || !objs.Contains(li.Target)) { fr.Graph.RemoveLink(li); } } _processParticiples(fr.Graph); _processLinks(fr.Graph); } _sortObjects(objs); _processPointers(objs); _processFormulas(objs); if (pars.DontCreateAnafor) { } else { AnaforHelper.ProcessAnafors(objs); foreach (Pullenti.Semantic.SemFragment fr in blk.Fragments) { _collapseAnafors(fr.Graph); } } } }
public static Pullenti.Semantic.SemDocument Process(Pullenti.Ner.AnalysisResult ar, Pullenti.Semantic.SemProcessParams pars) { Pullenti.Semantic.SemDocument txt = new Pullenti.Semantic.SemDocument(); for (Pullenti.Ner.Token t = ar.FirstToken; t != null; t = t.Next) { t.Tag = null; } if (pars.Progress != null) { pars.Progress(null, new ProgressChangedEventArgs(0, null)) /* error */; } int pers0 = 0; for (Pullenti.Ner.Token t = ar.FirstToken; t != null; t = t.Next) { if (pars.Progress != null) { int p = t.BeginChar; if (ar.Sofa.Text.Length < 100000) { p = (p * 100) / ar.Sofa.Text.Length; } else { p /= ((ar.Sofa.Text.Length / 100)); } if (p != pers0) { pers0 = p; pars.Progress(null, new ProgressChangedEventArgs(p, null)) /* error */; } } Pullenti.Ner.Token t1 = t; for (Pullenti.Ner.Token tt = t.Next; tt != null; tt = tt.Next) { if (tt.IsNewlineBefore) { if (Pullenti.Ner.Core.MiscHelper.CanBeStartOfSentence(tt)) { break; } } t1 = tt; } try { _processBlock(txt, ar, t, t1); } catch (Exception ex) { } t = t1; if (pars.MaxChar > 0 && t.EndChar > pars.MaxChar) { break; } } OptimizerHelper.Optimize(txt, pars); if (pars.Progress != null) { pars.Progress(null, new ProgressChangedEventArgs(100, null)) /* error */; } return(txt); }