Test_NLU
This commit is contained in:
parent
b3ec608ae7
commit
eaad8c2020
40
Makiety.py
40
Makiety.py
@ -1,8 +1,5 @@
|
|||||||
"""
|
import jsgf
|
||||||
Przykład
|
|
||||||
user: Cześć, jak masz na imię?
|
|
||||||
system: Witaj, nazywam się Dia.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class NLU: #Natural Language Understanding
|
class NLU: #Natural Language Understanding
|
||||||
@ -13,9 +10,26 @@ class NLU: #Natural Language Understanding
|
|||||||
|
|
||||||
Wyjście: Akt użytkownika (rama)
|
Wyjście: Akt użytkownika (rama)
|
||||||
"""
|
"""
|
||||||
def __init__(self, acts, arguments):
|
def __init__(self, acts, arguments, book_grammar):
|
||||||
self.acts = acts
|
self.acts = acts
|
||||||
self.arguments = arguments
|
self.arguments = arguments
|
||||||
|
self.book_grammar = book_grammar
|
||||||
|
|
||||||
|
def get_dialog_act(rule):
|
||||||
|
slots = []
|
||||||
|
get_slots(rule.expansion, slots)
|
||||||
|
return {'act': rule.grammar.name, 'slots': slots}
|
||||||
|
|
||||||
|
def get_slots(expansion, slots):
|
||||||
|
if expansion.tag != '':
|
||||||
|
slots.append((expansion.tag, expansion.current_match))
|
||||||
|
return
|
||||||
|
|
||||||
|
for child in expansion.children:
|
||||||
|
get_slots(child, slots)
|
||||||
|
|
||||||
|
if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef):
|
||||||
|
get_slots(expansion.referenced_rule.expansion, slots)
|
||||||
|
|
||||||
def analyze(self, text):
|
def analyze(self, text):
|
||||||
"""
|
"""
|
||||||
@ -30,6 +44,14 @@ class NLU: #Natural Language Understanding
|
|||||||
print(act_vector)
|
print(act_vector)
|
||||||
return act_vector
|
return act_vector
|
||||||
|
|
||||||
|
def test_nlu(utterance):
|
||||||
|
matched = book_grammar.find_matching_rules(utterance)
|
||||||
|
|
||||||
|
if matched:
|
||||||
|
return get_dialog_act(matched[0])
|
||||||
|
else:
|
||||||
|
return {'act': 'null', 'slots': []}
|
||||||
|
|
||||||
class DST: #Dialogue State Tracker
|
class DST: #Dialogue State Tracker
|
||||||
"""
|
"""
|
||||||
Moduł odpowiedzialny za śledzenie stanu dialogu. Przechowuje informacje o tym jakie dane zostały uzyskane od użytkownika w toku prowadzonej konwersacji.
|
Moduł odpowiedzialny za śledzenie stanu dialogu. Przechowuje informacje o tym jakie dane zostały uzyskane od użytkownika w toku prowadzonej konwersacji.
|
||||||
@ -112,8 +134,10 @@ class Janet:
|
|||||||
self.nlg = NLG(self.acts, self.arguments)
|
self.nlg = NLG(self.acts, self.arguments)
|
||||||
self.dp = DP(self.acts, self.arguments)
|
self.dp = DP(self.acts, self.arguments)
|
||||||
self.dst = DST(self.acts, self.arguments)
|
self.dst = DST(self.acts, self.arguments)
|
||||||
self.nlu = NLU(self.acts, self.arguments)
|
self.nlu = NLU(self.acts, self.arguments, jsgf.parse_grammar_file('book.jsgf'))
|
||||||
|
|
||||||
|
def test(self, command):
|
||||||
|
nlu.test_nlu(command)
|
||||||
|
|
||||||
def process(self, command):
|
def process(self, command):
|
||||||
act = self.nlu.analyze(command)
|
act = self.nlu.analyze(command)
|
||||||
@ -124,4 +148,4 @@ class Janet:
|
|||||||
janet = Janet()
|
janet = Janet()
|
||||||
while(1):
|
while(1):
|
||||||
text = input("Wpisz tekst: ")
|
text = input("Wpisz tekst: ")
|
||||||
print(janet.process(text))
|
print(janet.test(text))
|
13
book.jsgf
Normal file
13
book.jsgf
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#JSGF V1.0 UTF-8 pl;
|
||||||
|
|
||||||
|
grammar book;
|
||||||
|
|
||||||
|
public <greeting> = hej | cześć | elo | dzień dobry | witam | siemanko | siemanko witam w mojej kuchni | gitara siema;
|
||||||
|
|
||||||
|
<appointment> = chciałbym się umówić na wizytę <doctor> <dzien_rezerwacji>;
|
||||||
|
|
||||||
|
<doctor> = do [imie_lekarza] {doc_list};
|
||||||
|
|
||||||
|
<dzien_rezerwacji> = na <dzien> {day};
|
||||||
|
|
||||||
|
<dzien> = dzisiaj | jutro | poniedziałek | wtorek | środę | czwartek | piątek | sobotę | niedzielę;
|
Loading…
Reference in New Issue
Block a user