示例#1
0
        //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();
            }
        }
示例#2
0
        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);
            }
        }