コード例 #1
0
 public static void CalculateTFIDF(SuggestorCollection collection, double numberOfCollections)
 {
     foreach (SuggestorCollectionLine line in collection.CollectionLines.Values)
     {
         line.Weight= ((1.0 + Math.Log(line.Quantity)) * Math.Log(numberOfCollections / line.Quantity));
     }
 }
コード例 #2
0
ファイル: TFIDF.cs プロジェクト: viktoreinars/Suggestor
        public override Dictionary<string, double> SuggestNItems(Dictionary<string, SuggestorCollection> collections, SuggestorCollection compareCollection, int n)
        {
            if (compareCollection.CollectionLines.Count == 0) return null;

            Dictionary<string, double> itemAggregation = new Dictionary<string, double>();

            // Find top similar collections
            Dictionary<SuggestorCollection, double> topCollections = SuggestNCollections(collections.Values.ToList(), compareCollection, n);

            foreach (SuggestorCollection collection in topCollections.Keys)
            {
                foreach (string itemNo in collection.CollectionLines.Keys)
                {
                    if (compareCollection.CollectionLines.ContainsKey(itemNo)) continue; // Ignore items that are already in basket
                    if (!(itemAggregation.ContainsKey(itemNo))) itemAggregation.Add(itemNo, 1);
                    itemAggregation[itemNo]++;
                    //itemAggregation[itemNo] += topInvoices[invoice] * 1.0;
                }
            }

            List<KeyValuePair<string, double>> itemAggregationList = itemAggregation.ToList();
            // Sort dictionary by value
            itemAggregationList.Sort((firstPair, nextPair) => { return firstPair.Value.CompareTo(nextPair.Value); });
            itemAggregationList.Reverse();
            itemAggregation = itemAggregationList.ToDictionary(pair => pair.Key, pair => pair.Value);
            return itemAggregation;
        }
コード例 #3
0
 /*
 public static double GetLimitedSize(SuggestorCollection collection, Dictionary<string, SuggestorCollectionLine> mutualCollectionLines)
 {
     double squaredSum = 0;
     foreach (string invoiceLineNo in mutualCollectionLines.Keys)
     {
         squaredSum += Math.Pow(collection.CollectionLines[invoiceLineNo].Weight, 2);
     }
     return Math.Sqrt(squaredSum);
 }
  */
 /*
 public static double GetLimitedSize(SuggestorUser user, Dictionary<string, SuggestorCollectionLine> mutualCollectionLines)
 {
     double squaredSum = 0;
     foreach (string invoiceLineNo in mutualCollectionLines.Keys)
     {
         squaredSum += Math.Pow(user.CollectionLines[invoiceLineNo].Weight, 2);
     }
     return Math.Sqrt(squaredSum);
 }
 */
 public static double GetSize(SuggestorCollection collection)
 {
     double squaredSum = 0;
     foreach (SuggestorCollectionLine line in collection.CollectionLines.Values)
     {
         squaredSum += Math.Pow(line.Weight, 2);
     }
     return Math.Sqrt(squaredSum);
 }
コード例 #4
0
 public static double CosineScore(SuggestorCollection collection, SuggestorCollection otherCollection)
 {
     // TF-IDF
     Dictionary<string, SuggestorCollectionLine> mutualAttributes = new Dictionary<string, SuggestorCollectionLine>();
     mutualAttributes = collection.CollectionLines.Keys.Intersect(otherCollection.CollectionLines.Keys).ToDictionary(t => t, t => collection.CollectionLines[t]);
     double cosScore = 0;
     double termProductSum = 0;
     foreach (string lineNo in mutualAttributes.Keys)
     {
         termProductSum += collection.CollectionLines[lineNo].Weight * otherCollection.CollectionLines[lineNo].Weight;
     }
     double vectorNormalizingMultiplication = (GetSize(collection) * GetSize(otherCollection));
     if (vectorNormalizingMultiplication == 0)
         return 0;
     cosScore = termProductSum / vectorNormalizingMultiplication;
     return cosScore;
 }
コード例 #5
0
ファイル: TFIDF.cs プロジェクト: viktoreinars/Suggestor
        public override Dictionary<SuggestorCollection, double> SuggestNCollections(List<SuggestorCollection> collections, SuggestorCollection compareCollection, int n)
        {
            // TODO: Disgusting code
            Dictionary<SuggestorCollection, double> topCollections = new Dictionary<SuggestorCollection, double>();
            List<SuggestorCollection> compareCollections = collections;
            compareCollections.Remove(compareCollection);
            // Calculate all weights
            // TODO: Cache this. Per instance?
            foreach (SuggestorCollection invoice in compareCollections)
            {
                topCollections.Add(invoice, SuggestorCollectionFunctions.CosineScore(invoice, compareCollection));
            }

            List<KeyValuePair<SuggestorCollection, double>> topValues = topCollections.ToList();
            topValues.Sort((firstPair, nextPair) => { return firstPair.Value.CompareTo(nextPair.Value); });
            topValues.Reverse();
            Dictionary<SuggestorCollection, double> returnInvoices = new Dictionary<SuggestorCollection, double>();
            for (int i = 0; i < n; i++)
            {
                if (topValues[i].Value != 0)
                    returnInvoices.Add(topValues[i].Key, topValues[i].Value);
            }
            return returnInvoices;
        }
コード例 #6
0
 public void Foo(SuggestorCollection collection)
 {
 }
コード例 #7
0
 public Dictionary<string, double> SuggestItems(SuggestorCollection compareCollection, int n)
 {
     return recommenderEngine.SuggestNItems(collections, compareCollection, n);
 }
コード例 #8
0
 public Dictionary<SuggestorCollection, double> SuggestCollections(List<SuggestorCollection> collectionsToCompareTo, SuggestorCollection compareCollection, int n)
 {
     return recommenderEngine.SuggestNCollections(collectionsToCompareTo, compareCollection, n);
 }
コード例 #9
0
        public static void PrintInvoice(SuggestorCollection collection)
        {
            Console.WriteLine("--------------------------");
            Console.WriteLine("Collection: " + collection.CollectionId);

            foreach (SuggestorCollectionLine line in collection.CollectionLines.Values)
            {
                Console.WriteLine("     " + line.Description + "    " + line.Quantity);
            }
            Console.WriteLine();
            Console.WriteLine();
        }
コード例 #10
0
 public abstract Dictionary<string, double> SuggestNItems(Dictionary<string, SuggestorCollection> collections, SuggestorCollection compareCollection, int n);
コード例 #11
0
 public abstract Dictionary<SuggestorCollection, double> SuggestNCollections(List<SuggestorCollection> collections, SuggestorCollection compareCollection, int n);