Merge branch 'system-mockup'

This commit is contained in:
emkarcinos 2022-04-20 12:44:24 +02:00
commit 6b285c68f4
7 changed files with 124 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
__pycache__/

5
system_mockup/acts.py Normal file
View File

@ -0,0 +1,5 @@
hello_act = 'hello'
name_request_act = 'request(name)'
name_response_act = 'inform(name)'
help_response_act = 'helpresponse'
unknown_act = 'null'

View File

@ -0,0 +1,34 @@
import re
from acts import hello_act, name_request_act
hello = ['dzie[ńn] dobry', 'dobry wiecz[oó]r', 'witam', 'witaj', 'siema', 'elo', 'cze[śs][ćc]']
request_name = ['imi[eę]', 'nazywasz']
question = ['\?$']
acts = {hello_act: [hello],
name_request_act: [request_name, question]}
def analizator_jezyka_naturalnego(text):
text = text_preprocess(text)
frame = act_check(text)
return frame
def text_preprocess(text):
text = text.lower()
return text
def act_check(text):
frame = []
for act, requirements in acts.items():
req = [check_synonyms(synonyms, text) for synonyms in requirements]
if all(req):
frame.append(act)
return frame
def check_synonyms(synonyms, text):
for expression in synonyms:
match = re.search(expression, text)
if match:
return True
return False

View File

@ -0,0 +1,18 @@
import acts as acts
welcome = 'Witaj!'
prompt = 'Zapytaj mnie o moje imię.'
resp = 'Nazywam się Dia.'
unknown = "Nie rozumiem."
def generator_jezyka_nautalnego(frames):
for frame in frames:
if frame == acts.hello_act:
print(welcome, end=" ")
elif frame == acts.name_response_act:
print(resp, end=" ")
elif frame == acts.help_response_act:
print(prompt, end=" ")
else:
print(unknown, end=" ")
print()

View File

@ -0,0 +1,17 @@
from acts import hello_act
dialogue_state = []
def monitor_stanu_dialogowego(frame):
# Some frames can reset the dialogue state, like saying hello.
reset_state_if_needed(frame)
list(map(lambda x: dialogue_state.append(x), frame))
return dialogue_state
def reset_state_if_needed(frame):
if hello_act in frame:
dialogue_state.clear()

View File

@ -0,0 +1,17 @@
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
def main():
running = True
while running:
text = input('>>>')
frame = analizator_jezyka_naturalnego(text)
state = monitor_stanu_dialogowego(frame)
response_frames = taktyka_dialogu(state, frame)
generator_jezyka_nautalnego(response_frames)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,32 @@
from os import stat
from re import S
from acts import *
def check_condition(state, conditions, type=all):
if type(i in state for i in conditions):
return True
return False
def taktyka_dialogu(state, frame):
if should_respond_gently(frame):
return [hello_act, name_response_act]
if should_prompt(frame):
return [hello_act, help_response_act]
if should_respond_cold(frame):
return [name_response_act]
return [unknown_act]
def should_respond_gently(state):
return check_condition(state, [hello_act, name_request_act])
def should_prompt(state):
return check_condition(state, [hello_act], any)
def should_respond_cold(state):
return check_condition(state, [name_request_act])