Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions src/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -1415,14 +1415,22 @@ def path_lens_from_arg(xa_id, seen_xas, all_nodes, rel_type='RA', speaker=False,
path_list = []

if verbose:
print("Targeting I-node(s)", i_node_concls)
print("Targeting conclusion I-node(s)", i_node_concls)

for i_concl in i_node_concls:
if verbose:
print(f"\tCurrently on {i_concl}")
if speaker:
if verbose:
print(f"\t\t{rel_type}-nodes with edge to {i_concl}: {[n for n in all_nodes if i_concl in all_nodes[n]['ein']]}")
xas_out = [n for n in all_nodes if i_concl in all_nodes[n]['ein']
and all_nodes[n]['type'] == rel_type
and len(all_nodes[n]['speaker']) != 0
and all_nodes[n]['speaker'][0] == target_spkr]

else:
if verbose:
print(f"\t\t{rel_type}-nodes with edge to {i_concl}: {[n for n in all_nodes if i_concl in all_nodes[n]['ein']]}")
xas_out = [n for n in all_nodes if i_concl in all_nodes[n]['ein']
and all_nodes[n]['type'] == rel_type]
if verbose:
Expand Down Expand Up @@ -1504,11 +1512,14 @@ def arg_depths(xaif, rel_type='RA', speaker=False, verbose=False, skip_altgive=T
for xa in spkr_xa_all:
spkr_starts += initial_arg(xa, [], all_nodes, speaker=speaker, verbose=verbose, rel_type=rel_type, skip_altgive=skip_altgive)
spkr_starts = list(set(spkr_starts))

if verbose:
print(f"Starters for {spkr} are: ", spkr_starts)

# Follow each argument path from the first RAs in each path
for starter_arg in spkr_starts:
if verbose:
print("Looking for argument ", starter_arg)
print("\n!!! New Start !!! Looking for argument ", starter_arg)
new_path_lens = path_lens_from_arg(starter_arg, [], all_nodes, speaker=speaker, verbose=verbose)
xa_depths[spkr][f'{depth_type}_depths'] = xa_depths[spkr][f'{depth_type}_depths'] + new_path_lens

Expand All @@ -1524,10 +1535,13 @@ def arg_depths(xaif, rel_type='RA', speaker=False, verbose=False, skip_altgive=T
starts += initial_arg(xa, [], all_nodes, speaker=speaker, verbose=verbose, rel_type=rel_type)
starts = list(set(starts))

if verbose:
print("Starters are: ", starts)

# Follow each argument path from the first RAs in each path
for starter_arg in starts:
if verbose:
print("Looking for argument ", starter_arg)
print("\n!!! New Start !!! Looking for argument ", starter_arg)
new_path_lens = path_lens_from_arg(starter_arg, [], all_nodes, rel_type=rel_type, speaker=speaker, verbose=verbose)
xa_depths[f'{depth_type}_depths'] = xa_depths[f'{depth_type}_depths'] + new_path_lens

Expand Down
55 changes: 41 additions & 14 deletions src/xaif_toolbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ def add_speakers(all_nodes, verbose=False):
splits = all_nodes[n]['text'].split(':')
if len(splits) < 2:
spkr = ''
print(f"L-node with no recognisable speaker:\t{all_nodes[n]['nodeID']}")
# print(f"L-node with no recognisable speaker:\t{all_nodes[n]['nodeID']}")
else:
spkr = splits[0].strip()

Expand All @@ -332,10 +332,25 @@ def add_speakers(all_nodes, verbose=False):
for ya_out in all_nodes[ya]['eout']:
if all_nodes[ya_out]['type'] == 'I':
if spkr != '':
all_nodes[ya_out]['saidby'].append(spkr)
said[spkr].append(all_nodes[ya_out]['nodeID'])

all_nodes[ya_out]['introby'].append(all_nodes[n]['nodeID'])
if all_nodes[ya]['text'] != 'Disagreeing':
all_nodes[ya_out]['saidby'].append(spkr)
said[spkr].append(all_nodes[ya_out]['nodeID'])

# If I-node has no known introduction, assume this is it
if len(all_nodes[ya_out]['introby']) == 0:
# print(f"First finding of intro to {ya_out} is {all_nodes[n]['nodeID']}")
all_nodes[ya_out]['introby'].append(all_nodes[n]['nodeID'])
# Otherwise keep the earliest one
else:
# print(f"Already found an intro to {ya_out}: {all_nodes[ya_out]['introby']}")
# Get ID of L-node associated as introducing this I-node
prev_intro = all_nodes[ya_out]['introby'][0]
# Keep whichever one is earlier chronologically
# i.e. if prev 'intro' is actually later than current L-node, replace it
if all_nodes[prev_intro]['chron'] > all_nodes[n]['chron']:
# print(f"Prev 'intro' {prev_intro} is newer ({all_nodes[prev_intro]['chron']}) than current {n} ({all_nodes[n]['chron']})")
all_nodes[ya_out]['introby'] = [n]
# print(f"--> intro for {ya_out} is now {all_nodes[ya_out]['introby']}")
# Reported speech: I-node should be attributed to the quoting speaker


Expand Down Expand Up @@ -370,24 +385,36 @@ def add_speakers(all_nodes, verbose=False):

splits = all_nodes[l2]['text'].split(':')
if len(splits) < 2:
print(f"L-node with no recognisable speaker:\t{all_nodes[n]['nodeID']}")
# print(f"L-node with no recognisable speaker:\t{all_nodes[n]['nodeID']}")
spkr = ''
else:
spkr = splits[0].strip()

for ta_out in all_nodes[n]['eout']:
if all_nodes[ta_out]['type'] == 'YA':
for i_out in all_nodes[ta_out]['eout']:
if all_nodes[i_out]['type'] == 'I' and spkr != '':
if all_nodes[ta_out]['type'] == 'YA' and all_nodes[ta_out]['text'] != 'Disagreeing':
for ya_out in all_nodes[ta_out]['eout']:
if all_nodes[ya_out]['type'] == 'I' and spkr != '':
# Record node-wise
all_nodes[i_out]['saidby'].append(spkr)
all_nodes[i_out]['introby'].append(l2)
all_nodes[ya_out]['saidby'].append(spkr)

# If I-node has no known introduction, assume this is it
if len(all_nodes[ya_out]['introby']) == 0:
all_nodes[ya_out]['introby'].append(l2)
# Otherwise keep the earliest one
else:
prev_intro = all_nodes[ya_out]['introby'][0]
# if prev 'intro' is actually later than current L-node, replace it
if all_nodes[prev_intro]['chron'] > all_nodes[l2]['chron']:
# print(f"Prev 'intro' {prev_intro} is newer ({all_nodes[prev_intro]['chron']}) than current {n} ({all_nodes[n]['chron']})")
all_nodes[ya_out]['introby'] = [l2]
# print(f"--> intro for {ya_out} is now {all_nodes[ya_out]['introby']}")


# Record speaker-wise
if spkr in said:
said[spkr].append(all_nodes[i_out]['nodeID'])
said[spkr].append(all_nodes[ya_out]['nodeID'])
else:
said[spkr] = all_nodes[i_out]['nodeID']
said[spkr] = all_nodes[ya_out]['nodeID']


# Adding speaker attribution to arg relations based on speaker of L-nodes descended from the anchoring TA
Expand Down Expand Up @@ -473,7 +500,7 @@ def add_agreement(all_nodes):
if all_nodes[n]['type'] == 'YA' and all_nodes[n]['text'] == ('Agreeing' or 'Asserting'):
for e_in in all_nodes[n]['ein']:
for e_out in all_nodes[n]['eout']:
if all_nodes[e_in]['type'] == 'L' and all_nodes[e_out]['type'] == 'I':
if (all_nodes[e_in]['type'] == 'L' or all_nodes[e_in]['type'] == 'TA') and all_nodes[e_out]['type'] == 'I':
all_nodes[e_out]['agree'] = all_nodes[e_out]['agree'] + all_nodes[e_in]['speaker']
# all_nodes[e_out]['agree'].append(all_nodes[e_in]['speaker'])

Expand Down