public override bool Probe(string sentence)
        {
            var thesaurus = StaticResources.GetInstance()?.Database?.Thesaurus;

            var m = GetR3MShareEntity(sentence);

            if (m == null)
            {
                m = GetMonthlyShareEntity(sentence);
            }
            if (m == null)
            {
                m = GetR2MShareEntity(sentence);
            }
            if (m != null)
            {
                this.ruleEngine  = new CASharesRuleEngine(m);
                this.chartEngine = new CASharesChartEngine();
                return(true);
            }
            else
            {
                var entity = new R2MShare();
                m = new RecognizedEntity
                {
                    Entity          = entity, //default
                    Index           = -1,     //a -1 index indicates the entity is added virtually
                    RecognizedName  = entity.DomainName,
                    RecognizedValue = entity.DomainName
                };
                this.ruleEngine  = new CASharesRuleEngine(m);
                this.chartEngine = new CASharesChartEngine();
                return(false); //yes, return false to let the caller know that it is not identified
            }
        }
        private RecognizedEntity GetR2MShareEntity(string sentence)
        {
            if (!String.IsNullOrWhiteSpace(sentence))
            {
                string pattern = @"^(((?=.*\brolling\b)(?=.*\b2\smonth(s)?\b))|(?=.*\bR2M\b))?(?=.*\bshare(s)?\b)?.*$";
                Match  match   = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase).Match(sentence);

                if (match.Success)
                {
                    var entity = new R2MShare();
                    return(new RecognizedEntity
                    {
                        Entity = entity,
                        Index = match.Index,
                        RecognizedName = entity.DomainName,
                        RecognizedValue = entity.DomainName
                    });
                }
            }

            return(null);
        }