/// <summary>Read in static rating data from a TextReader</summary>
        /// <param name="reader">the <see cref="TextReader"/> to read from</param>
        /// <param name="size">the number of ratings in the file</param>
        /// <param name="user_mapping">mapping object for user IDs</param>
        /// <param name="item_mapping">mapping object for item IDs</param>
        /// <param name="rating_type">the data type to be used for storing the ratings</param>
        /// <param name="ignore_first_line">if true, ignore the first line</param>
        /// <returns>the rating data</returns>
        static public IRatings Read(
            TextReader reader, int size,
            IMapping user_mapping  = null, IMapping item_mapping = null,
            RatingType rating_type = RatingType.FLOAT,
            bool ignore_first_line = false)
        {
            if (user_mapping == null)
            {
                user_mapping = new IdentityMapping();
            }
            if (item_mapping == null)
            {
                item_mapping = new IdentityMapping();
            }
            if (ignore_first_line)
            {
                reader.ReadLine();
            }

            IRatings ratings;

            if (rating_type == RatingType.BYTE)
            {
                ratings = new StaticByteRatings(size);
            }
            else if (rating_type == RatingType.FLOAT)
            {
                ratings = new StaticRatings(size);
            }
            else
            {
                throw new FormatException(string.Format("Unknown rating type: {0}", rating_type));
            }

            string line;

            while ((line = reader.ReadLine()) != null)
            {
                if (line.Length == 0)
                {
                    continue;
                }

                string[] tokens = line.Split(Constants.SPLIT_CHARS);

                if (tokens.Length < 3)
                {
                    throw new FormatException("Expected at least 3 columns: " + line);
                }

                int   user_id = user_mapping.ToInternalID(tokens[0]);
                int   item_id = item_mapping.ToInternalID(tokens[1]);
                float rating  = float.Parse(tokens[2], CultureInfo.InvariantCulture);

                ratings.Add(user_id, item_id, rating);
            }
            ratings.InitScale();
            return(ratings);
        }
        public void TestFull()
        {
            var ratings = new StaticRatings(2);

            Assert.AreEqual(0, ratings.Count);
            ratings.Add(1, 4, 0.3f);
            Assert.AreEqual(1, ratings.Count);
            ratings.Add(1, 8, 0.2f);
            Assert.AreEqual(2, ratings.Count);
            ratings.Add(2, 4, 0.2f);
        }
        [Test()] public void TestMaxUserIDMaxItemID()
        {
            var ratings = new StaticRatings(7);

            ratings.Add(1, 4, 0.3f);
            ratings.Add(1, 8, 0.2f);
            ratings.Add(2, 4, 0.2f);
            ratings.Add(2, 2, 0.6f);
            ratings.Add(2, 5, 0.4f);
            ratings.Add(3, 7, 0.2f);
            ratings.Add(6, 3, 0.3f);

            Assert.AreEqual(6, ratings.MaxUserID);
            Assert.AreEqual(8, ratings.MaxItemID);
        }
        public void TestRemoveItem()
        {
            var ratings = new StaticRatings(7);

            ratings.Add(1, 4, 0.3f);
            ratings.Add(1, 8, 0.2f);
            ratings.Add(2, 4, 0.2f);
            ratings.Add(2, 2, 0.6f);
            ratings.Add(2, 5, 0.4f);
            ratings.Add(3, 4, 0.2f);
            ratings.Add(3, 3, 0.3f);

            Assert.AreEqual(7, ratings.Count);
            ratings.RemoveItem(4);
        }
        [Test()] public void TestMinRatingMaxRating()
        {
            var ratings = new StaticRatings(7);

            ratings.Add(1, 4, 0.3f);
            ratings.Add(1, 8, 0.2f);
            ratings.Add(2, 4, 0.2f);
            ratings.Add(2, 2, 0.6f);
            ratings.Add(2, 5, 0.4f);
            ratings.Add(3, 7, 0.2f);
            ratings.Add(6, 3, 0.3f);

            Assert.AreEqual(0.6f, ratings.Scale.Max);
            Assert.AreEqual(0.2f, ratings.Scale.Min);
        }
Пример #6
0
        public void TestRemoveUser()
        {
            var ratings = new StaticRatings(7);

            ratings.Add(1, 4, 0.3);
            ratings.Add(1, 8, 0.2);
            ratings.Add(2, 4, 0.2);
            ratings.Add(2, 2, 0.6);
            ratings.Add(2, 5, 0.4);
            ratings.Add(3, 7, 0.2);
            ratings.Add(3, 3, 0.3);

            Assert.AreEqual(7, ratings.Count);
            ratings.RemoveUser(2);
        }
        public void TestRemoveAt()
        {
            var ratings = new StaticRatings(8);

            ratings.Add(1, 4, 0.3f);
            ratings.Add(1, 8, 0.2f);
            ratings.Add(2, 4, 0.2f);
            ratings.Add(2, 2, 0.6f);
            ratings.Add(2, 5, 0.4f);
            ratings.Add(3, 7, 0.2f);
            ratings.Add(3, 3, 0.3f);
            ratings.Add(6, 3, 0.3f);

            Assert.AreEqual(8, ratings.Count);
            ratings.RemoveAt(ratings.GetIndex(2, 5));
        }
        [Test()] public void TestIndex()
        {
            var ratings = new StaticRatings(8);

            ratings.Add(1, 4, 0.3f);
            ratings.Add(1, 8, 0.2f);
            ratings.Add(2, 4, 0.2f);
            ratings.Add(2, 2, 0.6f);
            ratings.Add(2, 5, 0.4f);
            ratings.Add(3, 4, 0.2f);
            ratings.Add(3, 3, 0.3f);
            ratings.Add(6, 3, 0.3f);

            // test index[,]
            Assert.AreEqual(0.3f, ratings[1, 4]);
            Assert.AreEqual(0.2f, ratings[1, 8]);
            Assert.AreEqual(0.6f, ratings[2, 2]);
        }
Пример #9
0
        /// <summary>Read in static rating data from a TextReader</summary>
        /// <param name="reader">the <see cref="TextReader"/> to read from</param>
        /// <param name="size">the number of ratings in the file</param>
        /// <param name="user_mapping">mapping object for user IDs</param>
        /// <param name="item_mapping">mapping object for item IDs</param>
        /// <param name="rating_type">the data type to be used for storing the ratings</param>
        /// <returns>the rating data</returns>
        static public IRatings Read(TextReader reader, int size,
                                    IEntityMapping user_mapping, IEntityMapping item_mapping,
                                    RatingType rating_type)
        {
            IRatings ratings;

            if (rating_type == RatingType.BYTE)
            {
                ratings = new StaticByteRatings(size);
            }
            else if (rating_type == RatingType.FLOAT)
            {
                ratings = new StaticFloatRatings(size);
            }
            else
            {
                ratings = new StaticRatings(size);
            }

            var    split_chars = new char[] { '\t', ' ', ',' };
            string line;

            while ((line = reader.ReadLine()) != null)
            {
                if (line.Length == 0)
                {
                    continue;
                }

                string[] tokens = line.Split(split_chars);

                if (tokens.Length < 3)
                {
                    throw new IOException("Expected at least three columns: " + line);
                }

                int    user_id = user_mapping.ToInternalID(int.Parse(tokens[0]));
                int    item_id = item_mapping.ToInternalID(int.Parse(tokens[1]));
                double rating  = double.Parse(tokens[2], CultureInfo.InvariantCulture);

                ratings.Add(user_id, item_id, rating);
            }
            return(ratings);
        }
        [Test()] public void TestAdd()
        {
            var ratings = new StaticRatings(7);

            ratings.Add(1, 4, 0.3f);
            Assert.AreEqual(1, ratings.Count);
            ratings.Add(1, 8, 0.2f);
            Assert.AreEqual(2, ratings.Count);
            ratings.Add(2, 4, 0.2f);
            ratings.Add(2, 2, 0.6f);
            ratings.Add(2, 5, 0.4f);
            ratings.Add(3, 7, 0.2f);
            ratings.Add(6, 3, 0.3f);

            Assert.AreEqual(0.4f, ratings[2, 5]);
            Assert.AreEqual(0.3f, ratings[1, 4]);
            Assert.AreEqual(0.3f, ratings[6, 3]);
            Assert.AreEqual(7, ratings.Count);
        }
Пример #11
0
        [Test()] public void TestAddRating()
        {
            var ratings = new StaticRatings(7);

            ratings.Add(1, 4, 0.3);
            Assert.AreEqual(1, ratings.Count);
            ratings.Add(1, 8, 0.2);
            Assert.AreEqual(2, ratings.Count);
            ratings.Add(2, 4, 0.2);
            ratings.Add(2, 2, 0.6);
            ratings.Add(2, 5, 0.4);
            ratings.Add(3, 7, 0.2);
            ratings.Add(6, 3, 0.3);

            Assert.AreEqual(0.4, ratings.Get(2, 5));
            Assert.AreEqual(0.3, ratings.Get(1, 4));
            Assert.AreEqual(0.3, ratings.Get(6, 3));
            Assert.AreEqual(7, ratings.Count);
        }
Пример #12
0
        [Test()] public void TestGet()
        {
            var ratings = new StaticRatings(8);

            ratings.Add(1, 4, 0.3);
            ratings.Add(1, 8, 0.2);
            ratings.Add(2, 4, 0.2);
            ratings.Add(2, 2, 0.6);
            ratings.Add(2, 5, 0.4);
            ratings.Add(3, 4, 0.2);
            ratings.Add(3, 3, 0.3);
            ratings.Add(6, 3, 0.3);

            // test Get
            Assert.AreEqual(0.2, ratings.Get(2, 4));
            Assert.AreEqual(0.3, ratings.Get(3, 3));
            Assert.AreEqual(0.3, ratings.Get(6, 3));

            // test index[,]
            Assert.AreEqual(0.3, ratings[1, 4]);
            Assert.AreEqual(0.2, ratings[1, 8]);
            Assert.AreEqual(0.6, ratings[2, 2]);
        }