/// <summary> /// Creates a list of ExtractedResult which contain all the choices with /// their corresponding score where higher is more similar /// </summary> /// <param name="query"></param> /// <param name="choices"></param> /// <param name="processor"></param> /// <param name="scorer"></param> /// <param name="cutoff"></param> /// <returns></returns> public static IEnumerable <ExtractedResult <T> > ExtractAll <T>( T query, IEnumerable <T> choices, Func <T, string> processor, IRatioScorer scorer = null, int cutoff = 0) { if (scorer == null) { scorer = s_defaultScorer; } return(ResultExtractor.ExtractWithoutOrder(query, choices, processor, scorer, cutoff)); }
/// <summary> /// Find the single best match above a score in a list of choices. /// </summary> /// <param name="query"></param> /// <param name="choices"></param> /// <param name="processor"></param> /// <param name="scorer"></param> /// <param name="cutoff"></param> /// <returns></returns> public static ExtractedResult <T> ExtractOne <T>( T query, IEnumerable <T> choices, Func <T, string> processor, IRatioScorer scorer, int cutoff) { if (scorer == null) { scorer = s_defaultScorer; } return(ResultExtractor.ExtractOne(query, choices, processor, scorer, cutoff)); }
public void TestScoringEmptyString() { var scorerType = typeof(IRatioScorer); var scorerTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(s => s.GetTypes()).Where(p => scorerType.IsAssignableFrom(p) && p.IsClass && !p.IsAbstract); MethodInfo getScorerCacheMethodInfo = typeof(ScorerCache).GetMethod("Get"); string nullString = null; //Null doesnt seem to be handled by any scorer string emptyString = ""; string whitespaceString = " "; string[] nullOrWhitespaceStrings = { emptyString, whitespaceString }; foreach (Type t in scorerTypes) { System.Diagnostics.Debug.WriteLine($"Testing {t.Name}"); MethodInfo m = getScorerCacheMethodInfo.MakeGenericMethod(t); IRatioScorer scorer = m.Invoke(this, new object[] { }) as IRatioScorer; foreach (string s in nullOrWhitespaceStrings) { System.Diagnostics.Debug.WriteLine($"Testing string '{s}'"); try { scorer.Score(s, "TEST"); } catch (InvalidOperationException e) { Assert.Fail($"{t.Name}.score failed with empty string as first parameter"); } try { scorer.Score("TEST", s); } catch (InvalidOperationException e) { Assert.Fail($"{t.Name}.score failed with empty string as second parameter"); } try { scorer.Score(s, s); } catch (InvalidOperationException e) { Assert.Fail($"{t.Name}.score failed with empty string as both parameters"); } } } }
/// <summary> /// Find the single best match above a score in a list of choices. /// </summary> /// <param name="query"></param> /// <param name="choices"></param> /// <param name="processor"></param> /// <param name="scorer"></param> /// <param name="cutoff"></param> /// <returns></returns> public static ExtractedResult <string> ExtractOne( string query, IEnumerable <string> choices, Func <string, string> processor = null, IRatioScorer scorer = null, int cutoff = 0) { if (processor == null) { processor = s_defaultStringProcessor; } if (scorer == null) { scorer = s_defaultScorer; } return(ResultExtractor.ExtractOne(query, choices, processor, scorer, cutoff)); }
/// <summary> /// Creates a sorted list of ExtractedResult which contain the /// top limit most similar choices /// </summary> /// <param name="query"></param> /// <param name="choices"></param> /// <param name="processor"></param> /// <param name="scorer"></param> /// <param name="limit"></param> /// <param name="cutoff"></param> /// <returns></returns> public static IEnumerable <ExtractedResult <string> > ExtractTop( string query, IEnumerable <string> choices, Func <string, string> processor, IRatioScorer scorer, int limit, int cutoff) { if (processor == null) { processor = s_defaultStringProcessor; } if (scorer == null) { scorer = s_defaultScorer; } return(ResultExtractor.ExtractTop(query, choices, processor, scorer, limit, cutoff)); }
/// <summary> /// Creates a list of ExtractedResult which contain all the choices with /// their corresponding score where higher is more similar /// </summary> /// <param name="query"></param> /// <param name="choices"></param> /// <param name="processor"></param> /// <param name="scorer"></param> /// <param name="cutoff"></param> /// <returns></returns> public static IEnumerable <ExtractedResult <string> > ExtractAll( string query, IEnumerable <string> choices, Func <string, string> processor, IRatioScorer scorer, int cutoff) { if (processor == default(Func <string, string>)) { processor = s_defaultStringProcessor; } if (scorer == default(IRatioScorer)) { scorer = s_defaultScorer; } if (cutoff == default(int)) { cutoff = 0; } return(ResultExtractor.ExtractWithoutOrder(query, choices, processor, scorer, cutoff)); }
public static IEnumerable <ExtractedResult <T> > ExtractTop <T>(T query, IEnumerable <T> choices, Func <T, string> processor, IRatioScorer calculator, int limit, int cutoff = 0) { return(ExtractWithoutOrder(query, choices, processor, calculator, cutoff).MaxN(limit).Reverse()); }
public static IEnumerable <ExtractedResult <T> > ExtractSorted <T>(T query, IEnumerable <T> choices, Func <T, string> processor, IRatioScorer calculator, int cutoff = 0) { return(ExtractWithoutOrder(query, choices, processor, calculator, cutoff).OrderByDescending(r => r.Score)); }
public static ExtractedResult <T> ExtractOne <T>(T query, IEnumerable <T> choices, Func <T, string> processor, IRatioScorer calculator, int cutoff = 0) { return(ExtractWithoutOrder(query, choices, processor, calculator, cutoff).Max()); }
public static IEnumerable <ExtractedResult <T> > ExtractWithoutOrder <T>(T query, IEnumerable <T> choices, Func <T, string> processor, IRatioScorer scorer, int cutoff = 0) { int index = 0; var processedQuery = processor(query); foreach (var choice in choices) { double score = scorer.Score(processedQuery, processor(choice)); if (score >= cutoff) { yield return(new ExtractedResult <T>(choice, score, index)); } index++; } }
public void SetUp() { _scorer = ScorerCache.Get <TokenSetScorer>(); _partialScorer = ScorerCache.Get <PartialTokenSetScorer>(); }