| from functools import reduce |
| from data.field.mini_torchtext.example import Example |
|
|
|
|
| def example_from_json(obj, fields): |
| ex = Example() |
| for key, vals in fields.items(): |
| if vals is not None: |
| if not isinstance(vals, list): |
| vals = [vals] |
| for val in vals: |
| |
| name, field = val |
| ks = key.split(".") |
|
|
| def reducer(obj, key): |
| if isinstance(obj, list): |
| results = [] |
| for data in obj: |
| if key not in data: |
| |
| raise ValueError("Specified key {} was not found in " "the input data".format(key)) |
| else: |
| results.append(data[key]) |
| return results |
| else: |
| |
| 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 |
|
|