class Relativizers(object): def __init__(self,model=None): self.features=RelFeatures() self.model=model def learn(self,tree,outfile): for rel in tree.rels: features=self.features.create(rel.gov,rel.dep,tree) types=is_dep(rel.gov,rel.dep,tree) if len(types)<2: continue # post-processed dependency, do not use in training for dtype in types: if dtype==u"rel": continue klass=dtype.split(u"&",1)[1] writeData(outfile,klass,features) break def post_process_rel(self,g,d,t,tree): # move dependency if iccomp and it does not have this dtype already for dep in tree.deps: if dep.gov==g and dep.dtype==u"iccomp": deps=set() for dep2 in tree.childs[dep.dep]: # dependents of iccomp deps.add(dep2.dtype) # collect all dependents of iccomp if t not in deps: g=dep.dep break return g,d,t def predict(self,tree): if self.model is None: print >> sys.stderr, u"no model found" sys.exit(1) for rel in tree.rels: features=self.features.create(rel.gov,rel.dep,tree) klass=self.model.predict_one(features) klass_str=u"rel&"+self.model.number2klass[klass] g,d,t=self.post_process_rel(rel.gov,rel.dep,klass_str,tree) dependency=Dep(g,d,t,flag=u"REL") #print dependency tree.add_dep(dependency)
def __init__(self,model=None): self.features=RelFeatures() self.model=model