From 22f44ef61f99acdec5d19f336bb80f6bb3a4e8b7 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Wed, 1 May 2013 06:09:55 +0000 Subject: word completion in the C runtime. The runtime/python/test.py example is now using readline with word completion --- src/runtime/python/test.py | 53 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 8 deletions(-) (limited to 'src/runtime/python/test.py') diff --git a/src/runtime/python/test.py b/src/runtime/python/test.py index 437c29776..93a3c4a2d 100644 --- a/src/runtime/python/test.py +++ b/src/runtime/python/test.py @@ -1,26 +1,63 @@ -import sys import pgf +import sys +import sets +import readline sys.stdout.write("loading...") sys.stdout.flush(); gr = pgf.readPGF("../../../treebanks/PennTreebank/ParseEngAbs.pgf") sys.stdout.write("\n") +source_lang = gr.languages["ParseEng"] +target_lang = gr.languages["ParseBul"] + we = pgf.readExpr("UttImpSg PPos (ImpVP (UseV try_V))") -print gr.languages["ParseEng"].linearize(we) +print source_lang.linearize(we) sys.stdout.write("start cat: "+gr.startCat+"\n\n") +class Completer(): + def __init__(self, lang): + self.gr = lang + + def complete(self, prefix, state): + if state == 0: + line = readline.get_line_buffer() + line = line[0:readline.get_begidx()] + self.i = source_lang.getCompletions(line, prefix=prefix) + self.tokens = sets.Set() + + if len(self.tokens) > 50: + return None + + while True: + try: + (p,t) = self.i.next() + if t not in self.tokens: + self.tokens.add(t) + return t + except StopIteration: + return None + +completer = Completer(source_lang) +readline.set_completer(completer.complete) +readline.parse_and_bind("tab: complete") + while True: - sys.stdout.write("> ") - line = sys.stdin.readline(); - if line == '': + try: + line = raw_input("> "); + except EOFError: + sys.stdout.write("\n") + readline.set_completer(None) + break + except KeyboardInterrupt: sys.stdout.write("\n") - break; + readline.set_completer(None) + break try: - for (p,e) in gr.languages["ParseEng"].parse(line, n=5): + for (p,e) in source_lang.parse(line, n=1): sys.stdout.write("["+str(p)+"] "+str(e)+"\n") - print gr.languages["ParseEngBul"].linearize(e) + print target_lang.linearize(e) except pgf.ParseError as e: print e.message -- cgit v1.2.3