Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
name (str):
The span of text to be removed from the linking dictionary
full_unlink (boolean):
If True, the `name` will not only be removed from the given `cui` but from
each concept in the database that is associated with this name.
Examples:
>>> # To never again link C0020538 to HTN
>>> cat.unlink_concept_name('C0020538', 'htn', False)
'''
names = [name, name.lower()]
# Unlink a concept from a name
p_name, tokens, _, _ = get_all_from_name(name=name, source_value=name, nlp=self.nlp, version='clean')
# Add the clean version of the name
names.append(p_name)
# Get the raw version
p_name, tokens, _, _ = get_all_from_name(name=name, source_value=name, nlp=self.nlp, version='raw')
# Append the raw evrsion
names.append(p_name)
if tokens[-1].lower() == "s":
# Remove last 's' - a stupid bug
names.append(p_name[0:-1])
for name in names:
cuis = [cui]
if full_unlink and name in self.cdb.name2cui:
cuis = list(self.cdb.name2cui[name])
for cui in cuis:
if cui in self.cdb.cui2names and name in self.cdb.cui2names[cui]:
self.cdb.cui2names[cui].remove(name)
if len(self.cdb.cui2names[cui]) == 0:
original_name=source_val, is_pref_name=False, desc=desc, tui=tui)
all_cuis.extend(self.cdb.name2cui[p_name])
p_name, tokens, snames, tokens_vocab = get_all_from_name(name=source_val,
source_value=source_val,
nlp=self.nlp, version='clean')
# This will add a new concept if the cui doesn't exist
# or link the name to an existing concept if it exists.
if cui not in self.cdb.cui2names or p_name not in self.cdb.cui2names[cui]:
if not only_new or p_name not in self.cdb.name2cui:
self.cdb.add_concept(cui, p_name, onto, tokens, snames, tokens_vocab=tokens_vocab,
original_name=source_val, is_pref_name=False, desc=desc, tui=tui)
all_cuis.extend(self.cdb.name2cui[p_name])
# Add the raw also if needed
p_name, tokens, snames, tokens_vocab = get_all_from_name(name=source_val,
source_value=source_val,
nlp=self.nlp, version='raw')
if cui not in self.cdb.cui2names or p_name not in self.cdb.cui2names[cui] or is_pref_name:
if not only_new or p_name not in self.cdb.name2cui:
self.cdb.add_concept(cui, p_name, onto, tokens, snames, tokens_vocab=tokens_vocab,
original_name=source_val, is_pref_name=is_pref_name, desc=desc, tui=tui)
all_cuis.extend(self.cdb.name2cui[p_name])
# Fix for ntkns in cdb
if p_name in self.cdb.name2ntkns:
if len(tokens) not in self.cdb.name2ntkns[p_name]:
self.cdb.name2ntkns[p_name].add(len(tokens))
return list(set(all_cuis))
def _add_name(self, cui, source_val, is_pref_name, only_new=False, desc=None, tui=None):
onto = 'def'
all_cuis = []
if cui in self.cdb.cui2ontos and self.cdb.cui2ontos[cui]:
onto = list(self.cdb.cui2ontos[cui])[0]
# Add the original version of the name just lowercased
p_name, tokens, snames, tokens_vocab = get_all_from_name(name=source_val,
source_value=source_val,
nlp=self.nlp, version='none')
if cui not in self.cdb.cui2names or p_name not in self.cdb.cui2names[cui]:
if not only_new or p_name not in self.cdb.name2cui:
self.cdb.add_concept(cui, p_name, onto, tokens, snames, tokens_vocab=tokens_vocab,
original_name=source_val, is_pref_name=False, desc=desc, tui=tui)
all_cuis.extend(self.cdb.name2cui[p_name])
p_name, tokens, snames, tokens_vocab = get_all_from_name(name=source_val,
source_value=source_val,
nlp=self.nlp, version='clean')
# This will add a new concept if the cui doesn't exist
# or link the name to an existing concept if it exists.
if cui not in self.cdb.cui2names or p_name not in self.cdb.cui2names[cui]:
if not only_new or p_name not in self.cdb.name2cui:
self.cdb.add_concept(cui, p_name, onto, tokens, snames, tokens_vocab=tokens_vocab,
def unlink_concept_name(self, cui, name, full_unlink=True):
names = [name, name.lower()]
# Unlink a concept from a name
p_name, tokens, _, _ = get_all_from_name(name=name, source_value=name, nlp=self.nlp, version='clean')
# Add the clean version of the name
names.append(p_name)
# Get the raw version
p_name, tokens, _, _ = get_all_from_name(name=name, source_value=name, nlp=self.nlp, version='raw')
# Append the raw evrsion
names.append(p_name)
if tokens[-1].lower() == "s":
# Remove last 's' - a stupid bug
names.append(p_name[0:-1])
for name in names:
cuis = [cui]
if full_unlink and name in self.cdb.name2cui:
cuis = list(self.cdb.name2cui[name])
original_name=source_val, is_pref_name=False, desc=desc, tui=tui)
all_cuis.extend(self.cdb.name2cui[p_name])
p_name, tokens, snames, tokens_vocab = get_all_from_name(name=source_val,
source_value=source_val,
nlp=self.nlp, version='clean')
# This will add a new concept if the cui doesn't exist
# or link the name to an existing concept if it exists.
if cui not in self.cdb.cui2names or p_name not in self.cdb.cui2names[cui]:
if not only_new or p_name not in self.cdb.name2cui:
self.cdb.add_concept(cui, p_name, onto, tokens, snames, tokens_vocab=tokens_vocab,
original_name=source_val, is_pref_name=False, desc=desc, tui=tui)
all_cuis.extend(self.cdb.name2cui[p_name])
# Add the raw also if needed
p_name, tokens, snames, tokens_vocab = get_all_from_name(name=source_val,
source_value=source_val,
nlp=self.nlp, version='raw')
if cui not in self.cdb.cui2names or p_name not in self.cdb.cui2names[cui] or is_pref_name:
if not only_new or p_name not in self.cdb.name2cui:
self.cdb.add_concept(cui, p_name, onto, tokens, snames, tokens_vocab=tokens_vocab,
original_name=source_val, is_pref_name=is_pref_name, desc=desc, tui=tui)
all_cuis.extend(self.cdb.name2cui[p_name])
# Fix for ntkns in cdb
if p_name in self.cdb.name2ntkns:
if len(tokens) not in self.cdb.name2ntkns[p_name]:
self.cdb.name2ntkns[p_name].add(len(tokens))
return list(set(all_cuis))
def unlink_concept_name(self, cui, name, full_unlink=True):
names = [name, name.lower()]
# Unlink a concept from a name
p_name, tokens, _, _ = get_all_from_name(name=name, source_value=name, nlp=self.nlp, version='clean')
# Add the clean version of the name
names.append(p_name)
# Get the raw version
p_name, tokens, _, _ = get_all_from_name(name=name, source_value=name, nlp=self.nlp, version='raw')
# Append the raw evrsion
names.append(p_name)
if tokens[-1].lower() == "s":
# Remove last 's' - a stupid bug
names.append(p_name[0:-1])
for name in names:
cuis = [cui]
if full_unlink and name in self.cdb.name2cui:
cuis = list(self.cdb.name2cui[name])
for cui in cuis:
if cui in self.cdb.cui2names and name in self.cdb.cui2names[cui]:
self.cdb.cui2names[cui].remove(name)
if len(self.cdb.cui2names[cui]) == 0: