Continuation often holds between two EDUS when they both elaborate or provide background to the same segment.
1 2 3 4 5 6 7 8 9 10 11 12 13 | def LF_Cont_L_L(row): if ((row.source_addressee == row.target_addressee and row.distance < 3 and (len(row.source_text.split(' ')) < 6 and (len(row.target_text.split(' ')) < 3 or row.target_text.split(' ')[0].lower() == 'and')) ) or ( any( x in row.source_text.lower() for x in ["mmm", "yay", "arrrrrgh", "lulz", "sorry", "well", "anyhoo", "man","yup","ouch", "lol", "oh", "ugh", "no worries","cool", "haha" , "fingers crossed", "actually no","whoa", "wow", "yeah","yep"]) and ((row.target_surface_act == "Question") or (row.target_surface_act == "Assertion")) and (row.distance <= 3) ) ): l=1 else: l=0 return l |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #1 -- get dialogues finals = [] dialogues = cands.dialogue_num.drop_duplicates() for d in tqdm(dialogues): # 2 -- get segment list seg_list = get_seg_list(cands[cands.dialogue_num == d]) # 3 -- create seg pairs list seg_pairs = [] for i, s in enumerate(seg_list): for n in [j for j in reversed(range((i+1)-20, i+1)) if j>=0]: try: seg_pairs.append((seg_list[n], seg_list[i+1])) except IndexError: pass # 4 -- for each pair, pull row and append rules for s in seg_pairs: row = cands[(cands.source_id == s[0]) & (cands.target_id == s[1])] if row.empty: continue else: r_index = row.index[0] row = row.iloc[0] #since we know no Result relations are backwards, eliminate immediately backwards = cands[(cands.source_id == s[1]) & (cands.target_id == s[0])] if backwards.shape[0] > 0: b_index = backwards.index[0] finals.append((b_index, -1)) #we only look at ling --> ling cases if row.source_type != 'Segment' or row.target_type != 'Segment': link = 0 else: link_one = LF_Cont_L_L(row) if link_one: link = 1 else: link = 0 finals.append((r_index, link)) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def LF_Cont_NL_NL(row): if ((willMoveTheRobber(row.source_text) and itsXsTurnToRollTheDice(row.target_text) and row.source_emitter == row.target_emitter and row.distance < 6) or (row.distance == 1 and row.source_emitter == row.target_emitter and ((get(row.source_text) and get(row.target_text)) or (has_resources(row.source_text) and has_resources(row.target_text)) or (hasNpoints(row.source_text) and hasNpoints(row.target_text)))) ): l=1 else: l=0 return l |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #1 -- get dialogues finals = [] dialogues = cands.dialogue_num.drop_duplicates() for d in tqdm(dialogues): # 2 -- get segment list seg_list = get_seg_list(cands[cands.dialogue_num == d]) # 3 -- create seg pairs list seg_pairs = [] for i, s in enumerate(seg_list): for n in [j for j in reversed(range((i+1)-20, i+1)) if j>=0]: try: seg_pairs.append((seg_list[n], seg_list[i+1])) except IndexError: pass # 4 -- for each pair, pull row and append rules for s in seg_pairs: row = cands[(cands.source_id == s[0]) & (cands.target_id == s[1])] if row.empty: continue else: r_index = row.index[0] row = row.iloc[0] # make sure that if any backwards links exist they are also 0 backwards = cands[(cands.source_id == s[1]) & (cands.target_id == s[0])] if backwards.shape[0] > 0: b_index = backwards.index[0] finals.append((b_index, -1)) #we only look at ling --> ling cases if row.source_type != 'NonplayerSegment' or row.target_type != 'NonplayerSegment': link = 0 else: link_one = LF_Cont_NL_NL(row) if link_one: link = 1 else: link = 0 finals.append((r_index, link)) |