static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Product ID: ");
                var      inputIdArray    = new List <int>();
                string   input           = Console.ReadLine();
                string[] inputIdStrArray = Regex.Split(input, " ");
                foreach (var st in inputIdStrArray)
                {
                    int id;
                    if (!Int32.TryParse(st, out id) || !repo.ContainsKey(id))
                    {
                        Console.WriteLine($"Product {st} doesn't exist.");
                        continue;
                    }
                    Console.WriteLine($"Input product: {st} {repo[id].Name}");
                    inputIdArray.Add(id);
                }
                ;

                Console.WriteLine("Recommended products (top 10): ");

                var rule1      = new TopSales();
                var rule2      = new TopScore();
                var rule3      = new SameCategory();
                var ruleConfig = new RuleConfigBuilder().AddRuleToConfig("FMCG", (rule1, 0.5f), (rule2, 0.2f), (rule3, 0.3f))
                                 .AddRuleToConfig("Electronics", (rule1, 0.1f), (rule2, 0.3f), (rule3, 0.6f))
                                 .AddRuleToConfig("Fashion", (rule2, 0.1f), (rule3, 0.9f));

                var engine      = new Engine(ruleConfig.GetConfig(), repo);
                var recommended = engine.Run(inputIdArray);

                foreach (var item in recommended.Take(10))
                {
                    var    pid         = item.ProductId;
                    byte[] nameInBytes = JsonSerializer.SerializeToUtf8Bytes <string>(repo[pid].Name);
                    var    name        = JsonSerializer.Deserialize <string>(nameInBytes);
                    var    score       = item.RuleWeightSum;
                    var    rules       = JsonSerializer.Serialize(item.Rules);
                    Console.WriteLine($"ID {pid} {name}, {repo[pid].Category}, ${repo[pid].Price}, recommendation score {score}, recommendation rules {rules}");
                }
                Console.WriteLine("-------");
            }
        }
Beispiel #2
0
        private void LoadConfig()
        {
            string configPath = AppDomain.CurrentDomain.BaseDirectory + CONFIG_FILE_NAME;

            if (File.Exists(configPath))
            {
                _configs = RuleConfigBuilder.GetConfigs(configPath);
                return;
            }

            configPath = Path.GetFullPath("../..") + CONFIG_FILE_NAME;
            if (File.Exists(configPath))
            {
                _configs = RuleConfigBuilder.GetConfigs(configPath);
                return;
            }

            throw new Exception("No rule config file found.");
        }
Beispiel #3
0
 public Collection(string configPath, Func <ICollectListener> collectListener = null) : this(RuleConfigBuilder.GetConfigs(configPath), collectListener)
 {
 }