Ejemplo n.º 1
0
 def buildFrame(self, verb, frame):
   
   scf = SCF()
   scf.verb = verb
   
   arguments = frame.upper().split(' ')
   i = 1
   for arg in arguments:
     if arg.startswith('NP'):
       element = Element(sintax = 'NP', element='NP', position = i, relevance = 2)
     elif arg == 'V':
       element = Element(sintax = 'V', element='V', position = i, relevance = 1)
     elif arg.startswith('PP'):
       element = Element(sintax = 'PP', element='PP', position = i, relevance = 3)
     elif arg.startswith('S'):
       element = Element(sintax = 'VP', element='VP', position = i, relevance = 4)
     elif arg.startswith('ADJ'):
       element = Element(sintax = 'ADJP', element='ADJP', position = i, relevance = 5)
     elif arg.startswith('ADV'):
       element = Element(sintax = 'ADVP', element='ADVP', position = i, relevance = 6)
     else:
       continue
     scf.elements.append(element)
     i += 1
     
   return scf    
 def buildAuxiliaryFrame(self, verb):
   frame = SCF()
   frame.verb = verb.lemma
   frame.position = verb.id
   verbElement = Element(sintax = 'AUX', element = 'AUX', relevance = 0, position = verb.id, raw = verb.word)
   frame.elements.append(verbElement)
   return frame
  def extract(self, sentence):
    raspSentence = self.buildSentence(sentence)
    
    verbs = raspSentence.getVerbs()
    frames = []
    for verb in verbs:
      frame = SCF()
      frame.verb = verb.word
      frame.isPassive = verb.isPassive

      verbElement = Element(sintax = 'V', element = 'V', relevance = 0, position = verb.id, raw = verb.word)
      frame.elements.append(verbElement)

      for child in verb.children:
        element = self.buildElement(child)
        if element:
          frame.elements.append(element)
          
      frames.append(frame)

    return frames
  def buildFrame(self, verb, subcat, prep = None):
    frames = []
    frame = SCF()
    frame.verb = verb
    
    if subcat == "TD": 
      element = Element(sintax = 'NP', element='NP', position = 1, relevance = 1)  
      frame.elements.append(element)   
    elif subcat == 'AUX':
      element = Element(sintax = 'AUX', element='AUX', position = 1, relevance = 1)  
      frame.elements.append(element)   
    elif subcat == 'TI':
      complement = ''
      if prep:
        complement = '[%s]' % (prep)
      element = Element(sintax = 'PP', element='PP%s' % (complement), position = 1, relevance = 2)  
      frame.elements.append(element)   
    elif subcat == 'BI':
      complement = ''
      if prep:
        complement = '[%s]' % (prep)
      element = Element(sintax = 'NP', element='NP', position = 1, relevance = 1)  
      frame.elements.append(element) 
      element = Element(sintax = 'PP', element='PP%s' % (complement), position = 2, relevance = 2)  
      frame.elements.append(element)  
      if config.builder.order == 'position':
        frames.append(frame)

        frame = SCF()
        frame.verb = verb
        element = Element(sintax = 'PP', element='PP%s' % (complement), position = 1, relevance = 2)  
        frame.elements.append(element) 
        element = Element(sintax = 'NP', element='NP', position = 2, relevance = 1)  
        frame.elements.append(element) 
    elif subcat == 'INT':
      element = Element()
    
    frames.append(frame)
    
    return frames    
Ejemplo n.º 5
0
  def extract(self, framenetItem):
    frames = []

    sintax = framenetItem.attrib['POS']
    if sintax <> 'V':
      return frames

    verb = XmlUtils.findall(self.namespace, framenetItem, 'lexeme')[0].attrib['name']
    scfs = XmlUtils.findall(self.namespace, framenetItem, './valences/FEGroupRealization/pattern')
    
    for scf in scfs:
      frame = SCF()
      frame.verb = verb
      scfElements = XmlUtils.findall(self.namespace, scf, './valenceUnit')
      i = 1
      for scfElement in scfElements:
        element = self.buildElement(scfElement) 
        if element:
          element.position = i
          frame.elements.append(element)
          i += 1
      frames.append(frame)
    
    return frames
  def extract(self, sentence):
    
    palavrasSentence = self.buildSentence(sentence)
    #sentence.html = palavrasSentence.toHTML()

    verbs = palavrasSentence.getVerbs()
    frames = []
    for verb in verbs:

      frame = SCF()
      
      isVerbSer = False
      
      verbWord = verb.word
      if verb.isAuxialiary():
        verbCore, verbWord = palavrasSentence.searchCoreVerb(verb)
        
        if not verbCore:
          continue
        
        frames.append(self.buildAuxiliaryFrame(verb))
        verb = verbCore[len(verbCore)-1]
          
        for verbSer in verbCore:
          if verbSer.lemma == 'ser' and verb.father and verb.father.id == verbSer.id:
            isVerbSer = True
            
        if isVerbSer and len(verb.morphos) > 1 and 'PCP' in verb.morphos:
          frame.isPassive = True
        
        verb.coreVerb = verbCore
        verb.hasAuxiliary = True

      # insert verb on the frame
      frame.verb = verb.lemma
      frame.position = verb.id
      verbElement = Element(sintax = 'V', element = 'V', relevance = 0, position = verb.id, raw = verbWord)
      frame.elements.append(verbElement)

      hasSubject = False
      # build frame on main verb dependencies
      for child in verb.children:
        element = self.buildElement(child)
        if element:
          if element.sintax == 'SUBJ':
            hasSubject = True
          frame.elements.append(element)

      # if sentence has a auxiliary verb needs a correction to point SUBJ to main verb
      if verb.hasAuxiliary:
        core = verb.coreVerb
        auxiliary = palavrasSentence.tokens[core[0].id]
        for child in auxiliary.children:
          if "SUBJ" == child.function:
            element = self.buildElement(child)
            if element:
              frame.elements.append(element)
              hasSubject = True
      
      # frame has not subject, create a hidden subject
      if not hasSubject:
        token = Token()
        token.word = 'HIDDEN'
        token.lemma = 'HIDDEN'
        token.function = 'SUBJ'
        element = self.buildElement(token)
        if element:
          frame.elements.append(element)

      frames.append(frame)

    return frames