//public ClusterAnalysModel GetClusteringResult(int nodeId) //{ // var nodeContentDirectory = Path.Combine(ContentDirectory, nodeId.ToString()); // var clusterAnalys = new ClusterAnalysModel // { // NodeId = nodeId, // PlaneClusteringRelativePath = Path.Combine(nodeContentDirectory, PlaneClusteringImageName), // WordCloudRelativePath = Path.Combine(nodeContentDirectory, WordCloudImageName), // Clusters = new List<ClusterItem>() // }; // var clusters = Directory.EnumerateDirectories(nodeContentDirectory); // clusterAnalys // foreach (var cluster in clusters) // { // JsonSerializer.ReadFromJsonFile< List<MergeModel>> // (Path.Combine(nodeContentDirectory, cluster), clusterItem.MergeResults); // } // return clusterAnalys; //} private void DoHierarchicalClustering(IEnumerable<IGrouping<int, TextClusterModel>> groupped, string resutDirectory, Uri resultDirectoryUnixPath, ClusterAnalysModel clusterAnalys, string nodeContentDirectory) { var hierarchicalScript = GetScriptPath("HierarchicalClustering.R"); var items = new List<string>(); int number = 0; foreach (var group in groupped) { var clusterItem = new ClusterItem { ClusterItems = new List<ClusterModel>(), }; foreach (var item in @group) { number = item.ClusterNumber; var cluetrDirectory = Path.Combine(resutDirectory, item.ClusterNumber.ToString()); if (!Directory.Exists(cluetrDirectory)) { Directory.CreateDirectory(cluetrDirectory); } File.Move(Path.Combine(resutDirectory, item.TextName), Path.Combine(cluetrDirectory, item.TextName)); items.Add(item.TextName); clusterItem.ClusterNumber = number; clusterItem.ClusterItems.Add(new ClusterModel { TextName = item.TextName, ClusterNumber = item.ClusterNumber, ByUser = _userTextMapping[item.TextName].AddBy, AvatarFilePath = _userTextMapping[item.TextName].AvatarFilePath, FirstName = _userTextMapping[item.TextName].FirstName, LastName = _userTextMapping[item.TextName].LastName, ResourceId = _userTextMapping[item.TextName].Id, ResourceRaw = _userTextMapping[item.TextName].ResourceRaw, }); } //var group1 = _engine.CreateCharacterVector(items); if (items.Count() > 2) { _engine.Evaluate("hierarchicalMining <- dget(" + MakeParam(hierarchicalScript.AbsolutePath) + ")"); var path = resultDirectoryUnixPath.AbsolutePath + Path.AltDirectorySeparatorChar + number; var resultMerge = _engine.Evaluate("hierarchicalMining(" + MakeParam(path) + ")").AsDataFrame(); var hierarchicalClusteringImageName = Path.Combine(Path.Combine(nodeContentDirectory, group.First().ClusterNumber.ToString()), HierarchicalClusteringImageName); clusterItem.HierarchicalClusteringPath = hierarchicalClusteringImageName; clusterItem.MergeResults = MapMergeResult(resultMerge, items); //JsonSerializer.WriteToJsonFile(Path.Combine(nodeContentDirectory, group.First().ClusterNumber.ToString()), clusterItem.MergeResults); } clusterAnalys.Clusters.Add(clusterItem); //Thread.Sleep(5000); items.Clear(); } }
public ClusterAnalysModel DoClustering(List<NodeResourceViewModel> nodeResources) { try { var resutDirectory = PrepareDirectory(nodeResources); var nodeId = nodeResources.First().NodeId; var nodeContentDirectory = Path.Combine(ContentDirectory, nodeId.ToString()); var clusterAnalys = new ClusterAnalysModel { NodeId = nodeId, PlaneClusteringRelativePath = Path.Combine(nodeContentDirectory, PlaneClusteringImageName), WordCloudRelativePath = Path.Combine(nodeContentDirectory, WordCloudImageName), Clusters = new List<ClusterItem>() }; var starterScript = GetScriptPath("Starter.R"); var resultDirectoryUnixPath = new Uri(resutDirectory); _engine.Evaluate("mining <- dget(" + MakeParam(starterScript.AbsolutePath) + ")"); var scriptsDirectory = MakeParam(GetScriptPath(null).AbsolutePath); var planeClusteringResult = _engine.Evaluate("mining(" + MakeParam(resultDirectoryUnixPath.AbsolutePath) + ',' + scriptsDirectory + ")").AsDataFrame(); var result = MapPlaneClusteringResult(planeClusteringResult); var groupped = result.GroupBy(m => m.ClusterNumber); DoHierarchicalClustering(groupped, resutDirectory, resultDirectoryUnixPath, clusterAnalys, nodeContentDirectory); return clusterAnalys; } catch (Exception exception) { throw new Exception("Text Mining Exception", exception); } }