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