Example #1
0
 /// <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);
 }
Example #2
0
 /// <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);
 }