| from .oieReader import OieReader |
| from .extraction import Extraction |
| import math |
| import os |
| import ipdb |
|
|
| class AllennlpReader(OieReader): |
| |
| def __init__(self, threshold=None): |
| self.name = 'Allennlp' |
| self.threshold = threshold |
| |
| def read(self, fn): |
| d = {} |
| |
| if os.path.exists(fn): |
| |
| fin = open(fn) |
| else: |
| |
| fin = fn.strip().split('\n') |
| |
| for line in fin: |
| ''' |
| data = line.strip().split('\t') |
| confidence = data[0] |
| if not all(data[2:5]): |
| continue |
| arg1, rel = [s[s.index('(') + 1:s.index(',List(')] for s in data[2:4]] |
| #args = data[4].strip().split(');') |
| #print arg2s |
| args = [s[s.index('(') + 1:s.index(',List(')] for s in data[4].strip().split(');')] |
| # if arg1 == "the younger La Flesche": |
| # print len(args) |
| text = data[5] |
| if data[1]: |
| #print arg1, rel |
| s = data[1] |
| if not (arg1 + ' ' + rel).startswith(s[s.index('(') + 1:s.index(',List(')]): |
| #print "##########Not adding context" |
| arg1 = s[s.index('(') + 1:s.index(',List(')] + ' ' + arg1 |
| #print arg1 + rel, ",,,,, ", s[s.index('(') + 1:s.index(',List(')] |
| ''' |
| |
| line = line.strip().split('\t') |
| |
| text = line[0] |
| try: |
| confidence = line[2] |
| except: |
| confidence = 0 |
| |
| line = line[1] |
| try: |
| arg1 = line[line.index('<arg1>') + 6:line.index('</arg1>')] |
| except: |
| arg1 = "" |
| try: |
| rel = line[line.index('<rel>') + 5:line.index('</rel>')] |
| except: |
| rel = "" |
| try: |
| arg2 = line[line.index('<arg2>') + 6:line.index('</arg2>')] |
| except: |
| arg2 = "" |
|
|
| if(type(self.threshold) != type(None) and float(confidence) < self.threshold): |
| continue |
|
|
| if not ( arg1 or arg2 or rel): |
| continue |
| |
| |
| |
| |
| curExtraction = Extraction(pred = rel, head_pred_index = -1, sent = text, confidence = float(confidence)) |
| curExtraction.addArg(arg1) |
| curExtraction.addArg(arg2) |
| |
| |
| d[text] = d.get(text, []) + [curExtraction] |
| |
| if os.path.exists(fn): |
| fin.close() |
| |
| self.oie = d |
|
|