def exstractFeature1(text):
return [len(text)]
class HasChar(object):
def __init__(self, ch):
self.ch = ch
def __call__(self, text):
return [0 if text.find(self.ch)<0 else 1]
class FeatureExtractor(object):
def __init__(self, features):
self._features = features
def __call__(self, text):
new_feature = []
for f in self._features:
new_feature.extend(f(text))
return new_feature
d = {
'Length': exstractFeature1,
'HasA': HasChar('A'),
'HasB': HasChar('B'),
}
features = FeatureExtractor(d.values())
print features('HAS') #-> [3, 1, 0]
ZGVmIGV4c3RyYWN0RmVhdHVyZTEodGV4dCk6CiAgICByZXR1cm4gW2xlbih0ZXh0KV0KCmNsYXNzIEhhc0NoYXIob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaCk6CiAgICAgICAgc2VsZi5jaCA9IGNoCiAgICBkZWYgX19jYWxsX18oc2VsZiwgdGV4dCk6CiAgICAgICAgcmV0dXJuIFswIGlmIHRleHQuZmluZChzZWxmLmNoKTwwIGVsc2UgMV0KCgpjbGFzcyBGZWF0dXJlRXh0cmFjdG9yKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZmVhdHVyZXMpOgogICAgICAgIHNlbGYuX2ZlYXR1cmVzID0gZmVhdHVyZXMKCiAgICBkZWYgX19jYWxsX18oc2VsZiwgdGV4dCk6CiAgICAgICAgbmV3X2ZlYXR1cmUgPSBbXQogICAgICAgIGZvciBmIGluIHNlbGYuX2ZlYXR1cmVzOgogICAgICAgICAgICBuZXdfZmVhdHVyZS5leHRlbmQoZih0ZXh0KSkKICAgICAgICByZXR1cm4gbmV3X2ZlYXR1cmUKCgpkID0gewogJ0xlbmd0aCc6IGV4c3RyYWN0RmVhdHVyZTEsCiAnSGFzQSc6IEhhc0NoYXIoJ0EnKSwKICdIYXNCJzogSGFzQ2hhcignQicpLAp9CgpmZWF0dXJlcyA9IEZlYXR1cmVFeHRyYWN0b3IoZC52YWx1ZXMoKSkKcHJpbnQgZmVhdHVyZXMoJ0hBUycpICMtPiBbMywgMSwgMF0=