refactoring to work with the annotated plain text 

sometime the training data maybe plain text, instead of using python-crfsuite or any other CRF package, i still prefer to use webstruct because it has sklearn `pipelines` and some evaluation out of box. 

the input text annotated text is similar to GATE: e.g. `this is a <NER>test</NER>`. the entities are surrounded by <> tags.  the rest of the change just moving the generic code to a more proper place.