Esempio n. 1
0
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        arc = transition[2:-1]
        if transition.startswith("S"):
            configuration.shift()
        else:
            word1 = configuration.get_stack(0)
            word2 = configuration.get_stack(1)

            if transition.startswith('L'):
                configuration.add_arc(word1, word2, arc)
                configuration.remove_second_top_stack()
            elif transition.startswith('R'):
                configuration.add_arc(word2, word1, arc)
                configuration.remove_top_stack()
            else:
                print('Unknown case encountered')
                pdb.set_trace()

        return configuration
Esempio n. 2
0
    def apply(self, configuration: Configuration, transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        if transition.startswith("L"): # Left reduce
            top1 = configuration.get_stack(0)
            top2 = configuration.get_stack(1)

            configuration.remove_second_top_stack()

            label = transition[2:-1]

            configuration.add_arc(top1, top2, label)
        elif transition.startswith("R"):
            top1 = configuration.get_stack(0)
            top2 = configuration.get_stack(1)

            configuration.remove_top_stack()

            label = transition[2: -1]

            configuration.add_arc(top2, top1, label)
        else: # "S"
            configuration.shift()

        return configuration
Esempio n. 3
0
    def apply(self, configuration: Configuration, transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        #using get stack from configuration.py
        val_1, val_2 = configuration.get_stack(0), configuration.get_stack(1)

        #left reduce
        if transition[0]=='L': 
            configuration.remove_second_top_stack()
            configuration.add_arc(val_1, val_2, transition[2:-1])
        #right reduce
        elif transition[0]=='R':
            configuration.remove_top_stack()
            configuration.add_arc(val_2, val_1, transition[2:-1])
        else:
            configuration.shift()

        return configuration
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start

        top_stack, second_top_stack = configuration.get_stack(
            0), configuration.get_stack(1)
        label = transition[2:-1]  # Get the label for the transition

        if transition.startswith("L"):  # If transition is left-arc
            # Create an arc from word on top_stack to word on second_top_stack
            configuration.add_arc(top_stack, second_top_stack, label)
            # Remove word at second position from top of stack
            configuration.remove_second_top_stack()
        elif transition.startswith("R"):  # If transition is right-arc
            # Create an arc from word on second_top_stack to word on top_stack
            configuration.add_arc(second_top_stack, top_stack, label)
            # Remove word at top of stack
            configuration.remove_top_stack()
        else:  # If transition is shift
            configuration.shift()  # Perform shift operation

        return configuration
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start

        if transition[0] == 'L':
            head = configuration.get_stack(0)
            c = configuration.get_stack(1)
            label = transition[2:-1]
            configuration.remove_second_top_stack()
            configuration.add_arc(head, c, label)

        elif transition[0] == 'R':
            head = configuration.get_stack(1)
            c = configuration.get_stack(0)
            label = transition[2:-1]
            configuration.remove_top_stack()
            configuration.add_arc(head, c, label)

        else:
            configuration.shift()

        return configuration
Esempio n. 6
0
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        # t implies the type of transitions: LEFT-ARC, RIGHT-ARC or SHIFT (Nirve, 2004)

        # If t is a shift transition, call shift() defined in configuration
        if transition.startswith("S"):
            configuration.shift()
        # If t is a type of arc transition, extract label from it and add arc
        else:
            # Extract label from t. The format of 't' ,For example: L(root)
            label = transition[2:-1]
            # Get first two elements from stack
            s0, s1 = configuration.get_stack(0), configuration.get_stack(1)
            # If left arc, add an arc s0 -> s1 with label and remove s1 from the stack
            if transition.startswith("L"):
                configuration.add_arc(s0, s1, label)
                configuration.remove_second_top_stack()
            # If right arc, add an arc s1 -> s0 with label and remove s0 from the stack
            else:
                configuration.add_arc(s1, s0, label)
                configuration.remove_top_stack()

        return configuration
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        # Get the second top element
        stack1 = configuration.get_stack(1)
        # Get the top element
        stack2 = configuration.get_stack(0)

        # If the transition is right-arc, then add the arc from the second top element of the stack to the top element
        # and remove the top element of the stack.
        if transition.startswith("R"):
            configuration.add_arc(stack1, stack2, transition[2:-1])
            configuration.remove_top_stack()
        # If the transition is left-arc, then add the arc from the top element of the stack to the second top element
        # and remove the second top element of the stack.
        elif transition.startswith("L"):
            configuration.add_arc(stack2, stack1, transition[2:-1])
            configuration.remove_second_top_stack()
        # If the transition is not left-arc or right-arc, perform shift action from the input buffer to the stack.
        else:
            configuration.shift()
        return configuration
Esempio n. 8
0
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        # We first get the topmost and second topmost element of the stack
        wi = configuration.get_stack(0)
        wj = configuration.get_stack(1)

        # If the transition is a Right-Arc, then we create an arc from second topmost to topmost element
        # and pop the topmost element
        if transition.startswith('R'):
            configuration.add_arc(wj, wi, transition[2:-1])
            configuration.remove_top_stack()

        # If the transition is a Left-Arc, then we create an arc from topmost to the second topmost element
        # and pop the second topmost element
        elif transition.startswith('L'):
            configuration.add_arc(wi, wj, transition[2:-1])
            configuration.remove_second_top_stack()

        # Otherwise we just move the top of the buffer to top of the stack
        else:
            configuration.shift()

        return configuration
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start

        if transition.startswith("S"):
            configuration.shift()
        else:
            cur_label = transition[2:-1]
            # Get first two elements from stack
            w0 = configuration.get_stack(0)
            w1 = configuration.get_stack(1)
            # If left arc, add an arc s0 -> s1 with label and remove s1 from the stack
            if transition.startswith("L"):
                configuration.add_arc(w0, w1, cur_label)
                configuration.remove_second_top_stack()
            # If right arc, add an arc s1 -> s0 with label and remove s0 from the stack
            else:
                configuration.add_arc(w1, w0, cur_label)
                configuration.remove_top_stack()

        return configuration
Esempio n. 10
0
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        operand1 = configuration.get_stack(0)
        operand2 = configuration.get_stack(1)
        label = transition[2:-1]

        # left reduce operation.
        if transition.startswith("L"):
            configuration.add_arc(operand1, operand2, label)
            check = configuration.remove_second_top_stack()
            if not check:
                print("Only one element in the stack!")

        # right reduce operation.
        elif transition.startswith("R"):
            configuration.add_arc(operand2, operand1, label)
            check = configuration.remove_top_stack()
            if not check:
                print("Stack is empty!")

        # shift operation.
        elif transition == "S":
            configuration.shift()

        else:
            pass

        return configuration
Esempio n. 11
0
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        label = transition[2:-1]
        arc = transition[0]
        # print(label, arc)

        # LEFT, RIGHT OR SHIFT?
        if arc == 'S':
            if len(configuration.buffer) >= 1:
                configuration.shift()
        elif arc == 'L':
            if len(configuration.stack) >= 2:
                s1 = configuration.get_stack(0)
                s2 = configuration.get_stack(1)
                configuration.add_arc(s1, s2, label)
                configuration.remove_second_top_stack()
        elif arc == 'R':
            if len(configuration.stack) >= 2:
                s1 = configuration.get_stack(0)
                s2 = configuration.get_stack(1)
                configuration.add_arc(s2, s1, label)
                configuration.remove_top_stack()

        return configuration
Esempio n. 12
0
    def apply(self, configuration: Configuration,
              transition: str) -> Configuration:
        """
        =================================================================

        Implement arc standard algorithm based on
        Incrementality in Deterministic Dependency Parsing(Nirve, 2004):
        Left-reduce
        Right-reduce
        Shift

        =================================================================
        """
        # TODO(Students) Start
        #The buffer has words represented from 1 to n+1. Hence Stack will also have the same at any point
        #We will have to however map those back to words and then to word index
        #Ask Matt: should I use index mapping for the stack words?
        #Ask Matt: Is the last argument right in add_arc or should it be index as well?
        #Last argument can stay as an index for now becase it calls tree.set and refer tree.add for dtype
        if (transition[0:2] == 'L('):
            #Left Reduce
            #config.get_stack(0), config.get_stack(1)
            configuration.add_arc(configuration.get_stack(0),
                                  configuration.get_stack(1), transition[2:-1])
            configuration.remove_second_top_stack()
        elif (transition[0:2] == 'R('):
            #Right Reduce
            configuration.add_arc(configuration.get_stack(1),
                                  configuration.get_stack(0), transition[2:-1])
            configuration.remove_top_stack()
        else:
            #Shift
            configuration.shift()

        # TODO(Students) End
        return configuration