#! /usr/bin/env python3 import sys import random import Config from Transition import Transition ################################################################################ def printUsageAndExit() : print("USAGE : %s file.conllu"%sys.argv[0], file=sys.stderr) exit(1) ################################################################################ ################################################################################ def applyTransition(ts, strat, config, name) : transition = [trans for trans in ts if trans.name == name][0] movement = strat[transition.name] transition.apply(config) config.moveWordIndex(movement) ################################################################################ ################################################################################ if __name__ == "__main__" : if len(sys.argv) != 2 : printUsageAndExit() transitionSet = [Transition(elem) for elem in ["RIGHT", "LEFT", "SHIFT", "REDUCE"]] EOS = Transition("EOS") strategy = {"RIGHT" : 1, "SHIFT" : 1, "LEFT" : 0, "REDUCE" : 0} sentences = Config.readConllu(sys.argv[1]) debug = True for config in sentences : config.moveWordIndex(0) while config.wordIndex < len(config.lines) - 1 : candidates = [trans for trans in transitionSet if trans.appliable(config)] candidate = candidates[random.randint(0, 100) % len(candidates)] applyTransition(transitionSet, strategy, config, candidate.name) if debug : print(candidate.name, file=sys.stderr) config.printForDebug(sys.stderr) EOS.apply(config) config.print(sys.stdout) ################################################################################