예제 #1
0
        /// <summary>
        /// returns array of  priority queues for current distance metric
        /// </summary>
        /// <param name="ConceptsCnt"></param>
        /// <param name="conceptsMtrx"></param>
        /// <returns></returns>
        static PriorityQueue <float, int>[] CalCulateAllDistAllMetrics(CSRMatrix conceptsMtrx)
        {
            PriorityQueue <float, int>[] pqs = new PriorityQueue <float, int> [conceptsMtrx._rowPtrArr.Length - 1];
            for (int i = 0; i < pqs.Length; i++)
            {
                pqs[i] = new PriorityQueue <float, int>();
            }

            for (int i = 0; i < conceptsMtrx._rowPtrArr.Length - 1; i++)
            {
                for (int j = 0; j < conceptsMtrx._rowPtrArr.Length - 1; j++)
                {
                    if (i >= j)
                    {
                        continue;
                    }
                    float cos = Distance.Cosine(ref conceptsMtrx._values, ref conceptsMtrx._colIdArr, ref conceptsMtrx._rowPtrArr, i, j);
                    pqs[i].Enqueue(1 - cos, j);
                    pqs[j].Enqueue(1 - cos, i);
                }
            }
            ;


            return(pqs);
        }
예제 #2
0
        /// <summary>
        /// returns array of  priority queues for current distance metric
        /// </summary>
        /// <param name="ConceptsCnt"></param>
        /// <param name="conceptsMtrx"></param>
        /// <returns></returns>
        static PriorityQueue<float,int>[] CalCulateAllDistAllMetrics(CSRMatrix conceptsMtrx)
        {
            PriorityQueue<float, int>[] pqs = new PriorityQueue<float, int>[conceptsMtrx._rowPtrArr.Length-1];
            for (int i = 0; i < pqs.Length; i++)
            {
                pqs[i] = new PriorityQueue<float, int>();
            }

            for(int i = 0;i< conceptsMtrx._rowPtrArr.Length - 1;i++)
            {

                for (int j = 0; j < conceptsMtrx._rowPtrArr.Length - 1; j++)
                {
                    if (i >= j) continue;
                    float cos = Distance.Cosine(ref conceptsMtrx._values, ref conceptsMtrx._colIdArr, ref conceptsMtrx._rowPtrArr, i, j);
                    pqs[i].Enqueue(1-cos, j);
                    pqs[j].Enqueue(1-cos, i);

                }

            };

            return pqs;
        }
예제 #3
0
        static void Main(string[] args)
        {
            //путь к файлу с определениями
            string dictpath = string.Empty;
            //путь к файлу со стоп-словами
            string stoplistfile = string.Empty;
            //путь  к файлу между которыми необходимо найти семантические отношения
            string conceptsfile = string.Empty;
            //количество соседей для поиска
            int k = 0;
            //выходной файл для первого алгоритма
            string knnfile = @"knn";
            //выходной файл для второго алгоритма
            string mknnfile = @"mknn";

            #region console
            System.Console.WriteLine("parameters count = {0}", args.Length);

            for (int i = 0; i < args.Length; i++)
            {
                System.Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
            }
            if (args.Length < 4 || args.Length > 6)
            {
                Console.WriteLine("not enough params");
                help();

                return;
            }
            else
            {
                foreach (var arg in args)
                {
                    var param = arg.Split('=');
                    var key   = param[0];
                    var value = param[1];
                    switch (key)
                    {
                    case "-c":
                    {
                        conceptsfile = value;
                        break;
                    }

                    case "-s":
                    {
                        stoplistfile = value;
                        break;
                    }

                    case "-d":
                    {
                        dictpath = value;
                        break;
                    }

                    case "-k":
                    {
                        k = int.Parse(value);
                        break;
                    }

                    case "-knn":
                    {
                        knnfile = value;
                        break;
                    }

                    case "-mknn":
                    {
                        mknnfile = value;
                        break;
                    }

                    default:
                    {
                        Console.WriteLine("uknown param : {0}", key);
                        help();
                        return;
                    }
                    }
                }
            }

            #endregion



            //парсинг словаря , исключение стоп-слов из входных данных
            Dict.Create(dictpath, stoplistfile);


            //для файла концпетов строим разреженную матрицу в CSR
            //берем первые частотных  5k лемм
            CSRMatrix conceptsMtrx = Dict.getCSRConceptsMatrix(conceptsfile, 5000);
            //количество полученных концептов для анализа
            int ConceptsCnt = conceptsMtrx._rowPtrArr.Count() - 1;


            PriorityQueue <float, int>[] result;
            result = CalCulateAllDistAllMetrics(conceptsMtrx);



            int[][] knn;
            //первый алгоритм
            getKnn(knnfile, out knn, result, ConceptsCnt, k);

            //второй алгоритм
            getMutualKnn(mknnfile, knn);
        }