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); }
public bool AddReferent(Pullenti.Ner.Referent referent) { if (referent == null) { return(false); } IntOntologyItem oi = null; if (referent.IntOntologyItem != null && referent.IntOntologyItem.Owner == this) { IntOntologyItem oi1 = referent.CreateOntologyItem(); if (oi1 == null || oi1.Termins.Count == referent.IntOntologyItem.Termins.Count) { return(true); } foreach (Termin t in referent.IntOntologyItem.Termins) { m_Termins.Remove(t); } int i = m_Items.IndexOf(referent.IntOntologyItem); if (i >= 0) { m_Items.RemoveAt(i); } oi = oi1; } else { oi = referent.CreateOntologyItem(); } if (oi == null) { return(false); } oi.Referent = referent; referent.IntOntologyItem = oi; this.AddItem(oi); return(true); }