Exemplo n.º 1
0
 /// <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));
 }
Exemplo n.º 2
0
 /// <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));
 }
Exemplo n.º 3
0
        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");
                    }
                }
            }
        }
Exemplo n.º 4
0
 /// <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));
 }
Exemplo n.º 5
0
 /// <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));
 }
Exemplo n.º 6
0
 /// <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));
 }
Exemplo n.º 7
0
 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());
 }
Exemplo n.º 8
0
 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));
 }
Exemplo n.º 9
0
 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());
 }
Exemplo n.º 10
0
        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++;
            }
        }
Exemplo n.º 11
0
 public void SetUp()
 {
     _scorer        = ScorerCache.Get <TokenSetScorer>();
     _partialScorer = ScorerCache.Get <PartialTokenSetScorer>();
 }