Spaces:
Runtime error
Runtime error
| import six | |
| import json | |
| from functools import reduce | |
| class Example(object): | |
| """Defines a single training or test example. | |
| Stores each column of the example as an attribute. | |
| """ | |
| def fromJSON(cls, data, fields): | |
| ex = cls() | |
| obj = json.loads(data) | |
| for key, vals in fields.items(): | |
| if vals is not None: | |
| if not isinstance(vals, list): | |
| vals = [vals] | |
| for val in vals: | |
| # for processing the key likes 'foo.bar' | |
| name, field = val | |
| ks = key.split('.') | |
| def reducer(obj, key): | |
| if isinstance(obj, list): | |
| results = [] | |
| for data in obj: | |
| if key not in data: | |
| # key error | |
| raise ValueError("Specified key {} was not found in " | |
| "the input data".format(key)) | |
| else: | |
| results.append(data[key]) | |
| return results | |
| else: | |
| # key error | |
| if key not in obj: | |
| raise ValueError("Specified key {} was not found in " | |
| "the input data".format(key)) | |
| else: | |
| return obj[key] | |
| v = reduce(reducer, ks, obj) | |
| setattr(ex, name, field.preprocess(v)) | |
| return ex | |
| def fromdict(cls, data, fields): | |
| ex = cls() | |
| for key, vals in fields.items(): | |
| if key not in data: | |
| raise ValueError("Specified key {} was not found in " | |
| "the input data".format(key)) | |
| if vals is not None: | |
| if not isinstance(vals, list): | |
| vals = [vals] | |
| for val in vals: | |
| name, field = val | |
| setattr(ex, name, field.preprocess(data[key])) | |
| return ex | |
| def fromCSV(cls, data, fields, field_to_index=None): | |
| if field_to_index is None: | |
| return cls.fromlist(data, fields) | |
| else: | |
| assert(isinstance(fields, dict)) | |
| data_dict = {f: data[idx] for f, idx in field_to_index.items()} | |
| return cls.fromdict(data_dict, fields) | |
| def fromlist(cls, data, fields): | |
| ex = cls() | |
| for (name, field), val in zip(fields, data): | |
| if field is not None: | |
| if isinstance(val, six.string_types): | |
| val = val.rstrip('\n') | |
| # Handle field tuples | |
| if isinstance(name, tuple): | |
| for n, f in zip(name, field): | |
| setattr(ex, n, f.preprocess(val)) | |
| else: | |
| setattr(ex, name, field.preprocess(val)) | |
| return ex | |
| def fromtree(cls, data, fields, subtrees=False): | |
| try: | |
| from nltk.tree import Tree | |
| except ImportError: | |
| print("Please install NLTK. " | |
| "See the docs at http://nltk.org for more information.") | |
| raise | |
| tree = Tree.fromstring(data) | |
| if subtrees: | |
| return [cls.fromlist( | |
| [' '.join(t.leaves()), t.label()], fields) for t in tree.subtrees()] | |
| return cls.fromlist([' '.join(tree.leaves()), tree.label()], fields) | |