Ejemplo n.º 1
0
        /// <summary>
        /// 通过推荐列表中的movieId找到相关的电影的全部信息
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        private static ArrayList getRecommendMovie(IronPython.Runtime.List result)
        {
            ArrayList recommendMovie = new ArrayList();

            for (int i = 0; i < result.Count; i++)
            {
                PythonTuple pySet = result.ElementAt(i) as PythonTuple;

                int movieId = (int)pySet.ElementAt(0);

                RecommendMovie rdMovie = new RecommendMovie();
                rdMovie.Similarity = (double)pySet.ElementAt(1);
                try
                {
                    rdMovie.Movie = MovieHelper.GetMovieById(movieId);
                }
                catch (Exception e)
                {
                    throw (e);
                }

                recommendMovie.Add(rdMovie);
            }

            return(recommendMovie);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// pyItemList为与用户相关联的所有电影ID
        /// 找到这些电影与其他电影的相似矩阵,并拼接成一个总体的相似矩阵
        /// </summary>
        /// <param name="pyItemList"></param>
        /// <returns></returns>
        private static PythonDictionary getItemSimilarityMatrix(IronPython.Runtime.List pyItemList)
        {
            PythonDictionary pyDic = new PythonDictionary();

            for (int i = 0; i < pyItemList.Count; i++)
            {
                int itemId = (int)pyItemList.ElementAt(i);

                FileStream readStream = new FileStream(srcPath + "item_similar_matrix\\item" + itemId + "_similar_matrix.txt", FileMode.Open, FileAccess.Read, FileShare.Read);

                BinaryFormatter formatter = new BinaryFormatter();

                IronPython.Runtime.List similarityList = (List)formatter.Deserialize(readStream);

                readStream.Close();

                pyDic.Add(itemId, similarityList);
            }

            return(pyDic);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 用于测试
        /// </summary>
        /// <returns></returns>
        public static ArrayList test()
        {
            ArrayList returnList = new ArrayList();

            string serverpath = "D:\\projects\\recommandSystem\\UserCFRecommend.py";

            ScriptRuntime pyRuntime = Python.CreateRuntime();

            ScriptEngine Engine = pyRuntime.GetEngine("python");

            ICollection <string> Paths = Engine.GetSearchPaths();

            Paths.Add("D:\\Anaconda2-32\\Lib");
            Paths.Add("D:\\Anaconda2-32\\DLLs");
            Paths.Add("D:\\Anaconda2-32\\Lib\\site-packages");

            ScriptScope pyScope = Engine.CreateScope();

            //Engine.ImportModule("pandas");
            //Engine.ImportModule("math");
            //Engine.ImportModule("pickle");

            Engine.SetSearchPaths(Paths);



            IronPython.Runtime.PythonDictionary pyDic = new IronPython.Runtime.PythonDictionary();

            ArrayList A = new ArrayList();

            A.Add('a');
            A.Add('b');
            A.Add('d');

            ArrayList B = new ArrayList();

            B.Add('a');
            B.Add('c');

            ArrayList C = new ArrayList();

            C.Add('b');
            C.Add('e');

            ArrayList D = new ArrayList();

            D.Add('c');
            D.Add('d');
            D.Add('e');


            pyDic.Add('A', A);
            pyDic.Add('B', B);
            pyDic.Add('C', C);
            pyDic.Add('D', D);


            dynamic obj = Engine.ExecuteFile(serverpath, pyScope);

            IronPython.Runtime.List result = obj.recommmend_user_cf('A', pyDic, 3);



            for (int i = 0; i < result.Count; i++)
            {
                IronPython.Runtime.PythonTuple pySet = (IronPython.Runtime.PythonTuple)result.ElementAt(i);
                Console.WriteLine(pySet.ElementAt(0));
                Console.WriteLine(pySet.ElementAt(1));

                returnList.Add(pySet.ElementAt(0));
            }


            Console.WriteLine(result);



            return(returnList);
        }