@@ -322,20 +322,23 @@ def get_statement_by_uuid(statements, uuid):
322
322
return None
323
323
324
324
325
- def make_unique_label (labels_so_far , new_label ):
326
- """Make new_label a unique label by appeneding spaces."""
327
- while new_label in labels_so_far :
328
- new_label += ' '
329
- return new_label
330
-
325
+ def dict_value_appears_multiple_times (d , value ):
326
+ """Returns True iff the given value is mapped to multiple times in this
327
+ dictionary."""
328
+ count = 0
329
+ for k , v in d .items ():
330
+ if v == value :
331
+ count += 1
332
+ return count > 1
331
333
332
334
def make_influence_map_labels_natural_language (im , pysb_model , indra_model ):
333
335
"""Replaces the labels of the influence map with natural language labels.
334
336
"""
335
337
# Get the name of all the rules in the pysb model
336
338
rule_names = [rule .name for rule in pysb_model .rules ]
337
339
338
- relabel_map = {}
340
+ relabel_map_english = {}
341
+ relabel_map_english_and_rule = {}
339
342
for annotation in pysb_model .annotations :
340
343
if annotation .subject in rule_names :
341
344
name = annotation .subject
@@ -346,10 +349,24 @@ def make_influence_map_labels_natural_language(im, pysb_model, indra_model):
346
349
347
350
# Convert the statement into English
348
351
assembler = EnglishAssembler ([s ])
349
- text = assembler .make_model ()
350
- text = make_unique_label (relabel_map .values (), text )
351
- text += '\n ' + name
352
- relabel_map [name ] = text
352
+
353
+ english_text = assembler .make_model ()
354
+ english_and_rule = english_text + ' (' + name + ')'
355
+
356
+ relabel_map_english [name ] = english_text
357
+ relabel_map_english_and_rule [name ] = english_and_rule
358
+
359
+ # Use only the English text if that is unambiguous, otherwise include
360
+ # the rule name too
361
+ relabel_map = {}
362
+ for before in relabel_map_english :
363
+ english_text = relabel_map_english [before ]
364
+ if dict_value_appears_multiple_times (relabel_map_english ,
365
+ english_text ):
366
+ relabel_map [before ] = relabel_map_english_and_rule [before ]
367
+ else :
368
+ relabel_map [before ] = english_text
369
+
353
370
im = networkx .relabel_nodes (im , relabel_map )
354
371
return im
355
372
0 commit comments