Beispiel #1
0
    def extend(self, slot):
        from MeterPosition import MeterPosition
        self.totalScore = None
        self.numSlots += 1

        extendedParses = [self]

        # positions containing just the slot

        sPos = MeterPosition(self.meter, 's')
        sPos.append(slot)
        wPos = MeterPosition(self.meter, 'w')
        wPos.append(slot)

        if len(self.positions) == 0:
            wParse = copy(self)
            self.positions.append(sPos)
            wParse.positions.append(wPos)
            extendedParses.append(wParse)

        else:
            lastPos = self.positions[-1]

            if lastPos.meterVal == 's':
                if len(lastPos.slots) < self.meter.maxS() and not slot.issplit:
                    sParse = copy(
                        self)  # parse with extended final 's' position
                    sParse.positions[-1].append(slot)
                    extendedParses.append(sParse)
                self.positions.append(wPos)

            else:
                if len(lastPos.slots) < self.meter.maxW() and not slot.issplit:
                    wParse = copy(
                        self)  # parse with extended final 'w' position
                    wParse.positions[-1].append(slot)
                    extendedParses.append(wParse)
                self.positions.append(sPos)

            # assign violation scores for the (completed) penultimate position

            for constraint in self.constraints:
                vScore = constraint.violationScore(self.positions[-2])
                if vScore == "*":
                    self.constraintScores[constraint] = "*"
                else:
                    self.constraintScores[constraint] += vScore

        if self.numSlots == self.totalSlots:

            # assign violation scores for the (completed) ultimate position
            for parse in extendedParses:
                for constraint in self.constraints:
                    vScore = constraint.violationScore(parse.positions[-1])
                    if vScore == "*":
                        parse.constraintScores[constraint] = "*"
                    else:
                        parse.constraintScores[constraint] += vScore

        return extendedParses
Beispiel #2
0
	def extend(self, slot):
		from MeterPosition import MeterPosition
		self.totalScore = None
		self.numSlots += 1
	
		extendedParses = [self]
	
		# positions containing just the slot
		
		sPos = MeterPosition(self.meter, 's')
		sPos.append(slot)
		wPos = MeterPosition(self.meter, 'w')
		wPos.append(slot)
	
		if len(self.positions) == 0:
			wParse = copy(self)
			self.positions.append(sPos)
			wParse.positions.append(wPos)
			extendedParses.append(wParse)
			
		else:
			lastPos = self.positions[-1]
			
			if lastPos.meterVal == 's':
				if len(lastPos.slots) < self.meter.maxS() and not slot.issplit:
					sParse = copy(self) # parse with extended final 's' position
					sParse.positions[-1].append(slot)
					extendedParses.append(sParse)
				self.positions.append(wPos)
					
			else:
				if len(lastPos.slots) < self.meter.maxW() and not slot.issplit:
					wParse = copy(self) # parse with extended final 'w' position
					wParse.positions[-1].append(slot)
					extendedParses.append(wParse)
				self.positions.append(sPos)
				
			# assign violation scores for the (completed) penultimate position

			## EXTRAMETRICAL?
			pos_i=len(self.positions)-2
			for constraint in self.constraints:
				vScore = constraint.violationScore(self.positions[-2], pos_i=pos_i,slot_i=self.numSlots-1,num_slots=self.totalSlots,all_positions=self.positions,parse=self)
				if vScore == "*":
					self.constraintScores[constraint] = "*"
				else:
					self.constraintScores[constraint] += vScore
				
		if self.numSlots == self.totalSlots:

			# assign violation scores for the (completed) ultimate position
			for parse in extendedParses:
				for constraint in self.constraints:
					vScore = constraint.violationScore(parse.positions[-1], pos_i=len(parse.positions)-1,slot_i=self.numSlots-1,num_slots=self.totalSlots,all_positions=parse.positions,parse=parse)
					if vScore == "*":
						parse.constraintScores[constraint] = "*"
					else:
						parse.constraintScores[constraint] += vScore
				
		return extendedParses
Beispiel #3
0
    def extend(self, slot):
        #logging.debug('>> extending self (%s) with slot (%s)',self,slot)
        from MeterPosition import MeterPosition
        self.totalScore = None
        self.numSlots += 1

        extendedParses = [self]

        # positions containing just the slot

        sPos = MeterPosition(self.meter, 's')
        sPos.append(slot)
        wPos = MeterPosition(self.meter, 'w')
        wPos.append(slot)

        if len(self.positions) == 0:
            wParse = copy(self)
            self.positions.append(sPos)
            wParse.positions.append(wPos)
            extendedParses.append(wParse)

        else:
            lastPos = self.positions[-1]

            if lastPos.meterVal == 's':
                if len(lastPos.slots) < self.meter.maxS() and not slot.issplit:
                    sParse = copy(
                        self)  # parse with extended final 's' position
                    sParse.positions[-1].append(slot)
                    extendedParses.append(sParse)
                self.positions.append(wPos)

            else:
                if len(lastPos.slots) < self.meter.maxW() and not slot.issplit:
                    wParse = copy(
                        self)  # parse with extended final 'w' position
                    wParse.positions[-1].append(slot)
                    extendedParses.append(wParse)
                self.positions.append(sPos)

            # assign violation scores for the (completed) penultimate position

            ## EXTRAMETRICAL?
            pos_i = len(self.positions) - 2
            for constraint in self.constraints:
                vScore = constraint.violationScore(
                    self.positions[-2],
                    pos_i=pos_i,
                    slot_i=self.numSlots - 1,
                    num_slots=self.totalSlots,
                    all_positions=self.positions,
                    parse=self)
                if vScore == "*":
                    self.constraintScores[constraint] = "*"
                else:
                    self.constraintScores[constraint] += vScore

        if self.numSlots == self.totalSlots:

            # assign violation scores for the (completed) ultimate position
            for parse in extendedParses:
                for constraint in self.constraints:
                    vScore = constraint.violationScore(
                        parse.positions[-1],
                        pos_i=len(parse.positions) - 1,
                        slot_i=self.numSlots - 1,
                        num_slots=self.totalSlots,
                        all_positions=parse.positions,
                        parse=parse)
                    if vScore == "*":
                        parse.constraintScores[constraint] = "*"
                    else:
                        parse.constraintScores[constraint] += vScore

        #logging.debug('>> self extended to be (%s) with extendedParses (%s)',self,extendedParses)
        return extendedParses