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