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
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