public static List <PhraseAttribute> TreebankToAttributes(string part, IWordLookup informer, string word, bool simplified)
        {
            List <PhraseAttribute> attributes = new List <PhraseAttribute>();
            InformedPhrase         informed   = (informer == null || word == null || word.Contains(" ")) ? null : informer.GetInformed(word, false);

            if (part == "NN")
            {
                attributes.Add(new PartOSAttribute(Noun));
                attributes.Add(new NumberAttribute(NumberAttribute.NumberOptions.One));
                PhraseSense sense = informed != null?informed.FindSense(SpeechPart.Noun, true) : null;

                return(OverrideAttributes(sense, attributes));
            }

            if (part == "NNS")
            {
                attributes.Add(new PartOSAttribute(Noun));
                attributes.Add(new NumberAttribute(NumberAttribute.NumberOptions.Many));
                PhraseSense sense = informed != null?informed.FindSense(SpeechPart.Noun, false) : null;

                return(OverrideAttributes(sense, attributes));
            }

            if (part == "NNP")
            {
                attributes.Add(new PartOSAttribute(ProperNoun));
                attributes.Add(new NumberAttribute(NumberAttribute.NumberOptions.One));
                return(attributes);
            }

            if (part == "NNPS")
            {
                attributes.Add(new PartOSAttribute(ProperNoun));
                attributes.Add(new NumberAttribute(NumberAttribute.NumberOptions.Many));
                return(attributes);
            }

            if (part == "PRP" || part == "PRP$" || part == "WDT" || part == "WP" || part == "WP$" || part == "WDT" || part == "WRB")
            {
                if (informer == null || word == null || informed == null)
                {
                    if (part == "PRP")
                    {
                        attributes.Add(new PartOSAttribute(PersonalPronoun));
                    }
                    else if (part == "PRP$")
                    {
                        attributes.Add(new PartOSAttribute(PossessivePronoun));
                    }
                    else if (part == "WP")
                    {
                        attributes.Add(new PartOSAttribute(WhPronoun));
                    }
                    else if (part == "WP$")
                    {
                        attributes.Add(new PartOSAttribute(PossiveWhPronoun));
                    }
                    else
                    {
                        attributes.Add(new PartOSAttribute(part));
                    }
                    return(attributes);
                }

                PhraseSense sense = informed.FindSense(PersonalPronoun, true);
                if (sense == null)
                {
                    sense = informed.FindSense(ArticulatePronoun, true);
                }
                if (sense == null)
                {
                    sense = informed.Senses[0].Key;
                }

                return(sense.Attributes);
            }

            // Convert phrases
            if (part.StartsWith("NP"))
            {
                part = "NN_P" + part.Substring(2);
            }
            else if (part.StartsWith("VP"))
            {
                part = "VB_P" + part.Substring(2);
            }
            else if (part.StartsWith("PP"))
            {
                part = "IN_P" + part.Substring(2);
            }

            if (simplified)
            {
                int dash = part.IndexOf('-');
                if (dash > 0)
                {
                    part = part.Substring(0, dash);
                }
            }

            if (!catalog.ContainsKey(part))
            {
                attributes.Add(new PartOSAttribute(new SpeechPart(part)));
            }
            else
            {
                attributes.Add(new PartOSAttribute(part));
            }
            return(attributes);
        }