/// <summary> /// Конструктор /// </summary> /// <param name="posCount">число частей речи</param> /// <param name="depth">глубина</param> public POSTree(int posCount, int depth) { if (posCount <= 0 || depth <= 0) throw new ApplicationException(); this.posCount = posCount; this.depth = depth; startNode = new POSTreeNode(posCount); }
/// <summary> /// Выполнить постобработку вершины и её детей /// </summary> /// <param name="startNode">вершина</param> private static void PostProcess(POSTreeNode startNode) { var maxIndex = 0; var maxValue = startNode.POS[0]; var sum = 0; for(var i = 0; i < startNode.POS.Length; i++) { sum += startNode.POS[i]; if (startNode.POS[i] <= maxValue) continue; maxValue = startNode.POS[i]; maxIndex = i; } if (sum != 0) // ReSharper disable PossibleLossOfFraction startNode.MaxFrequency = maxValue / sum; // ReSharper restore PossibleLossOfFraction startNode.SupposedPos = maxIndex; // рекурсивно обработать остальные вершины foreach (var node in startNode.Next.Values) { PostProcess(node); } }