/// <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); }
/// <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); }
/// <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); }