Acknowledgement relations are signaled by words like OK, Right, Right then, Good, Fine, etc.. It's often difficult to determine whether the acknowledgment signals an understanding of what was said, an acceptance of what was said or an acceptance and a signal to change the topic of conversation or move on. It's also often difficult to determine what is being acknowledged.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def LF_Acknowledgement_LL_case1(row): l=0 if (row.target_emitter in row.source_addressee.split(',') or row.source_addressee == 'All') and row.source_emitter != row.target_emitter: if any(x in row.target_text.lower() for x in acknowl+opinionWords+emojiManual) and row.target_surface_act == "Assertion" and row.distance==1: l=1 return l def LF_Acknowledgement_LL_case3(row): l=0 if (row.target_emitter in row.source_addressee.split(',') or row.source_addressee == 'All') \ and row.source_emitter != row.target_emitter and row.distance==1: if row.source_surface_act == "Assertion" \ and any(x in row.target_text.lower() for x in ["hi", "hey", "hello"]): l=1 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 58 | #1 -- get dialogues finals = [] dialogues = cands.dialogue_num.drop_duplicates() for d in tqdm(dialogues): target_memo = [] # 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 != 'Segment' or row.target_type != 'Segment': link = 0 else: if LF_Acknowledgement_LL_case1(row) or LF_Acknowledgement_LL_case3(row): if row.target_id in target_memo: link=0 else: link=1 target_memo.append(row.target_id) else: link = 0 finals.append((r_index, link)) |
1 2 3 4 5 6 7 8 9 10 | def LF_Acknowledgement_NL_L(row): #non-ling --> ling if ( ( itsXsTurnToBuildP(row.source_text) or satDownAtSeat(row.source_text) or wonthegame(row.source_text) or traded(row.source_text) or joinedTheGame(row.source_text) ) and (any( x in row.target_text.lower() for x in acknowl+opinionWords+emojiManual+helloWords) ) and (row.source_emitter != row.target_emitter) and (row.distance <= 9) ): 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 != 'Segment': link = 0 else: link_one = LF_Acknowledgement_NL_L(row) if link_one: link = 1 else: link = 0 finals.append((r_index, link)) |