private TreebankStats.ObservedCorpusStats GatherStats(DiskTreebank tb, string name)
 {
     TreebankStats.ObservedCorpusStats ocs = new TreebankStats.ObservedCorpusStats(name);
     if (makeVocab)
     {
         trainVocab = Generics.NewHashSet();
     }
     System.Console.Out.WriteLine("Reading treebank:");
     foreach (Tree t in tb)
     {
         Pair <int, int> treeFacts = DissectTree(t, ocs, makeVocab);
         ocs.AddStatsForTree(t.Yield().Count, treeFacts.First(), treeFacts.Second());
         if (ocs.numTrees % 100 == 0)
         {
             System.Console.Out.Write(".");
         }
         else
         {
             if (ocs.numTrees % 8001 == 0)
             {
                 System.Console.Out.WriteLine();
             }
         }
     }
     ocs.ComputeFinalValues();
     System.Console.Out.WriteLine("done!");
     return(ocs);
 }