コード例 #1
0
ファイル: GpfmConverter.cs プロジェクト: jgera/WrapRec
        private string GetContextVector(Feedback f)
        {
            var ctx = ContextNames.Select(c => ContextMapper.ToInternalID(f.Attributes[c].Value).ToString()).ToList();

            if (ctx.Count > 0)
            {
                return(ctx.Aggregate((a, b) => a + "," + b));
            }
            else
            {
                return("1");
            }
        }
コード例 #2
0
ファイル: GpfmConverter.cs プロジェクト: jgera/WrapRec
        public override void Run()
        {
            var trainPointWriter = new StreamWriter(OutputPath + ".point");
            var trainPairWriter  = new StreamWriter(OutputPath + ".pair");
            var testWriter       = new StreamWriter(OutputPath + ".test");
            var testOrgWriter    = new StreamWriter(OutputPath + ".test.org");

            foreach (var f in Split.Train)
            {
                var mUserId    = UserMapper.ToInternalID(f.User.Id);
                var mItemId    = ContextMapper.ToInternalID(f.Item.Id);
                var nNegItemId = ContextMapper.ToInternalID(SampleItemId(f.User.Id));
                //var context = GetContextVector(f);

                trainPointWriter.WriteLine($"{mUserId},{mItemId},1");
                trainPointWriter.WriteLine($"{mUserId},{nNegItemId},-1");
                trainPairWriter.WriteLine($"{mUserId},{mItemId},{nNegItemId},1");
                trainPairWriter.WriteLine($"{mUserId},{nNegItemId},{mItemId},-1");
                //testWriter.WriteLine($"{mUserId},{mItemId},1");
                //testOrgWriter.WriteLine($"{f.User.Id},{f.Item.Id},1");
            }

            foreach (var f in Split.Test)
            {
                var mUserId = UserMapper.ToInternalID(f.User.Id);
                var mItemId = ContextMapper.ToInternalID(f.Item.Id);
                //var context = GetContextVector(f);

                testWriter.WriteLine($"{mUserId},{mItemId},1");
                testOrgWriter.WriteLine($"{f.User.Id},{f.Item.Id},1");
            }

            var c = Split.Container;

            foreach (var user in c.Users.Values)
            {
                int count = 0;
                foreach (var item in c.Items.Values.Shuffle().Take(100))
                {
                    if (!c.FeedbacksDic.ContainsKey(user.Id, item.Id))
                    {
                        var mappedUId    = UserMapper.ToInternalID(user.Id);
                        var mappedNegIId = ContextMapper.ToInternalID(item.Id);

                        testWriter.WriteLine($"{mappedUId},{mappedNegIId},-1");
                        testOrgWriter.WriteLine($"{user.Id},{item.Id},-1");
                        count++;

                        if (count == 1000)
                        {
                            break;
                        }
                    }
                }
            }

            trainPointWriter.Close();
            trainPairWriter.Close();
            testWriter.Close();
            testOrgWriter.Close();
        }