Exemplo n.º 1
0
        /// <summary>
        /// для подсчета всех расстояний(simularities) всех слов в словаре строится матрица в формате CSR
        /// для уменьшения размерности используем lowestfreq и первые k лемм
        /// </summary>
        /// <param name="lowestfreq">наименьшая частота</param>
        /// <returns></returns>
        public static CSRMatrix getCSRFullConceptsMatrix(int topklemms = 5000, int lowestfreq = 2)
        {
            //индексы столбцы матрицы
            List <int> colIds = new List <int>();
            //номера начал строк
            List <int> rowPtrs = new List <int>();
            //значения
            List <float> values = new List <float>();

            //заполняем матрицу концептов в CSR


            //указатель на начала строк
            int rowPtr     = 0;
            int deflemmcnt = 0;

            //выбираем из fterms 5k самых частотных лемм
            var top5kfrequentlemms             = _fterms.OrderByDescending(i => i.Value).Take(topklemms).Select(i => i.Key).ToArray();
            HashSet <string> top5kfrequenthash = new HashSet <string>(top5kfrequentlemms);



            foreach (string concept in GetDict.Keys)
            {
                rowPtrs.Add(rowPtr);
                deflemmcnt = 0;
                foreach (var lemm in GetDict[concept].Keys)
                {
                    if (_fterms[lemm] < lowestfreq)
                    {
                        continue;
                    }
                    if (!top5kfrequenthash.Contains(lemm))
                    {
                        continue;
                    }
                    //для каждой леммы концепта смотрим индекс в списке лемм словаря
                    colIds.Add(Lemms.IndexOf(lemm));

                    values.Add(GetDict[concept][lemm]);

                    deflemmcnt++;
                }

                if (deflemmcnt == 0)
                {
                    continue;
                }

                rowPtr += deflemmcnt;

                //rowPtr += GetDict[concept].Count;
            }
            rowPtrs.Add(rowPtr);


            return(new CSRMatrix(rowPtrs.ToArray(), colIds.ToArray(), values.ToArray()));
        }
Exemplo n.º 2
0
        public static CSRMatrix getCSRConceptsMatrix(string conceptspath)
        {
            //индексы столбцы матрицы
            List <int> colIds = new List <int>();
            //номера начал строк
            List <int> rowPtrs = new List <int>();
            //значения
            List <float> values = new List <float>();

            //заполняем матрицу концептов в CSR
            using (StreamReader conceptreader = new StreamReader(conceptspath))
            {
                string line = string.Empty;
                //указатель на начала строк
                int rowPtr = 0;

                while ((line = conceptreader.ReadLine()) != null)
                {
                    if (line == "")
                    {
                        continue;
                    }
                    rowPtrs.Add(rowPtr);

                    foreach (var lemm in GetDict[line].Keys)
                    {
                        //для каждой леммы концепта смотрим индекс в списке лемм словаря
                        colIds.Add(Lemms.IndexOf(lemm));

                        values.Add(GetDict[line][lemm]);
                    }

                    rowPtr += GetDict[line].Count;
                }
                rowPtrs.Add(rowPtr);
            }

            return(new CSRMatrix(rowPtrs.ToArray(), colIds.ToArray(), values.ToArray()));
        }
Exemplo n.º 3
0
        /// <summary>
        /// получить матрицу в формате CSR
        /// для списка концептов, уменьшения размерности
        /// используем параметр  наименьшей частоты - lowestfreq и первые k лемм
        /// </summary>
        /// <param name="conceptspath">путь к файлу концептов</param>
        /// <param name="lowestfreq">наименьшая частота леммы в дефиниции</param>
        /// <returns></returns>
        public static CSRMatrix getCSRConceptsMatrix(string conceptspath, int topklemms = 5000, int lowestfreq = 2)
        {
            //индексы столбцы матрицы
            List <int> colIds = new List <int>();
            //номера начал строк
            List <int> rowPtrs = new List <int>();
            //значения
            List <float> values = new List <float>();



            //заполняем матрицу концептов в CSR
            using (StreamReader conceptreader = new StreamReader(conceptspath))
            {
                string line = string.Empty;
                //указатель на начала строк
                int rowPtr     = 0;
                int deflemmcnt = 0;

                var top5kfrequentlemms            = _fterms.OrderByDescending(i => i.Value).Take(topklemms).Select(i => i.Key).ToArray();
                HashSet <string> topkfrequenthash = new HashSet <string>(top5kfrequentlemms);


                while ((line = conceptreader.ReadLine()) != null)
                {
                    if (line == "")
                    {
                        continue;
                    }
                    rowPtrs.Add(rowPtr);

                    deflemmcnt = 0;
                    foreach (var lemm in GetDict[line].Keys)
                    {
                        //порог частоты
                        if (_fterms[lemm] < lowestfreq)
                        {
                            continue;
                        }
                        //порог порядка
                        if (!topkfrequenthash.Contains(lemm))
                        {
                            continue;
                        }
                        //для каждой леммы концепта смотрим индекс в списке лемм словаря
                        colIds.Add(Lemms.IndexOf(lemm));

                        values.Add(GetDict[line][lemm]);

                        deflemmcnt++;
                    }
                    //несвязанные ни с кем слова
                    if (deflemmcnt == 0)
                    {
                        continue;
                    }

                    rowPtr += deflemmcnt;
                    //rowPtr += GetDict[line].Count;
                }
                rowPtrs.Add(rowPtr);
            }

            return(new CSRMatrix(rowPtrs.ToArray(), colIds.ToArray(), values.ToArray()));
        }