fixes
This commit is contained in:
parent
ca37786161
commit
ac0a3417da
@ -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;
|
||||
|
||||
|
@ -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;
|
@ -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ą"]
|
||||
|
||||
#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):
|
||||
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))
|
||||
"""
|
||||
|
||||
|
||||
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:
|
||||
#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:
|
||||
print(random.choice(unknown))
|
||||
print(tactic)
|
||||
|
||||
print()
|
||||
|
@ -47,13 +47,14 @@ def append_or_merge_frame(frame, dialogue_state):
|
||||
def update_facts_if_needed(slot):
|
||||
global dialogue_state
|
||||
|
||||
if slot[1] is None or slot[1] == '':
|
||||
return
|
||||
if slot != None and len(slot) > 1:
|
||||
if slot[1] is None or slot[1] == '':
|
||||
return
|
||||
|
||||
if slot[0] == 'repo':
|
||||
dialogue_state['facts']['repo'] = slot[1]
|
||||
elif slot[0] == 'time':
|
||||
dialogue_state['facts']['time'] = slot[1]
|
||||
if slot[0] == 'repo':
|
||||
dialogue_state['facts']['repo'] = slot[1]
|
||||
elif slot[0] == 'time':
|
||||
dialogue_state['facts']['time'] = slot[1]
|
||||
|
||||
|
||||
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:
|
||||
merged = False
|
||||
for i in range(len(state_slots)):
|
||||
update_facts_if_needed(frame_slot[i])
|
||||
if state_slots[i][0] == frame_slot[0]:
|
||||
merged = True
|
||||
# Do not merge empty incomming slots
|
||||
if frame_slot[1] is not None and not len(frame_slot[1]) == 0:
|
||||
state_slots[i] = frame_slot
|
||||
break
|
||||
if len(frame_slot) > i:
|
||||
update_facts_if_needed(frame_slot[i])
|
||||
if state_slots[i][0] == frame_slot[0]:
|
||||
merged = True
|
||||
# Do not merge empty incomming slots
|
||||
if frame_slot[1] is not None and not len(frame_slot[1]) == 0:
|
||||
state_slots[i] = frame_slot
|
||||
break
|
||||
|
||||
if not merged:
|
||||
state_slots.append(frame_slot)
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user