Example #1
0
 // Заменить везде, где только возможно, старую сущность на новую (используется при объединении сущностей)
 public void ReplaceReferent(Pullenti.Ner.Referent oldReferent, Pullenti.Ner.Referent newReferent)
 {
     for (Pullenti.Ner.Token t = FirstToken; t != null; t = t.Next)
     {
         if (t is Pullenti.Ner.ReferentToken)
         {
             (t as Pullenti.Ner.ReferentToken).ReplaceReferent(oldReferent, newReferent);
         }
     }
     foreach (AnalyzerData d in m_Datas.Values)
     {
         foreach (Pullenti.Ner.Referent r in d.Referents)
         {
             foreach (Pullenti.Ner.Slot s in r.Slots)
             {
                 if (s.Value == oldReferent)
                 {
                     r.UploadSlot(s, newReferent);
                 }
             }
         }
         if (d.Referents.Contains(oldReferent))
         {
             d.Referents.Remove(oldReferent);
         }
     }
 }
Example #2
0
        public override bool CanBeEquals(Pullenti.Ner.Referent obj, Pullenti.Ner.Core.ReferentsEqualType typ)
        {
            DateRangeReferent dr = obj as DateRangeReferent;

            if (dr == null)
            {
                return(false);
            }
            if (DateFrom != null)
            {
                if (!DateFrom.CanBeEquals(dr.DateFrom, typ))
                {
                    return(false);
                }
            }
            else if (dr.DateFrom != null)
            {
                return(false);
            }
            if (DateTo != null)
            {
                if (!DateTo.CanBeEquals(dr.DateTo, typ))
                {
                    return(false);
                }
            }
            else if (dr.DateTo != null)
            {
                return(false);
            }
            return(true);
        }
Example #3
0
 static bool canBeRef(NamedEntityKind ki, Pullenti.Ner.Referent re)
 {
     if (re == null)
     {
         return(false);
     }
     if (ki == NamedEntityKind.Monument)
     {
         if (re.TypeName == "PERSON" || re.TypeName == "PERSONPROPERTY")
         {
             return(true);
         }
     }
     else if (ki == NamedEntityKind.Location)
     {
         if (re is Pullenti.Ner.Geo.GeoReferent)
         {
             Pullenti.Ner.Geo.GeoReferent geo = re as Pullenti.Ner.Geo.GeoReferent;
             if (geo.IsRegion || geo.IsState)
             {
                 return(true);
             }
         }
     }
     else if (ki == NamedEntityKind.Building)
     {
         if (re.TypeName == "ORGANIZATION")
         {
             return(true);
         }
     }
     return(false);
 }
Example #4
0
        /// <summary>
        /// Проверка, что дата или диапазон определены с точностью до одного месяца
        /// </summary>
        public static bool IsMonthDefined(Pullenti.Ner.Referent obj)
        {
            DateReferent sd = obj as DateReferent;

            if (sd != null)
            {
                return(sd.Year > 0 && sd.Month > 0);
            }
            DateRangeReferent sdr = obj as DateRangeReferent;

            if (sdr != null)
            {
                if (sdr.DateFrom == null || sdr.DateTo == null)
                {
                    return(false);
                }
                if (sdr.DateFrom.Year == 0 || sdr.DateTo.Year != sdr.DateFrom.Year)
                {
                    return(false);
                }
                if (sdr.DateFrom.Month == 0 || sdr.DateTo.Month != sdr.DateFrom.Month)
                {
                    return(false);
                }
                return(true);
            }
            return(false);
        }
Example #5
0
        public override bool CanBeEquals(Pullenti.Ner.Referent obj, Pullenti.Ner.Core.ReferentsEqualType typ = Pullenti.Ner.Core.ReferentsEqualType.WithinOneText)
        {
            PersonIdentityReferent id = obj as PersonIdentityReferent;

            if (id == null)
            {
                return(false);
            }
            if (Typ != id.Typ)
            {
                return(false);
            }
            if (Number != id.Number)
            {
                return(false);
            }
            if (State != null && id.State != null)
            {
                if (State != id.State)
                {
                    return(false);
                }
            }
            return(true);
        }
Example #6
0
        public override void MergeSlots(Pullenti.Ner.Referent obj, bool mergeStatistic = true)
        {
            base.MergeSlots(obj, mergeStatistic);
            List <TransportKind> kinds = new List <TransportKind>();

            foreach (Pullenti.Ner.Slot s in Slots)
            {
                if (s.TypeName == ATTR_KIND)
                {
                    TransportKind ki = this._getKind((string)s.Value);
                    if (!kinds.Contains(ki))
                    {
                        kinds.Add(ki);
                    }
                }
            }
            if (kinds.Count > 0)
            {
                if (kinds.Contains(TransportKind.Space))
                {
                    for (int i = Slots.Count - 1; i >= 0; i--)
                    {
                        if (Slots[i].TypeName == ATTR_KIND && this._getKind((string)Slots[i].Value) != TransportKind.Space)
                        {
                            Slots.RemoveAt(i);
                        }
                    }
                }
            }
        }
Example #7
0
 /// <summary>
 /// Удалить сущность из списка
 /// </summary>
 /// <param name="r">удаляемая сущность</param>
 public virtual void RemoveReferent(Pullenti.Ner.Referent r)
 {
     if (m_Referents.Contains(r))
     {
         m_Referents.Remove(r);
     }
 }
Example #8
0
        public override bool CanBeEquals(Pullenti.Ner.Referent obj, Pullenti.Ner.Core.ReferentsEqualType typ = Pullenti.Ner.Core.ReferentsEqualType.WithinOneText)
        {
            BookLinkRefReferent r = obj as BookLinkRefReferent;

            if (r == null)
            {
                return(false);
            }
            if (Book != r.Book)
            {
                return(false);
            }
            if (Number != r.Number)
            {
                return(false);
            }
            if (Pages != r.Pages)
            {
                return(false);
            }
            if ((Typ == BookLinkRefType.Inline) != (r.Typ == BookLinkRefType.Inline))
            {
                return(false);
            }
            return(true);
        }
Example #9
0
        public override string ToString(bool shortVariant, Pullenti.Morph.MorphLang lang, int lev = 0)
        {
            StringBuilder res = new StringBuilder();
            string        typ = this.GetStringValue(ATTR_TYPE);

            if (typ != null)
            {
                res.Append(typ);
            }
            string name = this.GetStringValue(ATTR_NAME);

            if (name != null)
            {
                if (res.Length > 0)
                {
                    res.Append(' ');
                }
                res.Append(Pullenti.Ner.Core.MiscHelper.ConvertFirstCharUpperAndOtherLower(name));
            }
            Pullenti.Ner.Referent re = this.GetSlotValue(ATTR_REF) as Pullenti.Ner.Referent;
            if (re != null)
            {
                if (res.Length > 0)
                {
                    res.Append("; ");
                }
                res.Append(re.ToString(shortVariant, lang, lev + 1));
            }
            return(res.ToString());
        }
Example #10
0
        public override bool CanBeGeneralFor(Pullenti.Ner.Referent obj)
        {
            if (!this._canBeEqual(obj, Pullenti.Ner.Core.ReferentsEqualType.WithinOneText, true))
            {
                return(false);
            }
            PhoneReferent ph = obj as PhoneReferent;

            if (CountryCode != null && ph.CountryCode == null)
            {
                return(false);
            }
            if (AddNumber == null)
            {
                if (ph.AddNumber != null)
                {
                    return(true);
                }
            }
            else if (ph.AddNumber == null)
            {
                return(false);
            }
            if (Pullenti.Morph.LanguageHelper.EndsWith(ph.Number, Number))
            {
                return(true);
            }
            return(false);
        }
Example #11
0
        public override void MergeSlots(Pullenti.Ner.Referent obj, bool mergeStatistic = true)
        {
            base.MergeSlots(obj, mergeStatistic);
            for (int i = 0; i < (Slots.Count - 1); i++)
            {
                for (int j = i + 1; j < Slots.Count; j++)
                {
                    if (Slots[i].TypeName == Slots[j].TypeName && Slots[i].Value == Slots[j].Value)
                    {
                        Slots.RemoveAt(j);
                        j--;
                    }
                }
            }
            List <string> nums = this.GetStringValues(ATTR_NUMBER);

            if (nums.Count > 1)
            {
                nums.Sort();
                for (int i = 0; i < (nums.Count - 1); i++)
                {
                    if (nums[i + 1].StartsWith(nums[i]) && nums[i + 1].Length > nums[i].Length && !char.IsDigit(nums[i + 1][nums[i].Length]))
                    {
                        Pullenti.Ner.Slot s = this.FindSlot(ATTR_NUMBER, nums[i], true);
                        if (s != null)
                        {
                            Slots.Remove(s);
                        }
                        nums.RemoveAt(i);
                        i--;
                    }
                }
            }
        }
Example #12
0
        public override bool CanBeEquals(Pullenti.Ner.Referent obj, Pullenti.Ner.Core.ReferentsEqualType typ = Pullenti.Ner.Core.ReferentsEqualType.WithinOneText)
        {
            MoneyReferent s = obj as MoneyReferent;

            if (s == null)
            {
                return(false);
            }
            if (s.Currency != Currency)
            {
                return(false);
            }
            if (s.Value != Value)
            {
                return(false);
            }
            if (s.Rest != Rest)
            {
                return(false);
            }
            if (s.AltValue != AltValue)
            {
                return(false);
            }
            if (s.AltRest != AltRest)
            {
                return(false);
            }
            return(true);
        }
Example #13
0
        public override void MergeSlots(Pullenti.Ner.Referent obj, bool mergeStatistic = true)
        {
            string nam  = Name;
            string nam1 = (obj as PersonPropertyReferent).Name;

            base.MergeSlots(obj, mergeStatistic);
            if (nam != nam1 && nam1 != null && nam != null)
            {
                Pullenti.Ner.Slot s = null;
                if (nam.StartsWith(nam1))
                {
                    s = this.FindSlot(ATTR_NAME, nam1, true);
                }
                else if (nam1.StartsWith(nam))
                {
                    s = this.FindSlot(ATTR_NAME, nam, true);
                }
                else if (m_Bosses0.Contains(nam) && m_Bosses1.Contains(nam1))
                {
                    s = this.FindSlot(ATTR_NAME, nam, true);
                }
                else if (m_Bosses0.Contains(nam1) && m_Bosses1.Contains(nam))
                {
                    s = this.FindSlot(ATTR_NAME, nam1, true);
                }
                if (s != null)
                {
                    Slots.Remove(s);
                }
            }
        }
Example #14
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     Pullenti.Ner.Person.PersonPropertyKind ki = Pullenti.Ner.Person.PersonPropertyKind.Undefined;
     if (obj is Pullenti.Ner.Person.PersonPropertyReferent)
     {
         ki = (obj as Pullenti.Ner.Person.PersonPropertyReferent).Kind;
     }
     if (ki == Pullenti.Ner.Person.PersonPropertyKind.Boss)
     {
         return(PersonPropBossImageId);
     }
     if (ki == Pullenti.Ner.Person.PersonPropertyKind.King)
     {
         return(PersonPropKingImageId);
     }
     if (ki == Pullenti.Ner.Person.PersonPropertyKind.Kin)
     {
         return(PersonPropKinImageId);
     }
     if (ki == Pullenti.Ner.Person.PersonPropertyKind.MilitaryRank)
     {
         return(PersonPropMilitaryId);
     }
     if (ki == Pullenti.Ner.Person.PersonPropertyKind.Nationality)
     {
         return(PersonPropNationId);
     }
     return(PersonPropImageId);
 }
Example #15
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     Pullenti.Ner.Geo.GeoReferent ter = obj as Pullenti.Ner.Geo.GeoReferent;
     if (ter != null)
     {
         if (ter.IsUnion)
         {
             return(UnionImageId);
         }
         if (ter.IsCity && ((ter.IsState || ter.IsRegion)))
         {
             return(CountryCityImageId);
         }
         if (ter.IsState)
         {
             return(CountryImageId);
         }
         if (ter.IsCity)
         {
             return(CityImageId);
         }
         if (ter.IsRegion && ter.Higher != null && ter.Higher.IsCity)
         {
             return(DistrictImageId);
         }
         if (ter.IsTerritory)
         {
             return(TerrImageId);
         }
     }
     return(RegionImageId);
 }
Example #16
0
 // Проверить, что все элементы находятся на более низком уровне, чем у аргумента
 internal bool IsAllItemsLessLevel(Pullenti.Ner.Referent upperParts, bool ignoreEquals)
 {
     if (upperParts is DecreeReferent)
     {
         return(true);
     }
     foreach (Pullenti.Ner.Slot s in Slots)
     {
         int l = this._getLevel(s.TypeName);
         if (l < 0)
         {
             continue;
         }
         if (upperParts.FindSlot(s.TypeName, null, true) != null)
         {
             if (upperParts.FindSlot(s.TypeName, s.Value, true) == null)
             {
                 return(false);
             }
             continue;
         }
         foreach (Pullenti.Ner.Slot ss in upperParts.Slots)
         {
             int ll = this._getLevel(ss.TypeName);
             if (ll >= l)
             {
                 return(false);
             }
         }
     }
     return(true);
 }
Example #17
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     if (obj is Pullenti.Ner.Named.NamedEntityReferent)
     {
         return((obj as Pullenti.Ner.Named.NamedEntityReferent).Kind.ToString());
     }
     return(ImageId);
 }
Example #18
0
 public override void MergeSlots(Pullenti.Ner.Referent obj, bool mergeStatistic = true)
 {
     base.MergeSlots(obj, mergeStatistic);
     if (Owner != null && LocalTyp != null)
     {
         LocalTyp = null;
     }
 }
Example #19
0
        public List <Pullenti.Ner.Referent> TryAttachByReferent(Pullenti.Ner.Referent referent, IntOntologyItem item = null, bool mustBeSingle = false)
        {
            if (referent == null)
            {
                return(null);
            }
            if (item == null)
            {
                item = referent.CreateOntologyItem();
            }
            if (item == null)
            {
                return(null);
            }
            List <IntOntologyItem> li = this.TryAttachByItem(item);

            if (li == null)
            {
                return(null);
            }
            List <Pullenti.Ner.Referent> res = null;

            foreach (IntOntologyItem oi in li)
            {
                Pullenti.Ner.Referent r = oi.Referent ?? (oi.Tag as Pullenti.Ner.Referent);
                if (r != null)
                {
                    if (referent.CanBeEquals(r, ReferentsEqualType.WithinOneText))
                    {
                        if (res == null)
                        {
                            res = new List <Pullenti.Ner.Referent>();
                        }
                        if (!res.Contains(r))
                        {
                            res.Add(r);
                        }
                    }
                }
            }
            if (mustBeSingle)
            {
                if (res != null && res.Count > 1)
                {
                    for (int i = 0; i < (res.Count - 1); i++)
                    {
                        for (int j = i + 1; j < res.Count; j++)
                        {
                            if (!res[i].CanBeEquals(res[j], ReferentsEqualType.ForMerging))
                            {
                                return(null);
                            }
                        }
                    }
                }
            }
            return(res);
        }
Example #20
0
        public override bool CanBeEquals(Pullenti.Ner.Referent obj, Pullenti.Ner.Core.ReferentsEqualType typ)
        {
            UriReferent uri = obj as UriReferent;

            if (uri == null)
            {
                return(false);
            }
            return(string.Compare(Value, uri.Value, true) == 0);
        }
Example #21
0
        public override void MergeSlots(Pullenti.Ner.Referent obj, bool mergeStatistic = true)
        {
            double r1 = Rank + (obj as KeywordReferent).Rank;

            base.MergeSlots(obj, mergeStatistic);
            if (Slots.Count > 50)
            {
            }
            Rank = r1;
        }
Example #22
0
        public override string ToString(bool shortVariant, Pullenti.Morph.MorphLang lang = null, int lev = 0)
        {
            StringBuilder res = new StringBuilder();
            GoodAttrType  typ = Typ;
            string        nam = this.GetStringValue(ATTR_NAME);

            if (!shortVariant)
            {
                if (typ != GoodAttrType.Undefined)
                {
                    res.AppendFormat("{0}{1}: ", Pullenti.Ner.Goods.Internal.AttrMeta.GlobalMeta.TypAttr.ConvertInnerValueToOuterValue(typ.ToString(), lang), (nam == null ? "" : string.Format(" ({0})", nam.ToLower())));
                }
            }
            string s = this.GetStringValue(ATTR_VALUE);

            if (s != null)
            {
                if (typ == GoodAttrType.Keyword || typ == GoodAttrType.Character)
                {
                    res.Append(s.ToLower());
                }
                else if (typ == GoodAttrType.Numeric)
                {
                    List <string> vals  = Values;
                    List <string> units = Units;
                    for (int i = 0; i < vals.Count; i++)
                    {
                        if (i > 0)
                        {
                            res.Append(" x ");
                        }
                        res.Append(vals[i]);
                        if (vals.Count == units.Count)
                        {
                            res.Append(units[i].ToLower());
                        }
                        else if (units.Count > 0)
                        {
                            res.Append(units[0].ToLower());
                        }
                    }
                }
                else
                {
                    res.Append(s);
                }
            }
            Pullenti.Ner.Referent re = Ref;
            if (re != null)
            {
                res.Append(re.ToString(shortVariant, lang, 0));
            }
            return(res.ToString());
        }
Example #23
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     if (obj is Pullenti.Ner.Date.DateRangeReferent)
     {
         if ((obj as Pullenti.Ner.Date.DateRangeReferent).IsRelative)
         {
             return(DateRangeRelImageId);
         }
     }
     return(DateRangeImageId);
 }
Example #24
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     if (obj is Pullenti.Ner.Definition.DefinitionReferent)
     {
         Pullenti.Ner.Definition.DefinitionKind ki = (obj as Pullenti.Ner.Definition.DefinitionReferent).Kind;
         if (ki == Pullenti.Ner.Definition.DefinitionKind.Definition)
         {
             return(ImageDefId);
         }
     }
     return(ImageAssId);
 }
Example #25
0
        public override bool CanBeEquals(Pullenti.Ner.Referent obj, Pullenti.Ner.Core.ReferentsEqualType typ)
        {
            DateReferent sd = obj as DateReferent;

            if (sd == null)
            {
                return(false);
            }
            if (sd.IsRelative != IsRelative)
            {
                return(false);
            }
            if (sd.Century != Century)
            {
                return(false);
            }
            if (sd.Year != Year)
            {
                return(false);
            }
            if (sd.Month != Month)
            {
                return(false);
            }
            if (sd.Day != Day)
            {
                return(false);
            }
            if (sd.Hour != Hour)
            {
                return(false);
            }
            if (sd.Minute != Minute)
            {
                return(false);
            }
            if (sd.Second != Second)
            {
                return(false);
            }
            if (sd.Pointer != Pointer)
            {
                return(false);
            }
            if (sd.DayOfWeek > 0 && DayOfWeek > 0)
            {
                if (sd.DayOfWeek != DayOfWeek)
                {
                    return(false);
                }
            }
            return(true);
        }
Example #26
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     if (obj is Pullenti.Ner.Transport.TransportReferent)
     {
         Pullenti.Ner.Transport.TransportKind ok = (obj as Pullenti.Ner.Transport.TransportReferent).Kind;
         if (ok != Pullenti.Ner.Transport.TransportKind.Undefined)
         {
             return(ok.ToString());
         }
     }
     return(ImageId);
 }
Example #27
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     Pullenti.Ner.Decree.DecreePartReferent dpr = obj as Pullenti.Ner.Decree.DecreePartReferent;
     if (dpr != null)
     {
         if (dpr.Owner == null)
         {
             return(PartLocImageId);
         }
     }
     return(PartImageId);
 }
Example #28
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     Pullenti.Ner.Booklink.BookLinkRefReferent rr = obj as Pullenti.Ner.Booklink.BookLinkRefReferent;
     if (rr != null)
     {
         if (rr.Typ == Pullenti.Ner.Booklink.BookLinkRefType.Inline)
         {
             return(ImageIdInline);
         }
     }
     return(ImageId);
 }
Example #29
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     Pullenti.Ner.Uri.UriReferent web = obj as Pullenti.Ner.Uri.UriReferent;
     if (web != null && web.Scheme == "mailto")
     {
         return(MailImageId);
     }
     else
     {
         return(UriImageId);
     }
 }
Example #30
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     Pullenti.Ner.Money.MoneyReferent m = obj as Pullenti.Ner.Money.MoneyReferent;
     if (m != null)
     {
         if (m.AltValue != null || m.AltRest != null)
         {
             return(Image2Id);
         }
     }
     return(ImageId);
 }