Skip to content

Commit

Permalink
add SM_INT
Browse files Browse the repository at this point in the history
  • Loading branch information
Young-Seob Jeong committed Jul 16, 2020
1 parent 51e44b5 commit 7d3b522
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 8 deletions.
46 changes: 46 additions & 0 deletions node/node_sm_int.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from node.node import node
import re
import pdb

class node_sm_int(node):
def __init__(self, logger):
node.__init__(self, logger=logger)
self._type = 'SM_INT'
self._pattern = re.compile('([0-9]|,)+')
#self._attr['target_text'] = target_text

def process(self, text, extent, position, var, add_extent=True):
pass_fail = False
reserved = []

# 결과물 만드는 경우,
if text == None:
return extent, position, True, reserved #[self._attr['target_text']]

if self.num_child():
if self._logger:
self._logger.error('this must be terminal node')
return extent, position, pass_fail, reserved

if position >= len(text):
return extent, position, pass_fail, reserved

matched = self._pattern.match(text[position:])
if matched:
pos_begin, pos_end = matched.span()
pos_begin, pos_end = pos_begin + position, pos_end + position

# overlap check with extent
if add_extent and extent.is_overlap((pos_begin, pos_end)):
return extent, position, pass_fail, reserved

position = pos_end
_extent = extent.copy()
if add_extent:
_extent.add((pos_begin, pos_end))
pass_fail = True
reserved += [text[pos_begin:pos_end]]
return _extent, position, pass_fail, reserved

return extent, position, pass_fail, reserved

7 changes: 7 additions & 0 deletions rule/sample.rule
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,12 @@
"condition": [
{"ext": "[$s0=@R01.value]좋아요"}
]
},
"Rm": {
"name": "slot_location",
"result": {"city": "[$s0]"},
"condition": [
{"ext": "[$s0=@__INT__]개"}
]
}
}
28 changes: 20 additions & 8 deletions rule_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from node.node_var_condition import node_var_condition
from node.node_empty_begin import node_empty_begin
from node.node_empty_end import node_empty_end
from node.node_sm_int import node_sm_int
import re
import pdb

Expand Down Expand Up @@ -324,7 +325,7 @@ def make_tree(self, rule_phrase, ext, cur_node=None):
cur_node.add_child(new_node)

remain_txt = rule_phrase[e:]
# 타 규칙 언급
# 타 규칙 언급 (내장 규칙 포함)
elif rule_refer and rule_refer.span()[0] == 0:
b, e = rule_refer.span()
cur_txt = rule_phrase[b+1:e]
Expand All @@ -333,16 +334,27 @@ def make_tree(self, rule_phrase, ext, cur_node=None):
else:
rule_name = cur_txt
result_names = None
new_node = node_rule_refer(rule_name, result_names, self._logger)
cur_node.add_child(new_node)

if rule_name:
if self._R.get(rule_name):
new_node2 = self._R.get(rule_name)
new_node.add_child(new_node2)
if rule_name[:2] == '__' and rule_name[-2:] == '__':
rule_name = 'SM_' + rule_name[2:-2]
if rule_name == 'SM_INT':
new_node = node_sm_int(self._logger)
cur_node.add_child(new_node)
else:
new_node = node_rule_refer(rule_name, result_names, self._logger)
cur_node.add_child(new_node)

if rule_name:
if self._R.get(rule_name):
new_node2 = self._R.get(rule_name)
new_node.add_child(new_node2)
else:
if self._logger:
self._logger.error('non-existing rule-name for rule refer = {}'.format(rule_phrase))
else:
if self._logger:
self._logger.error('non-existing rule-name for rule refer = {}'.format(rule_phrase))
self._logger.error('rule-name is empty in {}'.format(cur_txt))

remain_txt = rule_phrase[e:]
# white-space
elif white_space and white_space.span()[0] == 0:
Expand Down
5 changes: 5 additions & 0 deletions rule_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ def _indexing(self, n, rule_name):
return False
elif n._type == 'WHITE_SPACE':
return False
elif n._type == 'SM_INT':
for k in "0123456789,":
v = rule_name
self._indexing_add(k, v)
return True

return False

Expand Down

0 comments on commit 7d3b522

Please sign in to comment.