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); } }