reflexive 1.2.7__py3-none-any.whl → 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
reflexive/visualise.py DELETED
@@ -1,355 +0,0 @@
1
- from graph_tool.all import (
2
- Graph,
3
- graph_draw,
4
- ungroup_vector_property,
5
- group_vector_property
6
- )
7
- import cairo
8
-
9
- from spacy import displacy
10
-
11
- from reflexive import session
12
- from reflexive import cfg
13
-
14
- class Display:
15
- aws:session.AWS = None
16
- config:cfg.Config = None
17
-
18
- defaults = {
19
- "priority_tags": [
20
- "NR",
21
- "AR",
22
- "RR",
23
- "EP",
24
- "AF",
25
- "TE",
26
- ],
27
- "colours": {
28
- "NR": "#ED1B23",
29
- "AR": "#00A64F",
30
- "RR": "#00AEEF",
31
- "EP": "#FFF200",
32
- "AF": "#EC008C",
33
- "TE":"#f7f7d4",
34
- }
35
- }
36
-
37
- #FFF200 yellow
38
- #EC008C magenta
39
- #00AEEF cyan
40
- #00A64F green
41
- #ED1B23 red
42
-
43
- # "VR_ER": "#ff6644", #Orange
44
- # "AR": "#00cc00", #Green
45
- # "RR": "#6699ff", #Blue
46
- # "EP_EV": "#aacc33", #Lime
47
- # "AF_CN": "#dd44cc", #magenta
48
- # "EO":"#f7f7d4", #light yellow
49
- # "EA":"#d9f2f2" #light Cyan
50
- # {
51
- # "priority_tags": ["VR_ER","AR","RR","EP_EV","AF_CN","KP"],
52
- # "colours": {"VR_EV_CN": "#ff6644","ER_AF": "#dd44cc","AR": "#00cc00","EP": "#aacc33","RR": "#00aaff","KP":"#aaaacc"}}
53
-
54
- def __init__(self,aws):
55
- self.aws = aws
56
- self.aws = aws
57
- self.config = self.aws.config
58
- self.set_default_parameters()
59
-
60
- def set_default_parameters(self):
61
- priority_tags = self.defaults['priority_tags']
62
- colours = self.defaults['colours']
63
- options = {"ents": list(colours.keys()), "colors": colours}
64
- self.config.set_display_parameters(priority_tags,colours,options)
65
-
66
-
67
- def add_reflexive_offsets(self,df):
68
- temp_df = df.copy()
69
- temp_df['reflexive_offsets'] = temp_df.ReflexiveResults.apply(self.collect_reflexive_offsets)
70
- return temp_df
71
-
72
- def add_keyphrase_offsets(self,df):
73
- temp_df = df.copy()
74
- temp_df['keyphrase_offsets'] = temp_df.KeyPhraseResults.apply(self.collect_keyphrase_offsets)
75
- return temp_df
76
-
77
- def add_syntax_offsets(self,df):
78
- temp_df = df.copy()
79
- temp_df['syntax_offsets'] = temp_df.SyntaxResults.apply(self.collect_syntax_offsets)
80
- return temp_df
81
-
82
- def add_offsets(self,df):
83
- df = self.add_reflexive_offsets(df)
84
- df = self.add_keyphrase_offsets(df)
85
- return self.add_syntax_offsets(df)
86
-
87
- def create_displacy(self,df):
88
- all_ents = list(df.apply(self.render_record,axis=1))
89
- #html_out = displacy.render(all_ents,manual=True,style="ent", options=options,page=True,jupyter=False)
90
- # with open(f"{path}{prefix}annotated_reflections{postfix}.html","w") as fp:
91
- # fp.write(html_out)
92
- #displacy.render(all_ents,manual=True,style="ent", options=options)
93
- return all_ents
94
-
95
- def render_record(self,record,title="----"):
96
- #timestamp = record['timestamp'].split('T')[0]
97
- #pseudonym = record['pseudonym']
98
- #point_round = record['point_round']
99
- #title = f"{pseudonym} ({point_round}) - {timestamp}"
100
- title = f"Idx_{record.name}"
101
- tags = self.config.display_priority_tags
102
- text = record['text']
103
- reflexive_offsets = record['reflexive_offsets']
104
- keyphrase_offsets = record['keyphrase_offsets']
105
- syntax_offsets = record['syntax_offsets']
106
- ents = []
107
- taken = []
108
- offsets = []
109
- for tag in tags:
110
- if tag in reflexive_offsets:
111
- offsets = reflexive_offsets[tag]
112
- elif tag in syntax_offsets:
113
- offsets = syntax_offsets[tag]
114
- elif tag in keyphrase_offsets:
115
- offsets = keyphrase_offsets[tag]
116
-
117
- for off in offsets:
118
- new_ent = {}
119
- if off[0] in taken:
120
- # the start offset is taken
121
- x = None
122
- elif off[1] in taken:
123
- # the end offset is taken
124
- x = None
125
- else:
126
- # both start and end is available
127
- for t in range(off[0],(off[1]+1)):
128
- taken.append(t)
129
- #print(taken)
130
- new_ent["start"] = off[0]
131
- new_ent["end"] = off[1]
132
- new_ent["label"] = tag
133
- ents.append(new_ent)
134
-
135
- text_ents = {
136
- "text": text, #.replace('\r\n','\n'),
137
- "ents": ents,
138
- "title": title
139
- }
140
-
141
- return text_ents
142
-
143
- def collect_keyphrase_offsets(self,krs):
144
- new_krs = {}
145
- for kr in krs:
146
- if kr['Score']>0.98:
147
- new_krs.setdefault("KP",[]).append((kr['BeginOffset'],kr['EndOffset']))
148
- return new_krs
149
-
150
- def collect_reflexive_offsets(self,rrs):
151
- new_rrs = {}
152
- for rr in rrs:
153
- if rr['Score']>0.5:
154
- ent_type = rr['Type']
155
- if ent_type in ['VR','ER']:
156
- label = "NR"
157
- elif ent_type in ['EP','EV']:
158
- label = "EP"
159
- elif ent_type in ['CN','AF']:
160
- label = "AF"
161
- else:
162
- label = ent_type
163
- new_rrs.setdefault(label,[]).append((rr['BeginOffset'],rr['EndOffset']))
164
- return new_rrs
165
-
166
- def collect_syntax_offsets(self,syntax_results):
167
- offsets = {}
168
- for sr in syntax_results:
169
- pos = sr['PartOfSpeech']
170
- if pos['Score']>0.99:
171
- if pos['Tag'] in ['NOUN','ADJ']: # TE - Topic Entity
172
- offsets.setdefault("TE",[]).append((sr['BeginOffset'],sr['EndOffset']))
173
- # if pos['Tag'] in ['ADV','VERB']:
174
- # offsets.setdefault("EA",[]).append((sr['BeginOffset'],sr['EndOffset']))
175
- return self.concatenate_offsets(offsets)
176
-
177
- def concatenate_offsets(self,offsets:dict):
178
- new_offsets = {}
179
- for k in offsets.keys():
180
- #print("TAG:",k)
181
- #print("Offsets:",len(offsets[k]))
182
- b,e = offsets[k][0] # set to first tag
183
- for v in offsets[k]:
184
- #print("b,e",b,e)
185
- #print("offset:",v)
186
- if v[0] <= (e+1): # this tag extends a previous tag
187
- e = v[1]
188
- #print("extending")
189
- #print("new_offset:",(b,e))
190
- else: # this tag starts a new tag
191
- #print("new tag")
192
- new_offsets.setdefault(k,[]).append((b,e))
193
- b = v[0]
194
- e = v[1]
195
- #print("New offsets:",len(new_offsets[k]))
196
- return new_offsets
197
-
198
- class RES_text:
199
-
200
- def __init__(self):
201
- self._setup()
202
-
203
- def _setup(self):
204
- return None
205
-
206
- def show(self):
207
- #displacy.render(disp_data,manual=True,style="ent", options=cfg.display_options)
208
- return None
209
-
210
- class RES_graph:
211
-
212
- #
213
- gt_props = {0:{ "lbl":"RR",
214
- "pos":(0.2,6.5),
215
- "clr":"#00AEEF"},
216
- 1:{ "lbl":"NR",
217
- "pos":(5,10),
218
- "clr":"#ED1B23"},
219
- 2:{ "lbl":"AR",
220
- "pos":(9.8,6.5),
221
- "clr":"#00A64F"},
222
- 3:{ "lbl":"AF",
223
- "pos":(7.9,1),
224
- "clr":"#EC008C"},
225
- 4:{ "lbl":"EP",
226
- "pos":(2.1,1),
227
- "clr":"#FFF200"}}
228
-
229
-
230
- # re_props = {"RR":{
231
- # "idx": 0,
232
- # "pos":(0.2,6.5),
233
- # "clr":"#00AEEF"},
234
- # "NR":{
235
- # "idx": 1,
236
- # "pos":(5,10),
237
- # "clr":"#ED1B23"},
238
- # "AR":{
239
- # "idx": 2,
240
- # "pos":(9.8,6.5),
241
- # "clr":"#00A64F"},
242
- # "AF":{
243
- # "idx": 3,
244
- # "pos":(7.9,1),
245
- # "clr":"#EC008C"},
246
- # "EP":{
247
- # "idx": 4,
248
- # "pos":(2.1,1),
249
- # "clr":"#FFF200"}}
250
-
251
- #
252
- edges = dict()
253
- #
254
- iso_vertices = set()
255
- #
256
- v_label = None
257
- #
258
- v_color = None
259
- #
260
- v_pos = None
261
-
262
- #
263
- def __init__(self,matrix=None):
264
- self._setup(matrix)
265
-
266
- #
267
- def _setup(self,matrix):
268
- if matrix:
269
- # Edges from matrix
270
- self.edges = self._matrix_to_dict(matrix)
271
- self.graph = Graph(g=self.edges.keys(),directed=False)
272
- self.e_weight = self.graph.new_ep("double",vals=self.edges.values())
273
- # Handle colour of isolated vertices
274
- default_clrs = self._get_prop_values('clr')
275
- actual_clrs = []
276
- for i in range(5):
277
- if i in self.iso_vertices:
278
- clr = "#cccccc"
279
- else:
280
- clr = default_clrs[i]
281
- actual_clrs.append(clr)
282
- self.v_color = self.graph.new_vp("string",vals=actual_clrs)
283
- else:
284
- # No edges
285
- self.graph = Graph(g=self._empty_edge_dict(),directed=False)
286
- self.e_weight = self.graph.new_ep("double")
287
- self.v_color = self.graph.new_vp("string",val="#cccccc")
288
- # Vertex properties common to all graphs
289
- self.v_label = self.graph.new_vp("string",vals=self._get_prop_values('lbl'))
290
- self.v_pos = self.graph.new_vp("vector<double>",vals=self._get_prop_values('pos'))
291
-
292
-
293
-
294
- #
295
- def _matrix_to_dict(self,matrix):
296
- edges = {}
297
- for r,row in enumerate(matrix):
298
- # if empty row, add to iso_vertices
299
- if sum(row) == 0:
300
- self.iso_vertices.add(r)
301
- else:
302
- for c,weight in enumerate(row):
303
- if weight > 0:
304
- edge = tuple(sorted((r,c)))
305
- #print("r,c:",edge," - ",weight)
306
- edges[edge] = weight
307
- return edges
308
-
309
- #
310
- def _empty_edge_dict(self):
311
- empty_edges = {}
312
- for idx in self.gt_props.keys():
313
- empty_edges[idx] = []
314
- return empty_edges
315
-
316
- #
317
- def _get_prop_values(self,key):
318
- values_list = self.gt_props.values()
319
- return [p[key] for p in values_list]
320
-
321
- # flip coordinates for graph-tool
322
- def _flipY(self,vpositions):
323
- x, y = ungroup_vector_property(vpositions, [0, 1])
324
- y.fa *= -1
325
- y.fa -= y.fa.min()
326
- return group_vector_property([x, y])
327
-
328
- #
329
- def show(self,inline=True):
330
- graph = self.graph
331
- positions = self._flipY(self.v_pos)
332
- labels = self.v_label
333
- colors = self.v_color
334
- weights = self.e_weight
335
- graph_draw(graph, inline=inline,output_size=(300,300),fit_view=0.7,
336
- pos=positions,
337
- vertex_text=labels,
338
- vertex_font_family="sans serif",
339
- vertex_font_size=18,
340
- vertex_font_weight=cairo.FONT_WEIGHT_BOLD,
341
- vertex_fill_color=colors,
342
- vertex_size = 50,
343
- vertex_halo=False,
344
- vertex_pen_width=1.2,
345
- vertex_color="#999999",
346
- edge_pen_width=weights)
347
-
348
- def get_vertex_labels(self):
349
- return self._get_prop_values('lbl')
350
-
351
- def get_vertex_colours(self):
352
- return self._get_prop_values('clr')
353
-
354
- def get_vertex_positions(self):
355
- return self._get_prop_values('pos')
@@ -1,12 +0,0 @@
1
- reflexive/__init__.py,sha256=x5l8GV_9yC8yJyjTLqiM_WkfuPMLuNgQxF6PIz5MfFU,422
2
- reflexive/analyse.py,sha256=CU6mQ8PxQrkOvuSe4mmnuI18jGMkuxql3zLZ1vEeMEY,17466
3
- reflexive/cfg.py,sha256=tDPiC9NwpEVoT05_831sMsMfHhJt8pVrSOsgbtzTNDM,4267
4
- reflexive/res.py,sha256=rMaXSf0xRrbER9HWqGviTuAKBeyxcv_j2wyTBUshFbQ,7833
5
- reflexive/res_functions.py,sha256=YF45yUF8NYMSC19DFpE0lmV4xyNxv3QqbbzZmdwmFzg,1231
6
- reflexive/session.py,sha256=8STWo8sqmWn-1PHcloFbgmLEvd7lsiFTU4t7ESRTsvw,10046
7
- reflexive/util.py,sha256=uU7-lqUmiCiCaR85AdNFKXrdrBspjb1Rmd-yThA3fRU,3699
8
- reflexive/visualise.py,sha256=pVnsPJOnHiLAIvDDm9P0u6-sGQINC4GVOY9b0GrzTK4,11725
9
- reflexive-1.2.7.dist-info/METADATA,sha256=7NseRqUpaOJYKjJmg-UmseqANTCye8khCfYMkGDYWEE,574
10
- reflexive-1.2.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
11
- reflexive-1.2.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
12
- reflexive-1.2.7.dist-info/RECORD,,