From e02333a54be86f158de190b8ff3544eb0089404c Mon Sep 17 00:00:00 2001 From: Enkidu93 Date: Mon, 30 Sep 2024 14:31:08 -0400 Subject: [PATCH] Add row filter text --- src/SIL.Machine/Corpora/CorporaExtensions.cs | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/SIL.Machine/Corpora/CorporaExtensions.cs b/src/SIL.Machine/Corpora/CorporaExtensions.cs index 7d974366e..1012c6cd9 100644 --- a/src/SIL.Machine/Corpora/CorporaExtensions.cs +++ b/src/SIL.Machine/Corpora/CorporaExtensions.cs @@ -209,6 +209,11 @@ public static ITextCorpus FilterTexts(this ITextCorpus corpus, Func return new TextFilterTextCorpus(corpus, predicate); } + public static ITextCorpus FilterTextRows(this ITextCorpus corpus, Func predicate) + { + return new RowFilterTextCorpus(corpus, predicate); + } + public static ITextCorpus WhereNonempty(this ITextCorpus corpus) { return corpus.Where(r => !r.IsEmpty); @@ -442,6 +447,29 @@ public override IEnumerable GetRows(IEnumerable textIds) } } + private class RowFilterTextCorpus : TextCorpusBase + { + private readonly ITextCorpus _corpus; + private readonly Func _predicate; + + public RowFilterTextCorpus(ITextCorpus corpus, Func predicate) + { + _corpus = corpus; + _predicate = predicate; + } + + public override IEnumerable Texts => _corpus.Texts; + + public override bool IsTokenized => _corpus.IsTokenized; + + public override ScrVers Versification => _corpus.Versification; + + public override IEnumerable GetRows(IEnumerable textIds) + { + return _corpus.GetRows(textIds ?? Texts.Select(t => t.Id)).Where(_predicate); + } + } + private class TakeTextCorpus : TextCorpusBase { private readonly ITextCorpus _corpus;