Beispiel #1
0
 public override Pullenti.Ner.ReferentToken ProcessReferent(Pullenti.Ner.Token begin, Pullenti.Ner.Token end)
 {
     Pullenti.Ner.Measure.Internal.MeasureToken mt = Pullenti.Ner.Measure.Internal.MeasureToken.TryParseMinimal(begin, null, true);
     if (mt != null)
     {
         List <Pullenti.Ner.ReferentToken> rts = mt.CreateRefenetsTokensWithRegister(null, true);
         if (rts != null)
         {
             return(rts[rts.Count - 1]);
         }
     }
     return(null);
 }
Beispiel #2
0
 public override void Process(Pullenti.Ner.Core.AnalysisKit kit)
 {
     Pullenti.Ner.Core.AnalyzerData     ad       = kit.GetAnalyzerData(this);
     Pullenti.Ner.Core.TerminCollection addunits = null;
     if (kit.Ontology != null)
     {
         addunits = new Pullenti.Ner.Core.TerminCollection();
         foreach (Pullenti.Ner.ExtOntologyItem r in kit.Ontology.Items)
         {
             UnitReferent uu = r.Referent as UnitReferent;
             if (uu == null)
             {
                 continue;
             }
             if (uu.m_Unit != null)
             {
                 continue;
             }
             foreach (Pullenti.Ner.Slot s in uu.Slots)
             {
                 if (s.TypeName == UnitReferent.ATTR_NAME || s.TypeName == UnitReferent.ATTR_FULLNAME)
                 {
                     addunits.Add(new Pullenti.Ner.Core.Termin(s.Value as string)
                     {
                         Tag = uu
                     });
                 }
             }
         }
     }
     for (Pullenti.Ner.Token t = kit.FirstToken; t != null; t = t.Next)
     {
         Pullenti.Ner.Measure.Internal.MeasureToken mt = Pullenti.Ner.Measure.Internal.MeasureToken.TryParseMinimal(t, addunits, false);
         if (mt == null)
         {
             mt = Pullenti.Ner.Measure.Internal.MeasureToken.TryParse(t, addunits, true, false, false, false);
         }
         if (mt == null)
         {
             continue;
         }
         List <Pullenti.Ner.ReferentToken> rts = mt.CreateRefenetsTokensWithRegister(ad, true);
         if (rts == null)
         {
             continue;
         }
         for (int i = 0; i < rts.Count; i++)
         {
             Pullenti.Ner.ReferentToken rt = rts[i];
             t.Kit.EmbedToken(rt);
             t = rt;
             for (int j = i + 1; j < rts.Count; j++)
             {
                 if (rts[j].BeginToken == rt.BeginToken)
                 {
                     rts[j].BeginToken = t;
                 }
                 if (rts[j].EndToken == rt.EndToken)
                 {
                     rts[j].EndToken = t;
                 }
             }
         }
     }
     if (kit.Ontology != null)
     {
         foreach (Pullenti.Ner.Referent e in ad.Referents)
         {
             UnitReferent u = e as UnitReferent;
             if (u == null)
             {
                 continue;
             }
             foreach (Pullenti.Ner.ExtOntologyItem r in kit.Ontology.Items)
             {
                 UnitReferent uu = r.Referent as UnitReferent;
                 if (uu == null)
                 {
                     continue;
                 }
                 bool ok = false;
                 foreach (Pullenti.Ner.Slot s in uu.Slots)
                 {
                     if (s.TypeName == UnitReferent.ATTR_NAME || s.TypeName == UnitReferent.ATTR_FULLNAME)
                     {
                         if (u.FindSlot(null, s.Value, true) != null)
                         {
                             ok = true;
                             break;
                         }
                     }
                 }
                 if (ok)
                 {
                     u.OntologyItems = new List <Pullenti.Ner.ExtOntologyItem>();
                     u.OntologyItems.Add(r);
                     break;
                 }
             }
         }
     }
 }