private void Run(IEquatable <char>[][] sentences, IEquatable <char>[][] words, IMatcher <char> matcher, MatchingSummary summary) { var shifts = new List <int>(); var comparisons = new int[sentences.Length * words.Length]; for (int wI = 0; wI < words.Length; wI++) { matcher.Init(words[wI]); for (int sI = 0; sI < sentences.Length; sI++) { int steps = 0; matcher.Start(sentences[sI]); for (var step = matcher.Step(); !step.IsFinished; step = matcher.Step()) { steps++; if (!step.Matched) { shifts.Add(step.Shift.I - step.I); } } comparisons[wI * sentences.Length + sI] = steps; } } summary.AvgShiftLength = shifts.Average(); summary.AvgSteps = comparisons.Average(); }
private void GetMatcherResponse(IEquatable <char>[][] sentences, IEquatable <char>[][] words, MatchingSummary summary) { IMatcher <char> matcher; switch (summary.Matcher) { case Matcher.KMP: matcher = new KnuthMorrisPrattMatcher <char>(); break; case Matcher.BMH: matcher = new BoyerMooreHorspoolMatcher <char>(); break; case Matcher.BMHS: matcher = new BoyerMooreHorspoolSundayMatcher <char>(); break; case Matcher.BM: matcher = new BoyerMooreMatcher <char>(new BadCharacterRule <char>()); break; default: matcher = new NaiveMatcher <char>(); break; } Run(sentences, words, matcher, summary); }