fixes
This commit is contained in:
parent
ca37786161
commit
ac0a3417da
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
grammar help;
|
grammar help;
|
||||||
|
|
||||||
public <help_zapytanie> = jakie sa dostepne <functions> {functions} | w czym mozesz mi <help> {help} | co mogę się od ciebie dowiedziec;
|
public <help_zapytanie> = jakie sa dostepne <functions> {functions} | w czym mozesz mi <help> {help} | co mogę się od ciebie dowiedziec | pomoc;
|
||||||
|
|
||||||
<help> = pomoc;
|
<help> = pomoc;
|
||||||
|
|
||||||
|
@ -4,4 +4,4 @@ grammar repo;
|
|||||||
|
|
||||||
public <repo_zapytanie> = <repozytoria> {repozytoria};
|
public <repo_zapytanie> = <repozytoria> {repozytoria};
|
||||||
|
|
||||||
<repozytoria> = gra - kolko i krzyzyk | zajęcia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
|
<repozytoria> = gra - kolko i krzyzyk | zajecia ai | projekt - sklep | super_stronka_internetowa | nazwarepozytorium | pizza | zajecia;
|
@ -1,59 +1,78 @@
|
|||||||
from taktyka_dialogu import Questions
|
import difflib as dl
|
||||||
import random
|
import random
|
||||||
|
import sys
|
||||||
|
|
||||||
welcome = ['Witaj!',
|
commands = [
|
||||||
|
'pomoc',
|
||||||
|
'powiedz co nowego na moim gicie',
|
||||||
|
'do widzenia',
|
||||||
|
'pokaz issue w',
|
||||||
|
'pokaz mi powiadomienia',
|
||||||
|
'jakie sa pull requesty',
|
||||||
|
'pokaz mi testy w'
|
||||||
|
]
|
||||||
|
|
||||||
|
welcome = [
|
||||||
|
'Witaj!',
|
||||||
"Cześć",
|
"Cześć",
|
||||||
"Hello",
|
"Hello",
|
||||||
"Hej",
|
"Hej",
|
||||||
"Dzień dobry",
|
"Dzień dobry",
|
||||||
"Hey"]
|
"Hey"
|
||||||
|
]
|
||||||
|
|
||||||
unknown = ["Nie rozumiem.",
|
unknown = [
|
||||||
"Ubierz to w inne słowa.",
|
"Nie rozumiem.",
|
||||||
"Nie wiem co masz na myśli.",
|
"Nie wiem co masz na myśli."
|
||||||
"Powiedz to innymi słowami",
|
]
|
||||||
"Powiedz co chciałbyś uzyskać"]
|
|
||||||
|
|
||||||
bye = ["Żegnaj!",
|
other = [
|
||||||
|
"Podobne komendy: ",
|
||||||
|
"Może chodziło Ci o te komendy: ",
|
||||||
|
"Spróbuj wybrać jedną z tych komend: "
|
||||||
|
]
|
||||||
|
|
||||||
|
bye = [
|
||||||
|
"Żegnaj!",
|
||||||
"Do zobaczenia",
|
"Do zobaczenia",
|
||||||
"Do widzenia",
|
"Do widzenia",
|
||||||
"Miłego dnia",
|
"Miłego dnia",
|
||||||
"Do widzenia i miłego dnia"
|
"Do widzenia i miłego dnia"
|
||||||
"Narazie"]
|
"Narazie"
|
||||||
|
]
|
||||||
|
|
||||||
help = ["Obsługuję przekazywanie informacji z systemu GitHub - repozytoria, pull requesty, issue, powiadomienia."]
|
help = ["Obsługuję przekazywanie informacji z systemu GitHub - repozytoria, pull requesty, issue, powiadomienia."]
|
||||||
#todo dodać więcej odpowiedzi
|
|
||||||
|
|
||||||
time = ["Z jakiego czasu?", "Z jakiego okresu?", "Podaj z jakiego przedziału czasowego"]
|
time = ["Z jakiego czasu?", "Z jakiego okresu?", "Podaj z jakiego przedziału czasowego"]
|
||||||
repo = ["Z jakiego repozytorium", "Wskaż repozytorium", "Podaj z jakiego repozytorium chciałbyć otrzymać informacje", "Określ repozytorium"]
|
|
||||||
|
repo = [
|
||||||
|
"Z jakiego repozytorium",
|
||||||
|
"Wskaż repozytorium",
|
||||||
|
"Podaj z jakiego repozytorium chciałbyć otrzymać informacje",
|
||||||
|
"Określ repozytorium"
|
||||||
|
]
|
||||||
|
|
||||||
howmany = ["Ile ostatnich elemntów chcesz zobaczyć?", "Ile ostatnich elmentów wyświetlić?", "Ile ostatnich elemnetów pokazać?"]
|
howmany = ["Ile ostatnich elemntów chcesz zobaczyć?", "Ile ostatnich elmentów wyświetlić?", "Ile ostatnich elemnetów pokazać?"]
|
||||||
|
error_time = ["Podano nie prawidłowy czas, popraw ramy czasowe", "Czas jest nie prawidłowy, podaj ponownie", "Podaj przedział czasowy jeszcze raz"]
|
||||||
|
error_repo = ["Podano nieprawidłową nazwę repozytorium", "Podaj ponownie nazwę repozytorium, ponieważ podania nie prawidłową"]
|
||||||
|
|
||||||
#error_time = ["Podano nie prawidłowy czas, popraw ramy czasowe", "Czas jest nie prawidłowy, podaj ponownie", "Podaj przedział czasowy jeszcze raz"]
|
|
||||||
#error_repo = ["Podano nieprawidłową nazwę repozytorium", "Podaj ponownie nazwę repozytorium, ponieważ podania nie prawidłową"]
|
|
||||||
|
|
||||||
#todo generator powinien przyjmować zwrotkę z taktyki dialogu
|
def generator_jezyka_nautalnego(frame, tactic, state, text):
|
||||||
|
if tactic == 'null':
|
||||||
|
beastMatch = dl.get_close_matches(text, commands)
|
||||||
|
print(random.choice(unknown))
|
||||||
|
if len(beastMatch) > 0:
|
||||||
|
print(random.choice(other) + ', '.join(beastMatch))
|
||||||
|
|
||||||
def generator_jezyka_nautalnego(frame, question, state):
|
elif tactic[1] == 'help':
|
||||||
if question != Questions.NONE:
|
print(random.choice(help))
|
||||||
#ask additional questions
|
print("Dostępne komendy: \n - " + '\n - '.join(commands))
|
||||||
if question == Questions.TIME:
|
|
||||||
print(random.choice(time))
|
elif tactic == 'bye':
|
||||||
if question == Questions.REPO:
|
print(random.choice(bye))
|
||||||
print(random.choice(repo))
|
print()
|
||||||
"""
|
sys.exit(0)
|
||||||
if question == Questions.HOWMANY:
|
|
||||||
print(random.choice(howmany))
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
#dont ask questions
|
print(tactic)
|
||||||
if frame['act'] == "hello":
|
|
||||||
print(random.choice(welcome))
|
print()
|
||||||
elif frame['act'] == "bye":
|
|
||||||
print(random.choice(bye))
|
|
||||||
elif frame['act'] == "pomoc":
|
|
||||||
print(random.choice(help))
|
|
||||||
else:
|
|
||||||
print(random.choice(unknown))
|
|
||||||
|
@ -47,13 +47,14 @@ def append_or_merge_frame(frame, dialogue_state):
|
|||||||
def update_facts_if_needed(slot):
|
def update_facts_if_needed(slot):
|
||||||
global dialogue_state
|
global dialogue_state
|
||||||
|
|
||||||
if slot[1] is None or slot[1] == '':
|
if slot != None and len(slot) > 1:
|
||||||
return
|
if slot[1] is None or slot[1] == '':
|
||||||
|
return
|
||||||
|
|
||||||
if slot[0] == 'repo':
|
if slot[0] == 'repo':
|
||||||
dialogue_state['facts']['repo'] = slot[1]
|
dialogue_state['facts']['repo'] = slot[1]
|
||||||
elif slot[0] == 'time':
|
elif slot[0] == 'time':
|
||||||
dialogue_state['facts']['time'] = slot[1]
|
dialogue_state['facts']['time'] = slot[1]
|
||||||
|
|
||||||
|
|
||||||
def append_or_merge_slots(frame_slots, state_slots):
|
def append_or_merge_slots(frame_slots, state_slots):
|
||||||
@ -65,13 +66,14 @@ def append_or_merge_slots(frame_slots, state_slots):
|
|||||||
for frame_slot in frame_slots:
|
for frame_slot in frame_slots:
|
||||||
merged = False
|
merged = False
|
||||||
for i in range(len(state_slots)):
|
for i in range(len(state_slots)):
|
||||||
update_facts_if_needed(frame_slot[i])
|
if len(frame_slot) > i:
|
||||||
if state_slots[i][0] == frame_slot[0]:
|
update_facts_if_needed(frame_slot[i])
|
||||||
merged = True
|
if state_slots[i][0] == frame_slot[0]:
|
||||||
# Do not merge empty incomming slots
|
merged = True
|
||||||
if frame_slot[1] is not None and not len(frame_slot[1]) == 0:
|
# Do not merge empty incomming slots
|
||||||
state_slots[i] = frame_slot
|
if frame_slot[1] is not None and not len(frame_slot[1]) == 0:
|
||||||
break
|
state_slots[i] = frame_slot
|
||||||
|
break
|
||||||
|
|
||||||
if not merged:
|
if not merged:
|
||||||
state_slots.append(frame_slot)
|
state_slots.append(frame_slot)
|
||||||
|
@ -1,26 +1,21 @@
|
|||||||
from analizator_jezyka_naturalnego import analizator_jezyka_naturalnego
|
from analizator_jezyka_naturalnego import analizator_jezyka_naturalnego
|
||||||
from monitor_stanu_dialogowego import monitor_stanu_dialogowego
|
from monitor_stanu_dialogowego import monitor_stanu_dialogowego
|
||||||
from taktyka_dialogu import taktyka_dialogu
|
from taktyka_dialogu import taktyka_dialogu
|
||||||
# from generator_jezyka_nautalnego import generator_jezyka_nautalnego
|
from generator_jezyka_nautalnego import generator_jezyka_nautalnego
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
running = True
|
running = True
|
||||||
state = []
|
state = []
|
||||||
|
print()
|
||||||
|
print("Dostępne repozytoria: \n - gra - kolko i krzyzyk, \n - zajecia ai, \n - projekt - sklep, \n - super_stronka_internetowa, \n - nazwarepozytorium, \n - pizza, \n - zajecia")
|
||||||
|
print("Aby poznać komendy, wpisz 'pomoc' \n")
|
||||||
|
|
||||||
while running:
|
while running:
|
||||||
text = input('>>>')
|
text = input('>>>')
|
||||||
|
|
||||||
frame = analizator_jezyka_naturalnego(text)
|
frame = analizator_jezyka_naturalnego(text)
|
||||||
# print(frame)
|
|
||||||
#{'act': 'notifications', 'slots': [('time_when', None), ('liczba', ''), ('timeunit', None)]}
|
|
||||||
|
|
||||||
state = monitor_stanu_dialogowego(frame)
|
state = monitor_stanu_dialogowego(frame)
|
||||||
# print(state)
|
tactic = taktyka_dialogu(state, frame)
|
||||||
|
generator_jezyka_nautalnego(frame, tactic, state, text)
|
||||||
questions = taktyka_dialogu(state, frame) # todo dodac stan
|
|
||||||
# print(questions)
|
|
||||||
#
|
|
||||||
# generator_jezyka_nautalnego(frame, questions, state)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
from apimock import *
|
from apimock import *
|
||||||
|
|
||||||
gramar_slots = {
|
gramar_slots = {
|
||||||
# 'act': ((slot0, 'required'),
|
|
||||||
# (slot1, 'optional')
|
|
||||||
# )
|
|
||||||
'pullrequest': (('action', 'optional'),
|
'pullrequest': (('action', 'optional'),
|
||||||
('repo', 'required')
|
('repo', 'required')
|
||||||
),
|
),
|
||||||
@ -39,7 +36,6 @@ gramar_slots = {
|
|||||||
|
|
||||||
def taktyka_dialogu(state, frame):
|
def taktyka_dialogu(state, frame):
|
||||||
if frame['act'] == 'null':
|
if frame['act'] == 'null':
|
||||||
print("Nie rozumiem :/")
|
|
||||||
return 'null'
|
return 'null'
|
||||||
if state['current_context'] in ['hello', 'pomoc', 'bye']:
|
if state['current_context'] in ['hello', 'pomoc', 'bye']:
|
||||||
return short_thread(state)
|
return short_thread(state)
|
||||||
@ -48,26 +44,18 @@ def taktyka_dialogu(state, frame):
|
|||||||
|
|
||||||
def short_thread(state):
|
def short_thread(state):
|
||||||
if state['current_context'] == 'pomoc':
|
if state['current_context'] == 'pomoc':
|
||||||
print(state['current_context'])
|
|
||||||
return state['current_context']
|
return state['current_context']
|
||||||
#TODO?
|
|
||||||
else:
|
else:
|
||||||
print(state['current_context'])
|
|
||||||
return state['current_context']
|
return state['current_context']
|
||||||
|
|
||||||
def validate_repo(repo):
|
def validate_repo(repo):
|
||||||
if repo not in listRepositories():
|
if repo not in listRepositories():
|
||||||
print('repo not in listRepositories')
|
return 'repo not in listRepositories'
|
||||||
if repo not in listPublicRepositories():
|
if repo not in listPublicRepositories():
|
||||||
print('repo not in listPublicRepositories')
|
return 'repo not in listPublicRepositories'
|
||||||
#validate_date
|
|
||||||
#if zakres dat
|
|
||||||
#if test/notification/issues/pullRequest non empty
|
|
||||||
|
|
||||||
def long_thread(state):
|
def long_thread(state):
|
||||||
act = state['current_context']
|
act = state['current_context']
|
||||||
print(act)
|
|
||||||
# slots = []
|
|
||||||
for topic in state['topics']:
|
for topic in state['topics']:
|
||||||
if act == topic['act']:
|
if act == topic['act']:
|
||||||
slots = topic['slots']
|
slots = topic['slots']
|
||||||
@ -79,7 +67,7 @@ def long_thread(state):
|
|||||||
required_empty = check_req(req_args)
|
required_empty = check_req(req_args)
|
||||||
if required_empty:
|
if required_empty:
|
||||||
return "QESTION", required_empty[0] #slot do uzupełnienia
|
return "QESTION", required_empty[0] #slot do uzupełnienia
|
||||||
return "ANSWER", req_args, opt_args #wyświetl użytkownikowi
|
return "ANSWER", act, req_args, opt_args #wyświetl użytkownikowi
|
||||||
|
|
||||||
def check_req(req_args):
|
def check_req(req_args):
|
||||||
req = []
|
req = []
|
||||||
@ -112,7 +100,3 @@ def agregate(grammar, slots):
|
|||||||
opt_args.append([item[0], value])
|
opt_args.append([item[0], value])
|
||||||
return req_args, opt_args
|
return req_args, opt_args
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#powiedz, że może dopytać o 'optional'
|
|
||||||
#gramar_slots musi mieć 100% gramatyk albo będzie pomijał sloty
|
|
||||||
|
Loading…
Reference in New Issue
Block a user