Exemplo n.º 1
0
        public void Initialize()
        {
            if (this.isInitialized)
            {
                return;
            }
            this.isInitialized = true;

            var stringPatterns = stringPatternService.GetAllCachedStringPatterns().OrderByDescending(x => x.KnownScore).ToList();

            if (!stringPatterns.Any())
            {
                throw new Exception("No data to optimize.");
            }

            //var topStringPatterns = stringPatterns.Take(stringPatterns.Count / 10);
            //var bottomStringPatterns = stringPatterns.OrderBy(x => x.KnownScore).Take(stringPatterns.Count / 10);
            //this.testStringPatterns = topStringPatterns.Concat(bottomStringPatterns).ToList();
            this.testStringPatterns = stringPatterns;

            this.wordList =
                this.testStringPatterns.AsParallel()
                .SelectMany(x => x.Words)
                .GroupBy(x => x)
                .Where(
                    x =>
                    x.Key.Length > optimizerConfig.MinimumSingleWordLength && !optimizerConfig.ExcludeSingleWords.Contains(x.Key) &&
                    x.Count() >= optimizerConfig.MinimumSingleWordUsages)
                .Select(x => x.Key)
                .ToList();

            this.twoWordList   = this.testStringPatterns.AsParallel().SelectMany(x => x.DoubleWords).GroupBy(x => x).Where(x => x.Count() > optimizerConfig.MinimumDoubleWordUsages).Select(x => x.Key).ToList();
            this.threeWordList = this.testStringPatterns.AsParallel().SelectMany(x => x.TripleWords).GroupBy(x => x).Where(x => x.Count() > optimizerConfig.MinimumTripleWordUsages).Select(x => x.Key).ToList();
        }