forked from zhujinliang/chinesetokenization
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Node.py
68 lines (60 loc) · 2.55 KB
/
Node.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
__author__ = 'zdj'
#!/usr/bin/python
# -*- coding: utf-8 -*-
class Node:
def __init__(self, c_token, pre_token):
self.pre_nodes = []
self.next_nodes = []
self.best_pre_node = None
self.max_probability = 0
self.current_token = c_token
self.pre_token = pre_token
self.hasPass = False
def add_pre_node(self, node):
self.pre_nodes.append(node)
def add_next_node(self, node):
self.next_nodes.append(node)
def set_best_pre_node_end_node(self, pro_dic, pre_node):
c_token = self.current_token
pre_1_token = pre_node.current_token
pre_2_token = pre_node.pre_token
translate_probability = pro_dic.get_pro(c_token, pre_1_token, pre_2_token)
tmp_pro = translate_probability * pre_node.max_probability
if tmp_pro > self.max_probability:
self.max_probability = tmp_pro
self.best_pre_node = pre_node
self.pre_nodes.remove(pre_node)
for node in self.pre_nodes:
if not node.hasPass:
return
pre_1_token = node.current_token
pre_2_token = node.pre_token
translate_probability = pro_dic.get_pro(c_token, pre_1_token, pre_2_token)
tmp_pro = translate_probability * node.max_probability
if tmp_pro > self.max_probability:
self.max_probability = tmp_pro
self.best_pre_node = node
self.hasPass = True
def set_best_pre_node(self, pro_dic, pre_node):
if self.current_token is 'e':
self.set_best_pre_node_end_node(pro_dic, pre_node)
else:
c_token = self.current_token
pre_1_token = self.pre_token
pre_2_token = pre_node.pre_token
translate_probability = pro_dic.get_pro(c_token, pre_1_token, pre_2_token)
tmp_pro = translate_probability * pre_node.max_probability
if tmp_pro > self.max_probability:
self.max_probability = tmp_pro
self.best_pre_node = pre_node
self.pre_nodes.remove(pre_node)
for node in self.pre_nodes:
if not node.hasPass:
return
pre_2_token = node.pre_token
translate_probability = pro_dic.get_pro(c_token, pre_1_token, pre_2_token)
tmp_pro = translate_probability * node.max_probability
if tmp_pro > self.max_probability:
self.max_probability = tmp_pro
self.best_pre_node = node
self.hasPass = True