def embed_n_np(self, t: nltk.Tree): # RB - Adverb # RBR - Adverb, comparative # RBS - Adverb, superlative try: t.label() except AttributeError: # print(t) return try: for child in t: #t = nltk.ParentedTree.convert(t) if child.label() == child.right_sibling().label() == "NN": # noun = child noun = nltk.ParentedTree("NN", [child[0]]) np = nltk.ParentedTree("NP", [noun]) child_pos = self.get_position(child, t) t.remove(child) t.insert(child_pos, np) t = nltk.ParentedTree.convert(t) parent = t.parent() parent = nltk.ParentedTree.convert(parent) except Exception: #print("swallow hard!") pass for child in t: self.embed_n_np(child)
def swap_tree_given_left(left_tree: nltk.Tree, displacement: List[int], new_words=List[str]): """Swap left node with right node within a parent node.""" nodes = [left_tree] right_tree = left_tree.right_sibling() parent_tree = left_tree.parent() # Get all tree pointer for disp in displacement: # disp = -1 indicates that is a new word, skip if disp == -1: continue nodes.append(right_tree) right_tree = right_tree.right_sibling() if right_tree == None: break # Remove all siblings and left-most self for node in nodes: parent_tree.remove(node) # Append with new displacement for disp in displacement: # disp = -1 indicates that is a new word if disp == -1: new_word = PTree('NEW', [new_words.pop(0)]) parent_tree.append(new_word) else: parent_tree.append(nodes[disp]) return parent_tree
def build_grammar_str_from_left_most(tree: nltk.Tree): left_pt = tree.left_sibling() right_pt = tree.right_sibling() parent_pt = tree.parent() grammar_str = None if parent_pt != None: grammar_str = f"{parent_pt.label()} -> {tree.label()}" # Build grammar from leftmost node in the subtree if left_pt == None and right_pt != None: while right_pt != None: grammar_str += f" {right_pt.label()}" right_pt = right_pt.right_sibling() return grammar_str
def swap_tree_given_left(left_tree: nltk.Tree, displacement: list): """ swap left node with right node within a parent node """ nodes = [left_tree] right_tree = left_tree.right_sibling() parent_tree = left_tree.parent() # Get all tree pointer for i in range(len(displacement) - 1): nodes.append(right_tree) # Remove all siblings and left-most self for node in nodes: parent_tree.remove(node) # Append with new displacement for disp in displacement: parent_tree.append(nodes[disp]) return parent_tree
def convert_adv_deg(self, t: nltk.Tree): # RB - Adverb # RBR - Adverb, comparative # RBS - Adverb, superlative try: t.label() except AttributeError: # print(t) return if t.label() in ["ADJP", "ADVP"]: phrase = t try: if phrase[0].label() == "RB" and \ phrase[1].label() in ["RB", "JJ"]: #t = nltk.ParentedTree.convert(t) adv = phrase[0] if adv[0] in ["too", "very"]: if len(t) > 1: if adv.right_sibling().label() in ["RB", "JJ"]: deg = nltk.ParentedTree("Deg", [adv[0]]) t.remove(t[0]) t.insert(0, deg) t = nltk.ParentedTree.convert(t) parent = t.parent() parent = nltk.ParentedTree.convert(parent) except: #print("swallow hard!") pass for child in t: self.convert_adv_deg(child)