nlu update

This commit is contained in:
Bartosz 2021-05-29 10:43:39 +02:00
parent 4670a75d80
commit 6eb2ecfeed
5 changed files with 29 additions and 29 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
__pycache__

View File

@ -17,19 +17,19 @@ public <potwierdzenie4> = Książka <book> została zarezerwowana;
Mieszkaj boho | Potęga checklisty | Sen o okapi | ON | Przygody matematyka | Mieszkaj boho | Potęga checklisty | Sen o okapi | ON | Przygody matematyka |
Dwanaście Stacji | Krew | Milczenie owiec | Duma i uprzedzenie | Władca Pierścieni | Dwanaście Stacji | Krew | Milczenie owiec | Duma i uprzedzenie | Władca Pierścieni |
Jane Eyre | Harry Potter i kamień filozoficzny | Zabić drozda | Wichrowe Wzgórza | Jane Eyre | Harry Potter i kamień filozoficzny | Zabić drozda | Wichrowe Wzgórza |
Rok 1984 | Mroczne materie | Wielkie nadzieje | Małe kobietki | Tessa DUrberville | Rok 1984 | Mroczne materie | Wielkie nadzieje | Małe kobietki | Tessa D Urberville |
Paragraf 22 | Rebeka | Birdsong | Buszujący w zbożu | Żona podróżnika w czasie | Paragraf 22 | Rebeka | Birdsong | Buszujący w zbożu | Żona podróżnika w czasie |
Miasteczko Middlemarch | Przeminęło z wiatrem | Wielki Gatsby | Samotnia | Miasteczko Middlemarch | Przeminęło z wiatrem | Wielki Gatsby | Samotnia |
Wojna i pokój | Autostopem przez Galaktykę | Znowu w Brideshead | Grona gniewu | Wojna i pokój | Autostopem przez Galaktykę | Znowu w Brideshead | Grona gniewu |
Alicja w Krainie Czarów | O czym szumią wierzby | Anna Karenina | David Copperfield | Alicja w Krainie Czarów | O czym szumią wierzby | Anna Karenina | David Copperfield |
Opowieści z Narnii | Emma | Perswazje | Lew, Czarwnica i Stara Szafa; Opowieści z Narnii | Emma | Perswazje | Lew Czarwnica i Stara Szafa;
<authors> = Marcin Bruczkowski | Harari Yuval Noah | Haruki Murakami | Fiodor Dostojewski | <authors> = Marcin Bruczkowski | Harari Yuval Noah | Haruki Murakami | Fiodor Dostojewski |
Robert Anthony Salvatore | Dimitri Głuchowski | Dan Brown | Anna Rice | Robert Anthony Salvatore | Dimitri Głuchowski | Dan Brown | Anna Rice |
Wojciech Chmielarz | Remigiusz Mróz | Leigh Bardugo | Carlos Ruiz Zafon | Wojciech Chmielarz | Remigiusz Mróz | Leigh Bardugo | Carlos Ruiz Zafon |
Tomasz Budzyński | Weronika Łodyga | Andrzej Sapkowski | J R R Tolkien | Tomasz Budzyński | Weronika Łodyga | Andrzej Sapkowski | J R R Tolkien |
Katarzyna Marciniak | Richard Taylor | Megan Rosenbloom | Piotr Zychowicz | Katarzyna Marciniak | Richard Taylor | Megan Rosenbloom | Piotr Zychowicz |
Ewelina Podrez-Siama | Marzena Rogalska | Bill Gates | Justina Blakeney | Ewelina Podrez Siama | Marzena Rogalska | Bill Gates | Justina Blakeney |
Atul Gawande | Mariana Leky | Diana Brzezińska | Stanisław Ulam | Tomasz Różycki | Atul Gawande | Mariana Leky | Diana Brzezińska | Stanisław Ulam | Tomasz Różycki |
Max Czornyj | Thomas Harris | Jane Austen | J R R Tolkien | Charlotte Bronte | Max Czornyj | Thomas Harris | Jane Austen | J R R Tolkien | Charlotte Bronte |
J K Rowling | Harper Lee | Emily Bronte | George Orwell | Philip Pullman | Charles Dickens | J K Rowling | Harper Lee | Emily Bronte | George Orwell | Philip Pullman | Charles Dickens |

View File

@ -59,19 +59,19 @@ public <rezerwacja4> = Chciałabym dokonać rezerwacji ksiązki <books> {books}*
Mieszkaj boho | Potęga checklisty | Sen o okapi | ON | Przygody matematyka | Mieszkaj boho | Potęga checklisty | Sen o okapi | ON | Przygody matematyka |
Dwanaście Stacji | Krew | Milczenie owiec | Duma i uprzedzenie | Władca Pierścieni | Dwanaście Stacji | Krew | Milczenie owiec | Duma i uprzedzenie | Władca Pierścieni |
Jane Eyre | Harry Potter i kamień filozoficzny | Zabić drozda | Wichrowe Wzgórza | Jane Eyre | Harry Potter i kamień filozoficzny | Zabić drozda | Wichrowe Wzgórza |
Rok 1984 | Mroczne materie | Wielkie nadzieje | Małe kobietki | Tessa DUrberville | Rok 1984 | Mroczne materie | Wielkie nadzieje | Małe kobietki | Tessa D Urberville |
Paragraf 22 | Rebeka | Birdsong | Buszujący w zbożu | Żona podróżnika w czasie | Paragraf 22 | Rebeka | Birdsong | Buszujący w zbożu | Żona podróżnika w czasie |
Miasteczko Middlemarch | Przeminęło z wiatrem | Wielki Gatsby | Samotnia | Miasteczko Middlemarch | Przeminęło z wiatrem | Wielki Gatsby | Samotnia |
Wojna i pokój | Autostopem przez Galaktykę | Znowu w Brideshead | Grona gniewu | Wojna i pokój | Autostopem przez Galaktykę | Znowu w Brideshead | Grona gniewu |
Alicja w Krainie Czarów | O czym szumią wierzby | Anna Karenina | David Copperfield | Alicja w Krainie Czarów | O czym szumią wierzby | Anna Karenina | David Copperfield |
Opowieści z Narnii | Emma | Perswazje | Lew, Czarwnica i Stara Szafa; Opowieści z Narnii | Emma | Perswazje | Lew Czarwnica i Stara Szafa;
<authors> = Marcin Bruczkowski | Harari Yuval Noah | Haruki Murakami | Fiodor Dostojewski | <authors> = Marcin Bruczkowski | Harari Yuval Noah | Haruki Murakami | Fiodor Dostojewski |
Robert Anthony Salvatore | Dimitri Głuchowski | Dan Brown | Anna Rice | Robert Anthony Salvatore | Dimitri Głuchowski | Dan Brown | Anna Rice |
Wojciech Chmielarz | Remigiusz Mróz | Leigh Bardugo | Carlos Ruiz Zafon | Wojciech Chmielarz | Remigiusz Mróz | Leigh Bardugo | Carlos Ruiz Zafon |
Tomasz Budzyński | Weronika Łodyga | Andrzej Sapkowski | J R R Tolkien | Tomasz Budzyński | Weronika Łodyga | Andrzej Sapkowski | J R R Tolkien |
Katarzyna Marciniak | Richard Taylor | Megan Rosenbloom | Piotr Zychowicz | Katarzyna Marciniak | Richard Taylor | Megan Rosenbloom | Piotr Zychowicz |
Ewelina Podrez-Siama | Marzena Rogalska | Bill Gates | Justina Blakeney | Ewelina Podrez Siama | Marzena Rogalska | Bill Gates | Justina Blakeney |
Atul Gawande | Mariana Leky | Diana Brzezińska | Stanisław Ulam | Tomasz Różycki | Atul Gawande | Mariana Leky | Diana Brzezińska | Stanisław Ulam | Tomasz Różycki |
Max Czornyj | Thomas Harris | Jane Austen | J R R Tolkien | Charlotte Bronte | Max Czornyj | Thomas Harris | Jane Austen | J R R Tolkien | Charlotte Bronte |
J K Rowling | Harper Lee | Emily Bronte | George Orwell | Philip Pullman | Charles Dickens | J K Rowling | Harper Lee | Emily Bronte | George Orwell | Philip Pullman | Charles Dickens |
@ -82,10 +82,10 @@ public <rezerwacja4> = Chciałabym dokonać rezerwacji ksiązki <books> {books}*
<status> = otwarta | zamknięta | otwarta w czasie pandemii | zamknięta do odwołania; <status> = otwarta | zamknięta | otwarta w czasie pandemii | zamknięta do odwołania;
<genres> = romans | thriller | ksiazka fantasy | horror | biografia | science-fiction | dramat | <genres> = romans | thriller | ksiazka fantasy | horror | biografia | science fiction | dramat |
powiesc | basn | satyra | legenda | liryka | opowiadanie | komedia | epika | poezja | powiesc | basn | satyra | legenda | liryka | opowiadanie | komedia | epika | poezja |
literatura piekna; literatura piekna;
<editions> = 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 |2003 | <editions> = 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 |2003 |
2004 | 2005 | 2000 2004 | 2005 | 2000;

View File

@ -7,19 +7,15 @@ class NLU:
def __init__(self): def __init__(self):
self.grammars = [jsgf.parse_grammar_file(f'JSGFs/{file_name}') for file_name in os.listdir('JSGFs')] self.grammars = [jsgf.parse_grammar_file(f'JSGFs/{file_name}') for file_name in os.listdir('JSGFs')]
def get_dialog_act(self, sentence): def get_dialog_act(self, rule):
acts = [] slots = []
for sentence in sentence.split(','): self.get_slots(rule.expansion, slots)
for grammar in self.grammars: return {'act': rule.grammar.name, 'slots': slots}
match = grammar.find_matching_rules(sentence)
if match:
acts.append(grammar.name)
return acts
def match_slots(self, expansion, slots): def get_slots(self, expansion, slots):
if expansion.tag != '': if expansion.tag != '':
slots.append((expansion.tag, expansion.current_match)) slots.append((expansion.tag, expansion.current_match))
return slots return
for child in expansion.children: for child in expansion.children:
self.get_slots(child, slots) self.get_slots(child, slots)
@ -27,14 +23,18 @@ class NLU:
if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef): if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef):
self.get_slots(expansion.referenced_rule.expansion, slots) self.get_slots(expansion.referenced_rule.expansion, slots)
def get_slots(self, utterance): def match(self, utterance):
slots = [] list_of_illegal_character = [',', '.', "'", '?', '!', ':', '-', '/']
for illegal_character in list_of_illegal_character[:-2]:
utterance = utterance.replace(f'{illegal_character}','')
for illegal_character in list_of_illegal_character[-2:]:
utterance = utterance.replace(f'{illegal_character}',' ')
for grammar in self.grammars: for grammar in self.grammars:
matched = grammar.find_matching_rules(utterance) matched = grammar.find_matching_rules(utterance)
if matched: if matched:
return self.match_slots(matched[0], slots) return self.get_dialog_act(matched[0])
return [] return {'act': 'null', 'slots': []}
#Dialogue policy #Dialogue policy
class DP: class DP:

View File

@ -22,11 +22,10 @@ for file_name in os.listdir('data'):
rows += 1 rows += 1
sentence = row[1] sentence = row[1]
user_acts = row[2].split('&') user_acts = row[2].split('&')
nlu_acts = nlu.get_dialog_act(sentence) nlu_match = nlu.match(sentence)
for nlu_act in nlu_acts: if nlu_match['act'] in user_acts:
for user_act in user_acts: hits += 1
user_act = re.search(PATTERN, user_act).group()
if user_act == nlu_act:
hits += 1
print(f"Accuracy: {(hits / rows)*100}") print(f"Accuracy: {(hits / rows)*100}")
# Dokładność 38.5% # Dokładność 38.5%