  
      def tag_from_strings(self, Doc tokens, object tag_strs):
          cdef int i
          for i in range(tokens.length):
              self.vocab.morphology.assign_tag(&tokens.data[i], tag_strs[i])
          tokens.is_tagged = True
          tokens._py_tokens = [None] * tokens.length
  
      def train(self, Doc tokens, object gold_tag_strs):
          cdef int i
 
</s> remove                 self.vocab.morphology.assign_tag(&tokens.data[i], guess)
 </s> add                 self.vocab.morphology.assign_tag(self.vocab.strings, &tokens.data[i], guess) </s> remove         golds = [self.tag_names.index(g) if g is not None else -1
                 for g in gold_tag_strs]
 </s> add         golds = [self.tag_names.index(g) if g is not None else -1 for g in gold_tag_strs] </s> remove 
            self.vocab.morphology.assign_tag(&tokens.data[i], guess)
 </s> add             self.vocab.morphology.assign_tag(self.vocab.strings, &tokens.data[i], guess) </s> remove     @classmethod
    def from_dir(cls, data_dir):
        tag_map = json.load(open(path.join(data_dir, 'tag_map.json')))
        return cls(tag_map, {}, None)

    cdef int assign_tag(self, TokenC* token, int tag) except -1:
 </s> add     cdef int assign_tag(self, StringStore strings, TokenC* token, int tag) except -1:
        # TODO Caching
            self.vocab.morphology.assign_tag(self.vocab.strings, &tokens.data[i], tag_strs[i])
  
      def tag_from_strings(self, Doc tokens, object tag_strs):
          cdef int i
          for i in range(tokens.length):
            self.vocab.morphology.assign_tag(self.vocab.strings, &tokens.data[i], tag_strs[i])
          tokens.is_tagged = True
          tokens._py_tokens = [None] * tokens.length
  
      def train(self, Doc tokens, object gold_tag_strs):
          cdef int i
keep keep keep keep replace keep keep keep keep keep
 * Tagger training now working. Still need to test load/save of model. Morphology still broken. 
spacy/tagger.pyx