public static BodyPart GetBodyPartsFromFile(String filename) { var tabParser = new TabulationParser(Program.DefaultMyStemmer); var data = tabParser.ParseFromFile(filename).ToList(); var first = data.First(); if (first.IndicatorAmount != 0) throw new Exception("Wrong incapsulation in " + filename); var human = new BodyPart(null, first.StemmedWords.ToArray()); var current = human; int currentTabs = first.IndicatorAmount; foreach (var q in data.Skip(1)) { if (q.IndicatorAmount > currentTabs) { current = current.AddSubPartAndReturnItUsing( q.StemmedWords); currentTabs = q.IndicatorAmount; } else if (q.IndicatorAmount < currentTabs) { int numberIterations = currentTabs - q.IndicatorAmount; for (int i = 0; i < numberIterations; ++i ) current = current.Parent; current = current.Parent.AddSubPartAndReturnItUsing( q.StemmedWords); currentTabs = q.IndicatorAmount; } else { current = current.Parent.AddSubPartAndReturnItUsing(q.StemmedWords); } } return human; }
public BodyCalculator(QuestionList questions, BodyPart body) { this.questions = questions; this.body = body; }
public BodyPart AddSubPartAndReturnItUsing(IEnumerable<string> names) { var q = new BodyPart(this, names.ToArray()); AddSubPart(q); return q; }
public void AddSubPart(BodyPart part) { subParts.Add(part); }
public BodyPart(BodyPart parent, string[] names) { Parent = parent; Names = names; }
private Dictionary<string, BodyPart> getDict(Dictionary<string, BodyPart> dict, BodyPart part) { foreach (var name in part.Names.Distinct()) { dict.Add(name, part); } if (part.GetSubParts().Count == 0) { return dict; } foreach (var bodyPart in part.GetSubParts()) { getDict(dict, bodyPart); } return dict; }