def translate2(q, tname='T'): global T2, T3, T4, T5, T6, GR T2 = time.time() # tokenization l = tokenize(q) tokens = [a[1] for a in l] assert (tokens[0] == '//') T3 = time.time() # build grammar GR = grammar_text for typ, t in l: if typ == 's': GR += "Qname -> '" + t + "'\n" grammar = parse_cfg(GR) parser = parse.ChartParser(grammar, parse.TD_STRATEGY) T4 = time.time() # chart-parse the query trees = parser.nbest_parse(tokens) if not trees: T5 = T6 = time.time() return None, None tree = trees[0] T5 = time.time() # translate the parse tree r = Trans(tree, SerialNumber(), tname=tname).getSql() T6 = time.time() try: r1 = TransFlat(tree, SerialNumber(), tname=tname).getSql() except: r1 = None r1 = TransFlat(tree, SerialNumber(), tname=tname).getSql() return r, r1
Rel -> WHO VP | NP T N -> "Ns" | "Np" I -> "Is" | "Ip" T -> "Ts" | "Tp" A -> "A" P -> "P" BE -> "BEs" | "BEp" DO -> "DOs" | "DOp" AR -> "AR" WHO -> "WHO" WHICH -> "WHICH" AND -> "AND" QM -> "?" ''') chartpsr = parse.ChartParser(grammar) def all_parses(wlist, lx): """returns all possible parse trees for all possible taggings of wlist""" allp = [] for tagging in tag_words(lx, wlist): allp = allp + [t for t in chartpsr.parse(tagging)] return allp # This produces parse trees of type Tree. # Availabel operations on trees: tr.label(), tr[i], len(tr) # Singular/plural agreement checking.
Rel -> WHO VP | NP T N -> "Ns" | "Np" I -> "Is" | "Ip" T -> "Ts" | "Tp" A -> "A" P -> "P" BE -> "BEs" | "BEp" DO -> "DOs" | "DOp" AR -> "AR" WHO -> "WHO" WHICH -> "WHICH" AND -> "AND" QM -> "?" ''') cp = parse.ChartParser(query_grammar) def all_parses(wlist,lx): """returns all possible parse trees for all possible taggings of wlist""" all = [] for tagging in tag_words(wlist,lx): all = all + cp.nbest_parse(tagging) return all # This produces parse trees of type Tree. # Available operations on trees: tr.node, tr[i], len(tr) # Singular/plural agreement checking. # For convenience, we reproduce the parameterized rules from the handout here: