Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
    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)