File size: 3,712 Bytes
db95b72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
101
102
103
104
105
106
107
108
109
110
111
112
import gradio as gr

import json

# JSON 파일 읽기
with open('/home/judy/command_bot/node.json', 'r') as file:
    node_info = json.load(file)

##############################################################################

class Stack:
    def __init__(self):
        self.items = []

    def is_empty(self):
        return len(self.items) == 0

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        else:
            return None  # μŠ€νƒμ΄ λΉ„μ–΄μžˆμ„ λ•ŒλŠ” None λ°˜ν™˜ λ˜λŠ” μ˜ˆμ™Έ μ²˜λ¦¬λ„ κ°€λŠ₯

    def peek(self):
        if not self.is_empty():
            return self.items[-1]
        else:
            return None  # μŠ€νƒμ΄ λΉ„μ–΄μžˆμ„ λ•ŒλŠ” None λ°˜ν™˜ λ˜λŠ” μ˜ˆμ™Έ μ²˜λ¦¬λ„ κ°€λŠ₯

    def size(self):
        return len(self.items)

stack = Stack()

# λ°œν™”μ— λͺ…λ Ήμ–΄κ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 확인
# λͺ…λ Ήμ–΄κ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€λ©΄ ν•΄λ‹Ή λ…Έλ“œ μΆ”μΆœ
def classifier(utterance):

    print(utterance)

    top = stack.peek()

    if utterance == "save":
        while(True):
            if stack.size() == 0:
                return
            peek = stack.peek()
            if peek['start_node'] == 3:
                return
            else:
                stack.pop()

    # top node 의 dest node λ₯Ό λͺ¨λ‘ κ°€μ Έμ˜¨λ‹€.
    for dest_node in top['dest_node']:

        # node_info μ—μ„œ start_node == dest_node 인 λ…Έλ“œλ₯Ό μ°ΎλŠ”λ‹€.
        for node in node_info["items"]:
            if node['start_node'] == dest_node:
                # candidate_node.append(node)
                # μ΅œμ‹  λ…Έλ“œλ³΄λ‹€ λ°œν™” λ…Έλ“œκ°€ λ‹€μŒ state 인지 확인
                if top['depth']+1 == node['depth']:
                    # dest_node 의 uttr μΆ”μΆœ -> λ°œν™”μ— / λ°œν™”κ°€ ν¬ν•¨λ˜λŠ”μ§€ 확인
                    # node['uttrance'] 에 값이 λ‹€μˆ˜ λ“€μ–΄μžˆλŠ” 경우 λ°°μ—΄λ‘œ λ°˜ν™˜
                    # if '\n' in node['utterance']:
                    node_utter = node['utterance'].split('\n')
                    for n in node_utter:
                        if utterance in n or n in utterance:
                            stack.push(node)
                            # print(node['intent'])

                            if node['fallback']:
                                while(True):
                                    if stack.size() == 0:
                                        return
                                    peek = stack.peek()
                                    if peek['start_node'] == node['fallback']:
                                        return str(str(node['depth']) + ':' + node['intent'])
                                    else:
                                        stack.pop()
                            else:
                                return str(str(node['depth']) + ':' + node['intent'])
    return str("Can't run this command!")

# 1. 차트 μ›Ή ꡬ동
## state = 1
stack.push(node_info["items"][0])

# 2. 페리였 / μž„ν”Œλž€νŠΈ 각 차트 λΆ„κΈ°
## 페리였 차트둜 λΆ„κΈ°
stack.push(node_info["items"][1])



demo = gr.Interface(fn=classifier, inputs="textbox", outputs="textbox",
                    examples=[
                        ["start listening"],
                        ["select tooth 1"],
                        ["pocket depth 1 2 3"],
                        ["select tooth 2"],
                        ["treatment plan"],
                        ["missing"],
                        ["select tooth 5 buccal mesial pocket depth"],
                        ["save"]
                        ]
                    )
    
if __name__ == "__main__":
    demo.launch(share=True)