private string ProcessParse(string[] models, Parse lineParse) { System.Text.StringBuilder output = new System.Text.StringBuilder(); string[][] finderTags = new string[models.Length][]; Dictionary<string, string>[] previousTokenMaps = CreatePreviousTokenMaps(models); Parse[] tokenParses = lineParse.GetTagNodes(); string[] tokens = new string[tokenParses.Length]; for (int currentToken = 0; currentToken < tokens.Length; currentToken++) { tokens[currentToken] = tokenParses[currentToken].ToString(); } for (int currentFinder = 0, finderCount = models.Length; currentFinder < finderCount; currentFinder++) { MaximumEntropyNameFinder finder = mFinders[models[currentFinder]]; finderTags[currentFinder] = finder.Find(tokens, previousTokenMaps[currentFinder]); } UpdatePreviousTokenMaps(previousTokenMaps, tokens, finderTags); for (int currentFinder = 0, finderCount = models.Length; currentFinder < finderCount; currentFinder++) { int start = -1; List<Span> names = new List<Span>(5); for (int currentToken = 0, tokenCount = tokens.Length; currentToken < tokenCount; currentToken++) { if ((finderTags[currentFinder][currentToken] == MaximumEntropyNameFinder.Start) || (finderTags[currentFinder][currentToken] == MaximumEntropyNameFinder.Other)) { if (start != -1) { names.Add(new Span(start, currentToken - 1)); } start = -1; } if (finderTags[currentFinder][currentToken] == MaximumEntropyNameFinder.Start) { start = currentToken; } } if (start != - 1) { names.Add(new Span(start, tokens.Length - 1)); } AddNames(models[currentFinder], names, tokenParses, lineParse); } output.Append(lineParse.Show()); output.Append("\r\n"); return output.ToString(); }