예제 #1
0
 /// <summary>
 /// Returns true if the specified span intersects with this span.
 /// </summary>
 /// <param name="span">
 /// The span to compare with this span. 
 /// </param>
 /// <returns>
 /// true is the spans overlap; false otherwise. 
 /// </returns>
 public bool Intersects(Span span)
 {
     int spanStart = span.Start;
     //either span's start is in this or this's start is in span
     return (this.Contains(span) || span.Contains(this) ||
         (mStart <= spanStart && spanStart < mEnd ||
         spanStart <= mStart && mStart < span.End));
 }
        private void AddNames(string tag, List<Span>names, Parse[] tokens, Parse lineParse)
        {
            for (int currentName = 0, nameCount = names.Count; currentName < nameCount; currentName++)
            {
                Span nameTokenSpan = names[currentName];
                Parse startToken = tokens[nameTokenSpan.Start];
                Parse endToken = tokens[nameTokenSpan.End];
                Parse commonParent = startToken.GetCommonParent(endToken);

                if (commonParent != null)
                {
                    Span nameSpan = new Span(startToken.Span.Start, endToken.Span.End);
                    if (nameSpan.Equals(commonParent.Span))
                    {

                        commonParent.Insert(new Parse(commonParent.Text, nameSpan, tag, 1.0));
                    }
                    else
                    {
                        Parse[] kids = commonParent.GetChildren();
                        bool crossingKids = false;
                        for (int currentKid = 0, kidCount = kids.Length; currentKid < kidCount; currentKid++)
                        {
                            if (nameSpan.Crosses(kids[currentKid].Span))
                            {
                                crossingKids = true;
                            }
                        }
                        if (!crossingKids)
                        {
                            commonParent.Insert(new Parse(commonParent.Text, nameSpan, tag, 1.0));
                        }
                        else
                        {
                            if (commonParent.Type == "NP")
                            {
                                Parse[] grandKids = kids[0].GetChildren();
                                if (grandKids.Length > 1 && nameSpan.Contains(grandKids[grandKids.Length - 1].Span))
                                {
                                    commonParent.Insert(new Parse(commonParent.Text, commonParent.Span, tag, 1.0));
                                }
                            }
                        }
                    }

                }
            }
        }
예제 #3
0
 /// <summary>
 /// Returns true if the specified span crosses this span.
 /// </summary>
 /// <param name="span">
 /// The span to compare with this span.
 /// </param>
 /// <returns>
 /// true if the specified span overlaps this span and contains a non-overlapping section; false otherwise.
 /// </returns>
 public bool Crosses(Span span)
 {
     int spanStart = span.Start;
     //either span's Start is in this or this's Start is in span
     return (!this.Contains(span) && !span.Contains(this) &&
         (mStart <= spanStart && spanStart < mEnd ||
         spanStart <= mStart && mStart < span.End));
 }