| 14 | |
| 15 | |
| 16 | def generate_sentence_dyiepp(filename, type_format='subtype'): |
| 17 | for line in open(filename): |
| 18 | instance = json.loads(line) |
| 19 | sentence = instance['sentence'] |
| 20 | sentence_start = instance.get( |
| 21 | 's_start', instance.get('_sentence_start')) |
| 22 | events = instance['event'] |
| 23 | |
| 24 | # 不进行去重 |
| 25 | trigger_list = list() |
| 26 | role_list = list() |
| 27 | |
| 28 | # 进行去重 |
| 29 | trigger_set = set() |
| 30 | role_set = set() |
| 31 | |
| 32 | for event in events: |
| 33 | trigger, event_type = event[0] |
| 34 | trigger -= sentence_start |
| 35 | |
| 36 | suptype, subtype = event_type.split('.') |
| 37 | |
| 38 | if type_format == 'subtype': |
| 39 | event_type = subtype |
| 40 | elif type_format == 'suptype': |
| 41 | event_type = suptype |
| 42 | else: |
| 43 | event_type = suptype + type_format + subtype |
| 44 | |
| 45 | # trigger_list += [(event_type, (trigger, trigger))] |
| 46 | trigger_list += [(event_type, sentence[trigger])] |
| 47 | trigger_set.add((event_type, sentence[trigger])) |
| 48 | for start, end, role in event[1:]: |
| 49 | start -= sentence_start |
| 50 | end -= sentence_start |
| 51 | role_list += [(event_type, role, " ".join(sentence[start: end+1]))] |
| 52 | role_set.add((event_type, role, " ".join(sentence[start: end+1]))) |
| 53 | |
| 54 | # yield ' '.join(sentence), trigger_list, role_list # 不进行去重 |
| 55 | yield ' '.join(sentence), list(trigger_set), list(role_set) # 进行去重 |
| 56 | |
| 57 | def generate_sentence_text2target(filename, pred_reader): |
| 58 | text_gold_dict = {} |