'Extract basic features about this word including
- Current Word
- Is Capitalized ?
- Has Punctuation ?
- Has Number ?
- Suffixes up to length 3
Note that : we might include feature over previous word, next word ect.
:return : a list which contains the features
:rtype : list(str)'

def _get_features(self, tokens, idx):

    token = tokens[idx]
    feature_list = []
    if (not token):
        return feature_list
    if token[0].isupper():
        feature_list.append(u'CAPITALIZATION')
    if (re.search(self._pattern, token) is not None):
        feature_list.append(u'HAS_NUM')
    punc_cat = set([u'Pc', u'Pd', u'Ps', u'Pe', u'Pi', u'Pf', u'Po'])
    if all(((unicodedata.category(x) in punc_cat) for x in token)):
        feature_list.append(u'PUNCTUATION')
    if (len(token) > 1):
        feature_list.append((u'SUF_' + token[(-1):]))
    if (len(token) > 2):
        feature_list.append((u'SUF_' + token[(-2):]))
    if (len(token) > 3):
        feature_list.append((u'SUF_' + token[(-3):]))
    feature_list.append((u'WORD_' + token))
    return feature_list
