From 2d61f0d580c3f7a2fa562b4f8303d272a19add0b Mon Sep 17 00:00:00 2001 From: Alexis Nasr <alexis.nasr@lif.univ-mrs.fr> Date: Thu, 22 Oct 2020 17:42:11 +0200 Subject: [PATCH] =?UTF-8?q?modification=20de=20Config.py=20pour=20prendre?= =?UTF-8?q?=20en=20compte=20des=20Configuration=20Features,=20attention,?= =?UTF-8?q?=20la=20lecture=20des=20Configuration=20Features=20dans=20FeatM?= =?UTF-8?q?odel.py=20n'est=20pas=20encore=20impl=C3=A9ment=C3=A9e,=20corre?= =?UTF-8?q?ction=20d'un=20bug=20dans=20Word.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Config.py | 114 +++++++++++++++++++++++++++++++++++++------------- src/Word.py | 2 +- 2 files changed, 85 insertions(+), 31 deletions(-) diff --git a/src/Config.py b/src/Config.py index df30721..212a345 100644 --- a/src/Config.py +++ b/src/Config.py @@ -84,40 +84,93 @@ class Config: elif(mvt_type == 'REDUCE'): return self.red() return False - - def getWordFeat(self, featTuple): - container = featTuple[1] - index = featTuple[2] - tape = featTuple[3] - - if(container == 'B'): -# if((index < self.getBuffer().getLength()) and (index >= 0)): + def getWordWithRelativeIndex(self, container, index): + if container == 'S' : + if index >= self.getStack().getLength() : + return None + indexInBuffer = self.getStack().array[self.getStack().getLength() - index - 1] + return self.getBuffer().getWord(indexInBuffer) + elif container == 'B' : absoluteIndex = self.getBuffer().getCurrentIndex() + index if absoluteIndex < self.getBuffer().getLength() and absoluteIndex >= 0 : - w = self.getBuffer().getWord(absoluteIndex) - else: - #print('word feature ', container, '.', index, '.', tape, ' cannot be interpreted, index ', index, "is out of bound") - return 'NULL' - - else: - if(index < self.getStack().getLength()): - #print('on cherche dans', self.getStack().getLength() - index - 1, "") - w = self.getBuffer().getWord(self.getStack().array[self.getStack().getLength() - index - 1]) - if w == None : - return 'NULL' - else: - #print('word feature ', container, '.', index, '.', tape, ' cannot be interpreted, index ', index, "is out of bound") - return 'NULL' - - return w.getFeat(tape) - - # print('word feature ', container, '.', index, '.', tape, ' cannot be interpreted, tape ', tape, "is unknown") + return self.getBuffer().getWord(absoluteIndex) + else : + return None + return None - # return 'NULL' + def getFeat(self, featTuple): + featType = featTuple[0] + if(featType == 'W'): + return self.getWordFeat(featTuple) + elif(featType == 'C'): + return self.getConfFeat(featTuple) - - + def getConfFeat(self, featTuple): + featSubType = featTuple[1] + if featSubType == 'DIST': + return self.getDistFeat(featTuple) + elif featSubType == 'NLDEP': + return self.getNldepFeat(featTuple) + elif featSubType == 'NRDEP': + return self.getNrdepFeat(featTuple) + elif featSubType == 'LLDEP': + return self.getLldepFeat(featTuple) + elif featSubType == 'LRDEP': + return self.getLrdepFeat(featTuple) + elif featSubType == 'SH': + return self.getStackHeightFeat(featTuple) + return 'NULL' + + def getNlDepFeat(self, featTuple): + container = featTuple[2] + index = featTuple[3] + + word = self.getWordWithRelativeIndex(containe, index) + if word == None : + return 'NULL' + return string(len(word.getLeftDaughters())) + + def getNrDepFeat(self, featTuple): + container = featTuple[2] + index = featTuple[3] + + word = self.getWordWithRelativeIndex(containe, index) + if word == None : + return 'NULL' + return string(len(word.getRightDaughters())) + + + def getLlDepFeat(self, featTuple): + return 'NULL' + + def getLrDepFeat(self, featTuple): + return 'NULL' + + def getStackHeightFeat(self, featTuple): + string(self.getStack().getLength()) + + def getDistFeat(self, featTuple): + containerWord1 = featTuple[1] + indexWord1 = featTuple[2] + containerWord2 = featTuple[3] + indexWord2 = featTuple[4] + word1 = self.getWordWithRelativeIndex(containerWord1, indexWord1) + word2 = self.getWordWithRelativeIndex(containerWord2, indexWord2) + + if word1 == None or word2 == None : + return 'NULL' + return word1.getIndex() - word2.getIndex() + + def getWordFeat(self, featTuple): + container = featTuple[1] + index = featTuple[2] + tape = featTuple[3] + + word = self.getWordWithRelativeIndex(container, index) + if word == None : + return 'NULL' + return word.getFeat(tape) def affiche(self): currentIndex = self.getBuffer().getCurrentIndex() @@ -141,7 +194,8 @@ class Config: i = 0 for f in FeatModel.getFeatArray(): # print(f, '=', self.getWordFeat(f)) - featVec.append(self.getWordFeat(f)) + featVec.append(self.getFeat(f)) +# featVec.append(self.getWordFeat(f)) i += 1 # print(featVec) return featVec diff --git a/src/Word.py b/src/Word.py index 766e7d8..fe92bd5 100644 --- a/src/Word.py +++ b/src/Word.py @@ -3,7 +3,7 @@ class Word: self.featDic = {} # dictionnaire dans lequel sont stockés les word features self.leftDaughters = [] # liste des indices des dépendants gauches self.rightDaughters = [] # liste des indices des dépendants droits - self.index = invalidIndex() + self.index = self.invalidIndex() def getFeat(self, featName): if(not featName in self.featDic): -- GitLab