Esempio n. 1
0
 static void _processBlock(Pullenti.Semantic.SemDocument res, Pullenti.Ner.AnalysisResult ar, Pullenti.Ner.Token t0, Pullenti.Ner.Token t1)
 {
     Pullenti.Semantic.SemBlock blk = new Pullenti.Semantic.SemBlock(res);
     for (Pullenti.Ner.Token t = t0; t != null && t.EndChar <= t1.EndChar; t = t.Next)
     {
         Pullenti.Ner.Token te = t;
         for (Pullenti.Ner.Token tt = t.Next; tt != null && tt.EndChar <= t1.EndChar; tt = tt.Next)
         {
             if (Pullenti.Ner.Core.MiscHelper.CanBeStartOfSentence(tt))
             {
                 break;
             }
             else
             {
                 te = tt;
             }
         }
         _processSentence(blk, ar, t, te);
         t = te;
     }
     if (blk.Fragments.Count > 0)
     {
         res.Blocks.Add(blk);
     }
 }
Esempio n. 2
0
 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);
             }
         }
     }
 }
Esempio n. 3
0
        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);
        }