/// <summary> /// Добавить аннотацию /// </summary> /// <param name="anno">аннотация</param> public void AddOccurence(TextAnnotation anno) { foreach (TextAnnotation l in Occurrence) { Pullenti.Ner.Core.Internal.TextsCompareType typ = l.CompareWith(anno); if (typ == Pullenti.Ner.Core.Internal.TextsCompareType.Noncomparable) { continue; } if (typ == Pullenti.Ner.Core.Internal.TextsCompareType.Equivalent || typ == Pullenti.Ner.Core.Internal.TextsCompareType.Contains) { return; } if (typ == Pullenti.Ner.Core.Internal.TextsCompareType.In || typ == Pullenti.Ner.Core.Internal.TextsCompareType.Intersect) { l.Merge(anno); return; } } if (anno.OccurenceOf != this && anno.OccurenceOf != null) { anno = new TextAnnotation() { BeginChar = anno.BeginChar, EndChar = anno.EndChar, Sofa = anno.Sofa } } ; if (m_Occurrence == null) { m_Occurrence = new List <TextAnnotation>(); } anno.OccurenceOf = this; if (m_Occurrence.Count == 0) { anno.EssentialForOccurence = true; m_Occurrence.Add(anno); return; } if (anno.BeginChar < m_Occurrence[0].BeginChar) { m_Occurrence.Insert(0, anno); return; } if (anno.BeginChar >= m_Occurrence[m_Occurrence.Count - 1].BeginChar) { m_Occurrence.Add(anno); return; } for (int i = 0; i < (m_Occurrence.Count - 1); i++) { if (anno.BeginChar >= m_Occurrence[i].BeginChar && anno.BeginChar <= m_Occurrence[i + 1].BeginChar) { m_Occurrence.Insert(i + 1, anno); return; } } m_Occurrence.Add(anno); }
/// <summary> /// Проверка, что ссылки на элемент имеются на заданном участке текста /// </summary> /// <param name="beginChar">начальная позиция</param> /// <param name="endChar">конечная позиция</param> /// <return>да или нет</return> public bool CheckOccurence(int beginChar, int endChar) { foreach (TextAnnotation loc in Occurrence) { Pullenti.Ner.Core.Internal.TextsCompareType cmp = loc.Compare(beginChar, endChar); if (cmp != Pullenti.Ner.Core.Internal.TextsCompareType.Early && cmp != Pullenti.Ner.Core.Internal.TextsCompareType.Later && cmp != Pullenti.Ner.Core.Internal.TextsCompareType.Noncomparable) { return(true); } } return(false); }