/// <summary>
        /// Returns a list of features used to predict whether the specified mention is non-referential.
        /// </summary>
        /// <param name="mention">
        /// The mention under considereation.
        /// </param>
        /// <returns>
        /// a list of featues used to predict whether the specified mention is non-referential.
        /// </returns>
        protected internal virtual List <string> GetNonReferentialFeatures(Mention.MentionContext mention)
        {
            var features      = new List <string>();
            var mentionTokens = mention.TokenParses;

            for (var tokenIndex = 0; tokenIndex <= mention.HeadTokenIndex; tokenIndex++)
            {
                var token           = mentionTokens[tokenIndex];
                var wordFeatureList = MaximumEntropyResolver.GetWordFeatures(token);
                for (var wordFeatureIndex = 0; wordFeatureIndex < wordFeatureList.Count; wordFeatureIndex++)
                {
                    features.Add("nr" + (wordFeatureList[wordFeatureIndex]));
                }
            }
            features.AddRange(MaximumEntropyResolver.GetContextFeatures(mention));
            return(features);
        }
        /// <summary>
        /// Returns a list of features used to predict whether the specified mention is non-referential.
        /// </summary>
        /// <param name="mention">
        /// The mention under considereation.
        /// </param>
        /// <returns>
        /// a list of featues used to predict whether the specified mention is non-referential.
        /// </returns>
        protected internal virtual List <string> GetNonReferentialFeatures(Mention.MentionContext mention)
        {
            List <string> features = new List <string>();

            Mention.IParse[] mentionTokens = mention.TokenParses;
            //System.err.println("getNonReferentialFeatures: mention has "+mtokens.length+" tokens");
            for (int tokenIndex = 0; tokenIndex <= mention.HeadTokenIndex; tokenIndex++)
            {
                Mention.IParse token           = mentionTokens[tokenIndex];
                List <string>  wordFeatureList = MaximumEntropyResolver.GetWordFeatures(token);
                for (int wordFeatureIndex = 0; wordFeatureIndex < wordFeatureList.Count; wordFeatureIndex++)
                {
                    features.Add("nr" + (wordFeatureList[wordFeatureIndex]));
                }
            }
            features.AddRange(MaximumEntropyResolver.GetContextFeatures(mention));
            return(features);
        }
 /// <summary>
 /// Initializes the resolvers used by this linker.
 /// </summary>
 /// <param name="mode">
 /// The mode in which this linker is being used.
 /// </param>
 /// <param name="fixedNonReferentialProbability">
 /// </param>
 protected internal virtual void InitializeResolvers(LinkerMode mode, double fixedNonReferentialProbability)
 {
     if (mode == LinkerMode.Train)
     {
         MentionFinder.PrenominalNamedEntitiesCollection = false;
         MentionFinder.CoordinatedNounPhrasesCollection = false;
     }
     SingularPronounIndex = 0;
     if (LinkerMode.Test == mode || LinkerMode.Eval == mode)
     {
         if (fixedNonReferentialProbability < 0)
         {
             Resolvers = new MaximumEntropyResolver[] { new SingularPronounResolver(CoreferenceProjectName, ResolverMode.Test), new ProperNounResolver(CoreferenceProjectName, ResolverMode.Test), new DefiniteNounResolver(CoreferenceProjectName, ResolverMode.Test), new IsAResolver(CoreferenceProjectName, ResolverMode.Test), new PluralPronounResolver(CoreferenceProjectName, ResolverMode.Test), new PluralNounResolver(CoreferenceProjectName, ResolverMode.Test), new CommonNounResolver(CoreferenceProjectName, ResolverMode.Test), new SpeechPronounResolver(CoreferenceProjectName, ResolverMode.Test) };
         }
         else
         {
             INonReferentialResolver nrr = new FixedNonReferentialResolver(fixedNonReferentialProbability);
             Resolvers = new MaximumEntropyResolver[] { new SingularPronounResolver(CoreferenceProjectName, ResolverMode.Test, nrr), new ProperNounResolver(CoreferenceProjectName, ResolverMode.Test, nrr), new DefiniteNounResolver(CoreferenceProjectName, ResolverMode.Test, nrr), new IsAResolver(CoreferenceProjectName, ResolverMode.Test, nrr), new PluralPronounResolver(CoreferenceProjectName, ResolverMode.Test, nrr), new PluralNounResolver(CoreferenceProjectName, ResolverMode.Test, nrr), new CommonNounResolver(CoreferenceProjectName, ResolverMode.Test, nrr), new SpeechPronounResolver(CoreferenceProjectName, ResolverMode.Test, nrr) };
         }
         if (LinkerMode.Eval == mode)
         {
             //String[] names = {"Pronoun", "Proper", "Def-NP", "Is-a", "Plural Pronoun"};
             //eval = new Evaluation(names);
         }
         MaximumEntropyResolver.SimilarityModel = SimilarityModel.TestModel(CoreferenceProjectName + "/sim");
     }
     else if (LinkerMode.Train == mode)
     {
         Resolvers = new AbstractResolver[9];
         Resolvers[0] = new SingularPronounResolver(CoreferenceProjectName, ResolverMode.Train);
         Resolvers[1] = new ProperNounResolver(CoreferenceProjectName, ResolverMode.Train);
         Resolvers[2] = new DefiniteNounResolver(CoreferenceProjectName, ResolverMode.Train);
         Resolvers[3] = new IsAResolver(CoreferenceProjectName, ResolverMode.Train);
         Resolvers[4] = new PluralPronounResolver(CoreferenceProjectName, ResolverMode.Train);
         Resolvers[5] = new PluralNounResolver(CoreferenceProjectName, ResolverMode.Train);
         Resolvers[6] = new CommonNounResolver(CoreferenceProjectName, ResolverMode.Train);
         Resolvers[7] = new SpeechPronounResolver(CoreferenceProjectName, ResolverMode.Train);
         Resolvers[8] = new PerfectResolver();
     }
     else
     {
         System.Console.Error.WriteLine("DefaultLinker: Invalid Mode");
     }
 }