Skip to content
Snippets Groups Projects
Commit 2e8416db authored by Franck Dary's avatar Franck Dary
Browse files

class block

parent 873f6c87
No related branches found
No related tags found
No related merge requests found
...@@ -58,6 +58,49 @@ class Step() : ...@@ -58,6 +58,49 @@ class Step() :
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
################################################################################ ################################################################################
################################################################################
class Block() :
#-------------------------------------------------------------------------------
def __init__(self, state) :
self.versions = [[]] # List of list of steps
self.state = state
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
def addStep(self, step) :
self.versions[-1].append(step)
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
def newVersion(self) :
self.versions.append([])
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
def nbVersions(self) :
return len(self.versions)
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
def getAsLines(self, maxNbVersions) :
output = []
versions = []
for version in self.versions :
versions.append([])
lineStr = englobStr("State %d"%self.state, "-", lenLine())
versions[-1].append(lineStr + (lenLine()-len(lineStr))*" ")
for step in version :
versions[-1].append(str(step) + (lenLine()-len(str(step)))*" ")
maxIndex = max([len(version) for version in versions])
for i in range(maxIndex) :
output.append("")
for j in range(maxNbVersions) :
output[-1] += ("\t" if j > 0 else "") + (versions[j][i] if j in range(len(versions)) and i in range(len(versions[j])) else lenLine()*" ")
return output
#-------------------------------------------------------------------------------
################################################################################
################################################################################ ################################################################################
class History() : class History() :
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
...@@ -67,7 +110,7 @@ class History() : ...@@ -67,7 +110,7 @@ class History() :
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def segmentInBlocks(self) : def segmentInBlocks(self) :
#structure : sentence = [annotations,list of blocks] = list of versions = list of steps #structure : sentence = [annotations,list of blocks]
sentences = [] sentences = []
for sentenceAnnot in self.sentences : for sentenceAnnot in self.sentences :
annot = sentenceAnnot[0] annot = sentenceAnnot[0]
...@@ -78,21 +121,21 @@ class History() : ...@@ -78,21 +121,21 @@ class History() :
for step in sentence : for step in sentence :
if lastState is not None and lastState != step.state : if lastState is not None and lastState != step.state :
blockIndex += 1 blockIndex += 1
while blockIndex >= len(sentences[-1][1]) : if blockIndex >= len(sentences[-1][1]) :
sentences[-1][1].append([[]]) sentences[-1][1].append(Block(step.state))
block = sentences[-1][1][blockIndex][-1] block = sentences[-1][1][blockIndex]
block.append(step) block.addStep(step)
lastState = step.state lastState = step.state
if "BACK" in step.action and "NOBACK" not in step.action : if "BACK" in step.action and "NOBACK" not in step.action :
backSize = int(step.action.split()[-1]) backSize = int(step.action.split()[-1])
backState = step.state backState = step.state
while backSize > 0 : while backSize > 0 :
blockIndex -= 1 blockIndex -= 1
state = sentences[-1][1][blockIndex][-1][0].state state = sentences[-1][1][blockIndex].state
if state == backState : if state == backState :
backSize -= 1 backSize -= 1
for block in sentences[-1][1][blockIndex:] : for block in sentences[-1][1][blockIndex:] :
block.append([]) block.newVersion()
self.sentences = sentences self.sentences = sentences
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
...@@ -110,22 +153,11 @@ class History() : ...@@ -110,22 +153,11 @@ class History() :
for sentIndex in range(len(self.sentences)) : for sentIndex in range(len(self.sentences)) :
sentence = self.sentences[sentIndex][1] sentence = self.sentences[sentIndex][1]
annotations = alignAsTab([self.sentences[sentIndex][0][wid] for wid in sorted(list(self.sentences[sentIndex][0].keys()))]) annotations = alignAsTab([self.sentences[sentIndex][0][wid] for wid in sorted(list(self.sentences[sentIndex][0].keys()))])
maxNbVersions = max([len(block) for block in sentence]) maxNbVersions = max([block.nbVersions() for block in sentence])
print(englobStr("Sentence %d"%sentIndex, "-", (1+maxNbVersions)*(1+lenLine())), file=out) print(englobStr("Sentence %d"%sentIndex, "-", (1+maxNbVersions)*(1+lenLine())), file=out)
totalOutput = [] totalOutput = []
for block in sentence : for block in sentence :
versions = [] totalOutput += block.getAsLines(maxNbVersions)
for version in block :
versions.append([])
lineStr = englobStr("State %d"%block[0][0].state, "-", lenLine())
versions[-1].append(lineStr + (lenLine()-len(lineStr))*" ")
for step in version :
versions[-1].append(str(step) + (lenLine()-len(str(step)))*" ")
maxIndex = max([len(version) for version in versions])
for i in range(maxIndex) :
totalOutput.append("")
for j in range(maxNbVersions) :
totalOutput[-1] += ("\t" if j > 0 else "") + (versions[j][i] if j in range(len(versions)) and i in range(len(versions[j])) else lenLine()*" ")
for i in range(len(totalOutput)) : for i in range(len(totalOutput)) :
print(totalOutput[i] + ("\t"+annotations[i] if i in range(len(annotations)) else ""), file=out) print(totalOutput[i] + ("\t"+annotations[i] if i in range(len(annotations)) else ""), file=out)
print("", file=out) print("", file=out)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment