From 499e53ce615a0e19dad6daa2cae82d06bf3851b8 Mon Sep 17 00:00:00 2001 From: Rik Date: Mon, 23 Sep 2019 21:19:54 -0400 Subject: [PATCH] getting ready to fix json rep --- pytrips/helpers/helpers.py | 4 +++ pytrips/ontology.py | 51 ++++++++++++++++++++++---------------- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/pytrips/helpers/helpers.py b/pytrips/helpers/helpers.py index dbea8fe..9509dae 100644 --- a/pytrips/helpers/helpers.py +++ b/pytrips/helpers/helpers.py @@ -30,12 +30,16 @@ def get_wn_key(k): if not wn: log.info("wn not found when trying to lookup " + k) return None + if not k: + return None if type(k) is Synset: return k if k.startswith("wn::"): k = k[4:] while k.count(":") < 4: k += ":" + if "%" not in k: + return None try: res = wn.lemma_from_key(k).synset() if not res: diff --git a/pytrips/ontology.py b/pytrips/ontology.py index 3c890a3..5520ca0 100644 --- a/pytrips/ontology.py +++ b/pytrips/ontology.py @@ -22,20 +22,28 @@ def get_nth_label(self, n): return _string.ascii_uppercase[n] return self.get_nth_label(n // 26) + self.get_nth_label(n % 26) + def get_label(self, name): + res = get_wn_key(name.split("::")[-1]) + if res: + return res.name() + return name.lower() + def escape_label(self, s): + if not s: + return "" if type(s) is str: - return s + return "w::"+s if type(s) is Synset: - return s.lemmas()[0].key()#.replace("%", ".") + return "wn::"+s.lemmas()[0].key()#.replace("%", ".") if type(s) is TripsType: - return s.name - return str(s) + return "ont::"+s.name + return "any::"+str(s) def node(self, name): name = self.escape_label(name) if name in self.nodes: return - label = self.get_nth_label(len(self.nodes)) + label = self.get_label(name) self.nodes[name] = label def edge(self, source, target, label=""): @@ -85,22 +93,23 @@ def __init__(self, ontology, lexicon): self._words = ddict(lambda: ddict(set)) self._wordnet_index = ddict(list) self.__definitions = ddict(list) - for word, entry_list in lexicon["words"].items(): - for entry in entry_list: - name = entry["name"].lower() - #cat = entry["cat"].lower() - entries = lexicon["entries"][entry["entry"]] - pos = entries['pos'].lower() - # TODO: incorporate the lexicon - if len(entries['senses']) > 1: - logger.info(entries["name"] + " has " + str(len(entries["senses"])) + " senses") - for values in entries["senses"]: - if "lf_parent" not in values.keys(): - c = "no_parent" - else: - c = values["lf_parent"].lower() - self._words[pos][word.lower()].add(c) - revwords[c].add((word+"."+pos).lower()) + if lexicon: + for word, entry_list in lexicon["words"].items(): + for entry in entry_list: + name = entry["name"].lower() + #cat = entry["cat"].lower() + entries = lexicon["entries"][entry["entry"]] + pos = entries['pos'].lower() + # TODO: incorporate the lexicon + if len(entries['senses']) > 1: + logger.info(entries["name"] + " has " + str(len(entries["senses"])) + " senses") + for values in entries["senses"]: + if "lf_parent" not in values.keys(): + c = "no_parent" + else: + c = values["lf_parent"].lower() + self._words[pos][word.lower()].add(c) + revwords[c].add((word+"."+pos).lower()) for s in ontology: arguments = [TripsRestriction(x["role"],