-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtreeUtil.py
More file actions
83 lines (60 loc) · 1.76 KB
/
Copy pathtreeUtil.py
File metadata and controls
83 lines (60 loc) · 1.76 KB
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
from itertools import *
# for iteration through tree
def isingle(obj):
yield obj
class leafObj:
def __init__(self, word, pos):
self.word = word
self.pos = pos
self.finished = 1
self.alpha = 0.0
self.c1 = None
self.c2 = None
def __iter__(self):
return isingle(self)
def set_parent(self, par):
self.parent = par
def print_leaf(self):
print self.word, ': ', self.pos
def set_label(self, label):
self.label = label
class nodeObj:
def __init__(self, c1, c2, pos):
self.c1 = c1
self.c2 = c2
self.pos = pos
self.finished = 1
self.alpha = 0.0
def __iter__(self):
return chain(isingle(self), iter(self.c1), iter(self.c2))
def set_parent(self, par):
self.parent = par
def set_label(self, label):
self.label = label
def set_all_labels(self, label):
for node in self:
node.set_label(label)
def set_all_betas(self, beta):
for node in self:
node.beta = beta
def reset_finished(self):
for node in self:
node.finished = 0
def get_words(self):
return ' '.join([leaf.word for leaf in self.get_leaves()])
def get_indices(self):
return [leaf.leaf_index for leaf in self.get_leaves()]
def get_leaves(self):
leaves = []
kids = [self.c1, self.c2]
while kids:
k = kids.pop(0)
if isinstance(k, leafObj):
leaves.append(k)
else:
kids.insert(0, k.c1)
kids.insert(1, k.c2)
return leaves
def set_vectors(self, vecs):
for index, leaf in enumerate(self.get_leaves()):
leaf.vec = vecs[index]