-
Notifications
You must be signed in to change notification settings - Fork 4
/
common_types.py
100 lines (78 loc) · 2.09 KB
/
common_types.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
from dataclasses import dataclass
from typing import Tuple, Dict
CORE_ROLES = [f"A{i}" for i in range(5)]
ADJUNCT_ROLES = {"Am", "AM", "AM-TMP", "AM-LOC", "AM-MNR",
"AM-CAU", "AM-PRD", "AM-DIR", "AM-EXT",
"AM-PRD", "AM-PNC", "AM-REC", "AM-DIS", "AM-ADV"}
ADJUNCT_DESC = {
"AM-TMP": "Temporal",
"AM-LOC": "Locative",
"AM-MNR": "Manner",
"AM-CAU": "Cause",
"AM-PRD": "Predicative",
"AM-DIR": "Direction",
"AM-PNC": "Purpose", # Purpose, not Cause...
"AM-EXT": "Extent",
"AM-REC": "Reciprocal",
"AM-DIS": "Discourse",
"AM-ADV": "Adverbial",
}
NO_SPAN = "-1:-1"
def parse_span(span_: str) -> Tuple[int, int]:
s, t = span_.split(":")
return int(s), int(t)
@dataclass
class Role:
predicate: str
sense_id: str
pos: str
role_type: str
role_desc: str
role_set_desc: str
@dataclass
class Argument:
_span: str
text: str
arg_type: str
role_type: str
sent_id: str
@property
def start(self):
return self.span[0]
@property
def end(self):
return parse_span(self._span)[1]
@property
def span(self) -> Tuple[int, int]:
return parse_span(self._span)
@classmethod
def from_dict(cls, d):
return cls(_span=d['span'],
text=d['text'],
role_type=d['role_type'],
arg_type=d.get('arg_type', "explicit"),
sent_id=d.get('sent_id', "-1"))
@dataclass
class Predicate:
_span: str
text: str
lemma: str
sense_id: str
pos: str
sent_id: str
@property
def start(self) -> int:
return self.span[0]
@property
def end(self) -> int:
return self.span[1]
@property
def span(self) -> Tuple[int, int]:
return parse_span(self._span)
@classmethod
def from_dict(cls, d: Dict):
return cls(d['span'], d['text'],
d.get('lemma') or d.get('predicate_lemma'),
d.get('sense_id') or d.get("frame_id", "-1"),
d.get('pos', "v"),
d.get('sent_id'))