This commit is contained in:
Jakub Adamski 2022-06-15 00:02:44 +02:00
parent ca37786161
commit ac0a3417da
6 changed files with 83 additions and 83 deletions

View File

@ -2,7 +2,7 @@
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;

View File

@ -4,4 +4,4 @@ grammar repo;
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;

View File

@ -1,59 +1,78 @@
from taktyka_dialogu import Questions
import difflib as dl
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ść",
"Hello",
"Hej",
"Dzień dobry",
"Hey"]
"Hey"
]
unknown = ["Nie rozumiem.",
"Ubierz to w inne słowa.",
"Nie wiem co masz na myśli.",
"Powiedz to innymi słowami",
"Powiedz co chciałbyś uzyskać"]
unknown = [
"Nie rozumiem.",
"Nie wiem co masz na myśli."
]
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 widzenia",
"Miłego dnia",
"Do widzenia i miłego dnia"
"Narazie"]
"Narazie"
]
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"]
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ć?"]
#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, question, state):
if question != Questions.NONE:
#ask additional questions
if question == Questions.TIME:
print(random.choice(time))
if question == Questions.REPO:
print(random.choice(repo))
"""
if question == Questions.HOWMANY:
print(random.choice(howmany))
"""
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ą"]
else:
#dont ask questions
if frame['act'] == "hello":
print(random.choice(welcome))
elif frame['act'] == "bye":
print(random.choice(bye))
elif frame['act'] == "pomoc":
print(random.choice(help))
else:
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))
elif tactic[1] == 'help':
print(random.choice(help))
print("Dostępne komendy: \n - " + '\n - '.join(commands))
elif tactic == 'bye':
print(random.choice(bye))
print()
sys.exit(0)
else:
print(tactic)
print()

View File

@ -47,6 +47,7 @@ def append_or_merge_frame(frame, dialogue_state):
def update_facts_if_needed(slot):
global dialogue_state
if slot != None and len(slot) > 1:
if slot[1] is None or slot[1] == '':
return
@ -65,6 +66,7 @@ def append_or_merge_slots(frame_slots, state_slots):
for frame_slot in frame_slots:
merged = False
for i in range(len(state_slots)):
if len(frame_slot) > i:
update_facts_if_needed(frame_slot[i])
if state_slots[i][0] == frame_slot[0]:
merged = True

View File

@ -1,26 +1,21 @@
from analizator_jezyka_naturalnego import analizator_jezyka_naturalnego
from monitor_stanu_dialogowego import monitor_stanu_dialogowego
from taktyka_dialogu import taktyka_dialogu
# from generator_jezyka_nautalnego import generator_jezyka_nautalnego
from generator_jezyka_nautalnego import generator_jezyka_nautalnego
def main():
running = True
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:
text = input('>>>')
frame = analizator_jezyka_naturalnego(text)
# print(frame)
#{'act': 'notifications', 'slots': [('time_when', None), ('liczba', ''), ('timeunit', None)]}
state = monitor_stanu_dialogowego(frame)
# print(state)
questions = taktyka_dialogu(state, frame) # todo dodac stan
# print(questions)
#
# generator_jezyka_nautalnego(frame, questions, state)
tactic = taktyka_dialogu(state, frame)
generator_jezyka_nautalnego(frame, tactic, state, text)
if __name__ == '__main__':
main()

View File

@ -1,9 +1,6 @@
from apimock import *
gramar_slots = {
# 'act': ((slot0, 'required'),
# (slot1, 'optional')
# )
'pullrequest': (('action', 'optional'),
('repo', 'required')
),
@ -39,7 +36,6 @@ gramar_slots = {
def taktyka_dialogu(state, frame):
if frame['act'] == 'null':
print("Nie rozumiem :/")
return 'null'
if state['current_context'] in ['hello', 'pomoc', 'bye']:
return short_thread(state)
@ -48,26 +44,18 @@ def taktyka_dialogu(state, frame):
def short_thread(state):
if state['current_context'] == 'pomoc':
print(state['current_context'])
return state['current_context']
#TODO?
else:
print(state['current_context'])
return state['current_context']
def validate_repo(repo):
if repo not in listRepositories():
print('repo not in listRepositories')
return 'repo not in listRepositories'
if repo not in listPublicRepositories():
print('repo not in listPublicRepositories')
#validate_date
#if zakres dat
#if test/notification/issues/pullRequest non empty
return 'repo not in listPublicRepositories'
def long_thread(state):
act = state['current_context']
print(act)
# slots = []
for topic in state['topics']:
if act == topic['act']:
slots = topic['slots']
@ -79,7 +67,7 @@ def long_thread(state):
required_empty = check_req(req_args)
if required_empty:
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):
req = []
@ -112,7 +100,3 @@ def agregate(grammar, slots):
opt_args.append([item[0], value])
return req_args, opt_args
#powiedz, że może dopytać o 'optional'
#gramar_slots musi mieć 100% gramatyk albo będzie pomijał sloty