public Product RecommendProductItemBased(Order order, ISimilarityCalculable calculable, int kNearest) { var itemData = GetItemData(); var currentPurchase = ConvertToPurchaseData(order); for (int i = 0; i < itemData.Count; i++) { var data1 = itemData[i]; for (int j = 0; j < itemData.Count; j++) { var similarity = new ItemSimilarity(); similarity.ProductId = itemData[j].ProductId; var data2 = itemData[j]; if (j != i) { similarity.Similarity = calculable.CalculateSimilarity(data1.PurchasedByCustomer, data2.PurchasedByCustomer); } data1.SimilarityVector.Add(similarity); } } var result = FindRecommendationItemBased(itemData, currentPurchase, kNearest); if (result == -1) { return(null); } return(_products.ToList().SingleOrDefault(x => x.ProductId == result)); }
public Product RecommendProductUserBased(Order order, ISimilarityCalculable calculable, int kNearest) { var purchaseData = GetPurchaseData(); var data1 = ConvertToPurchaseData(order); foreach (var data2 in purchaseData) { if (data1.OrderID != data2.OrderID) { data2.Similarity = calculable.CalculateSimilarity(data1.Data, data2.Data); } } var result = FindRecommendationUserBased(purchaseData, data1, kNearest); if (result == -1) { return(null); } return(_products.ToList().SingleOrDefault(x => x.ProductId == result)); }