Example #1
0
        internal static EntryProximity  EstimateProximity(List <long> Left, List <long> Right)
        {
            int            iLeft = 0, iRight = 0;
            EntryProximity Result = EntryProximity.Document;

            while ((iLeft < Left.Count) && (iRight < Right.Count))
            {
                long leftOff  = Left[iLeft];
                long rightOff = Right[iRight];

                if (MaskEncoder.Sentence(leftOff) == MaskEncoder.Sentence(rightOff))
                {
                    Result = EntryProximity.Sentence;
                    if (isPhraseProximity(MaskEncoder.TokenOrder(leftOff), MaskEncoder.TokenOrder(rightOff)))
                    {
                        Result = EntryProximity.Phrase;
                        break;
                    }
                }
                if (MaskEncoder.OffsetNormal(leftOff) < MaskEncoder.OffsetNormal(rightOff))
                {
                    iLeft++;
                }
                else
                {
                    iRight++;
                }
            }

            return(Result);
        }
Example #2
0
        private static List <long> JoinInstancesOfEntries(List <long> left, List <long> right,
                                                          EntryProximity requiredProximity)
        {
            List <long> joinedList = new List <long>();

            if (requiredProximity == EntryProximity.Phrase)
            {
                //  Assumption is made that all offsets in the entries are
                //  sorted in asceding order.

                int leftIndex = 0, rightIndex = 0;
                while (leftIndex < left.Count && rightIndex < right.Count)
                {
                    int order1 = MaskEncoder.TokenOrder(left[leftIndex]),
                        order2 = MaskEncoder.TokenOrder(right[rightIndex]);

                    if (ProximityEstimator.isPhraseProximity(order1, order2))
                    {
                        joinedList.Add(left[leftIndex]);
                        joinedList.Add(right[rightIndex]);
                    }
                    if (order1 < order2)
                    {
                        leftIndex++;
                    }
                    else
                    {
                        rightIndex++;
                    }
                }
            }
            else
            {
                joinedList.AddRange(left);
                joinedList.AddRange(right);
            }

            return(joinedList);
        }