private IEnumerable <VerseRelation> ProcessVerseEntryInsideParagraph(
            VerseParsing.Models.VerseEntry verseEntry,
            int currentVerseIndex,
            LinkedListNode <ParagraphParseResultExt> paragraphNode)
        {
            var result = new List <VerseRelation>();

            for (var i = currentVerseIndex + 1; i < paragraphNode.Value.ParagraphResult.VerseEntries.Count; i++)
            {
                var verseRelations = verseEntry.VersePointer.SubVerses.Verses.SelectMany(v =>
                {
                    var relativeVerseEntry = paragraphNode.Value.ParagraphResult.VerseEntries[i];
                    return(relativeVerseEntry.VersePointer.SubVerses.Verses.Select(rv =>
                                                                                   new VerseRelation()
                    {
                        VerseId = v.GetVerseId(),
                        RelativeVerseId = rv.GetVerseId(),
                        DocumentParagraph = paragraphNode.Value.ParagraphResult.Paragraph,
                        DocumentParagraphId = paragraphNode.Value.ParagraphResult.Paragraph.Id,
                        RelativeDocumentParagraph = paragraphNode.Value.ParagraphResult.Paragraph,
                        RelativeDocumentParagraphId = paragraphNode.Value.ParagraphResult.Paragraph.Id,
                        RelationWeight = GetWithinParagraphRelationWeight(verseEntry, relativeVerseEntry)
                    }));
                });
                result.AddRange(verseRelations);
            }

            return(result);
        }
 private static IEnumerable <VerseRelation> ProcessVerseEntryInsideAllDocument(
     VerseParsing.Models.VerseEntry verseEntry,
     LinkedListNode <ParagraphParseResultExt> paragraphNode,
     IEnumerable <VerseRelation> paragraphVerseRelations)
 {
     return(paragraphVerseRelations.SelectMany(vr =>
     {
         return verseEntry.VersePointer.SubVerses.Verses.Select(v =>
         {
             var verseRelation = vr.Clone();
             verseRelation.VerseId = v.GetVerseId();
             return verseRelation;
         });
     }));
 }
        private static decimal GetWithinParagraphRelationWeight(VerseParsing.Models.VerseEntry verseEntry, VerseParsing.Models.VerseEntry relativeVerseEntry)
        {
            var distance = relativeVerseEntry.StartIndex - verseEntry.EndIndex;

            if (distance < 5)
            {
                return(1);
            }
            else if (distance < 50)
            {
                return(0.8M);
            }
            else
            {
                return(1M / distance * 40);
            }
        }