public InquirerDescription Construct(InquirerRecord record) { InquirerDescription description = new InquirerDescription(); ILookup <string, string> lookup = record.RawCategories.ToLookup(item => item, item => item); if (lookup.Contains("Positiv")) { description.Harward.Sentiment = new SentimentData(PositivityType.Positive); } if (lookup.Contains("Negativ")) { description.Harward.Sentiment = new SentimentData(PositivityType.Negative); } DataTree tree = new DataTree(description, map); var leafLookup = tree.AllLeafs.ToLookup(item => item.Name); int total = 0; foreach (var category in record.RawCategories) { total++; if (total == record.RawCategories.Length) { int index = category.IndexOf("|"); description.Information = index == 0 ? category.Substring(1) .Trim() : category; } else if (string.IsNullOrEmpty(category) || ignoreTable.ContainsKey(category)) { } else { ParseSubCategories(category, leafLookup, description); } } description.Attributes = tree.AllLeafs.Where(item => Equals(item.Value, true)) .Select(item => item.Description) .ToArray(); return(description); }
private static void ParseSubCategories(string category, ILookup <string, IDataItem> leafLookup, InquirerDescription description) { var subCategories = category.Split(' '); List <string> unknown = new List <string>(); foreach (var item in subCategories) { if (!map.ContainsField(item)) { unknown.Add(item); } else { foreach (var dataItem in leafLookup[item]) { dataItem.Value = true; } } } if (unknown.Count > 0) { description.OtherTags = unknown.AccumulateItems(" "); log.LogTrace($"Other tags: {description.OtherTags}"); } }