refactor evaluate

This commit is contained in:
Bartosz 2021-05-17 14:45:14 +02:00
parent c852703065
commit 3d8a677c27
4 changed files with 42 additions and 43 deletions

View File

@ -5,9 +5,9 @@ grammar inform;
public <inform1> = Książka jest dostępna całodobowo <location> {location}*; public <inform1> = Książka jest dostępna całodobowo <location> {location}*;
public <inform2> = Książka <book> {book} jest dostępna w języku <langs>*; public <inform2> = Książka <book> {book} jest dostępna w języku <langs>*;
public <inform3> = Dostępne są wydania z <editionyear> <editionyear> i <editionyear> roku*; public <inform3> = Dostępne są wydania z <editionyear> <editionyear> i <editionyear> roku*;
public <inform4> = <cost> {cost}*; public <inform4> = <cost> {cost};
public <inform5> = Dostępna pozycja to <book> {book}*; public <inform5> = Dostępna pozycja to <book> {book}*;
public <inform6> = <card> {card}*; public <inform6> = <card> {card};
public <inform7> = Twoje aktywne wypożyczenia obejmują <number> {number} pozycji*; public <inform7> = Twoje aktywne wypożyczenia obejmują <number> {number} pozycji*;
public <inform8> = Pozycja <book> {book} jest dostępna <location> {location}*; public <inform8> = Pozycja <book> {book} jest dostępna <location> {location}*;
public <inform9> = Biblioteka otwarta jest <time> {time} <days> {days} a także <time> {time} w wersji online*; public <inform9> = Biblioteka otwarta jest <time> {time} <days> {days} a także <time> {time} w wersji online*;
@ -19,41 +19,41 @@ public <inform14> = Twoja obecna historia wypożyczeń obejmuje <number> {number
public <inform15> = W obecnych warunkach epidemiologicznych nie jest to możliwe wydania prowadzi tylko <location> {location}*; public <inform15> = W obecnych warunkach epidemiologicznych nie jest to możliwe wydania prowadzi tylko <location> {location}*;
public <inform16> = Obecny <overdue_books> {overdue_books}*; public <inform16> = Obecny <overdue_books> {overdue_books}*;
public <inform17> = Nie <soon_overdue> {soon_overdue}*; public <inform17> = Nie <soon_overdue> {soon_overdue}*;
public <inform18> = <reservation> {reservation}*; public <inform18> = <reservation> {reservation};
public <inform19> = <status> {status}*; public <inform19> = <status> {status};
public <inform20> = W ciągu kolejnych 30 dni realizowane będą <events> {events}*; public <inform20> = W ciągu kolejnych 30 dni realizowane będą <events> {events}*;
public <inform21> = Wydarzenie będzie realizowane <location> {location} i rozpocznie się <time> {time}*; public <inform21> = Wydarzenie będzie realizowane <location> {location} i rozpocznie się <time> {time}*;
public <inform22> = <card_number> {card_number}*; public <inform22> = <card_number> {card_number};
public <inform23> = Polecane dla kategorii <category> {category} 1 <book> {book} 2 <book> {book} 3 <book> {book} 4 <book> {book} 5 <book> {book}*; public <inform23> = Polecane dla kategorii <category> {category} 1 <book> {book} 2 <book> {book} 3 <book> {book} 4 <book> {book} 5 <book> {book}*;
public <inform24> = <offer> {offer}*; public <inform24> = <offer> {offer};
public <inform25> = <book_availability> {book_availability}*; public <inform25> = <book_availability> {book_availability};
public <inform26> = 1 <book> {book} 2 <book> {book}*; public <inform26> = 1 <book> {book} 2 <book> {book}*;
public <inform27> = <book> {book}*; public <inform27> = <book> {book};
public <inform28> = <book_availability> {book_availability} <reservation> {reservation}*; public <inform28> = <book_availability> {book_availability} <reservation> {reservation}*;
public <inform29> = <new_card> {new_card}*; public <inform29> = <new_card> {new_card};
public <inform30> = Mój numer to <card_number> {card_number}*; public <inform30> = Mój numer to <card_number> {card_number}*;
public <inform31> = Aktualnie w bibliotece znajduje się 1450 książek z gatunku <category> {category} Możemy polecić następujące książki <book> {book} <book> {book} <book> {book}*; public <inform31> = Aktualnie w bibliotece znajduje się 1450 książek z gatunku <category> {category} Możemy polecić następujące książki <book> {book} <book> {book} <book> {book}*;
public <inform32> = Godziny otwarcia biblioteki <days> {days} <time> {time} oraz <days> {days} <time> {time}*; public <inform32> = Godziny otwarcia biblioteki <days> {days} <time> {time} oraz <days> {days} <time> {time}*;
public <inform33> = <ebook> {ebook}*; public <inform33> = <ebook> {ebook};
public <inform34> = <book_limit> {book_limit}*; public <inform34> = <book_limit> {book_limit};
public <inform35> = <penalty_cost> {penalty_cost}*; public <inform35> = <penalty_cost> {penalty_cost};
public <inform36> = <lost_card> {lost_card}*; public <inform36> = <lost_card> {lost_card};
public <inform37> = <card_block> {card_block}*; public <inform37> = <card_block> {card_block};
public <inform38> = <stolen_card> {stolen_card}*; public <inform38> = <stolen_card> {stolen_card};
public <inform39> = Posiadamy wszystkie dzieła <author> {author}*; public <inform39> = Posiadamy wszystkie dzieła <author> {author}*;
public <inform40> = <renew_book> {renew_book}*; public <inform40> = <renew_book> {renew_book};
public <inform41> = <days> {days}*; public <inform41> = <days> {days};
public <inform42> = <book> {book} <book> {book} <book> {book}*; public <inform42> = <book> {book} <book> {book} <book> {book};
public <inform43> = <time> {time}*; public <inform43> = <time> {time};
public <inform44> = <summary> {summary}*; public <inform44> = <summary> {summary};
public <inform45> = Na podstawie wcześniej przeczytanych przez Ciebie lektur polecam książkę <book> {book}*; public <inform45> = Na podstawie wcześniej przeczytanych przez Ciebie lektur polecam książkę <book> {book}*;
public <inform46> = Polecam książkę <book> {book}*; public <inform46> = Polecam książkę <book> {book}*;
public <inform47> = Nasza placówka <location> {location}*; public <inform47> = Nasza placówka <location> {location}*;
public <inform48> = Godziny otwarcia <time> {time}*; public <inform48> = Godziny otwarcia <time> {time}*;
public <inform49> = Najczęściej wypożyczanym <category> {category} jest książka <book> {book}*; public <inform49> = Najczęściej wypożyczanym <category> {category} jest książka <book> {book}*;
public <inform50> = <name> {name} <date_of_birth> {date_of_birth}*; public <inform50> = <name> {name} <date_of_birth> {date_of_birth}*;
public <inform51> = <create_an_account> {create_an_account}*; public <inform51> = <create_an_account> {create_an_account};
public <inform52> = <new_account> {new_account}*; public <inform52> = <new_account> {new_account};
<langs> = <lang> {lang}; <langs> = <lang> {lang};

View File

@ -3,13 +3,13 @@
grammar reqmore; grammar reqmore;
public <reqmore1> = Czy dostępna jest <lang> {lang} oraz <edition> {edition}*; public <reqmore1> = Czy dostępna jest <lang> {lang} oraz <edition> {edition}*;
public <reqmore2> = <edition> {edition}*; public <reqmore2> = <edition> {edition};
public <reqmore3> = <cost> {cost} tej książki*; public <reqmore3> = <cost> {cost} tej książki*;
public <reqmore4> = Czy w ostatnim czasie <new> {new}*; public <reqmore4> = Czy w ostatnim czasie <new> {new}*;
public <reqmore5> = Jaki jest <title> {title} <author> {author} i <year> {year} książki*; public <reqmore5> = Jaki jest <title> {title} <author> {author} i <year> {year} książki*;
public <reqmore6> = Czy możesz powiedzieć mi coś więcej o <event> {event}*; public <reqmore6> = Czy możesz powiedzieć mi coś więcej o <event> {event}*;
public <reqmore7> = Proszę podać <book> {book}*; public <reqmore7> = Proszę podać <book> {book}*;
public <reqmore8> = Czy mogę jeszcze jakoś pomóc*; public <reqmore8> = Czy mogę jeszcze jakoś pomóc;
<lang> = wyłącznie polska wersja językowa; <lang> = wyłącznie polska wersja językowa;
<edition> = jakiego wydawnictwa | czy to jedyne wydanie; <edition> = jakiego wydawnictwa | czy to jedyne wydanie;

View File

@ -8,10 +8,13 @@ class NLU:
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, sentence):
for grammar in self.grammars: acts = []
match = grammar.find_matching_rules(sentence) for sentence in sentence.split(','):
if match: for grammar in self.grammars:
return grammar.name match = grammar.find_matching_rules(sentence)
if match:
acts.append(grammar.name)
return acts
def match_slots(self, expansion, slots): def match_slots(self, expansion, slots):
if expansion.tag != '': if expansion.tag != '':

View File

@ -1,17 +1,18 @@
import os import os
import re import re
import jsgf
import pandas as pd import pandas as pd
import numpy as np import numpy as np
from Modules import NLU
PATTERN = r'[^(]*' PATTERN = r'[^(]*'
# Algorytm sprawdzający # Algorytm sprawdzający
grammars = [jsgf.parse_grammar_file(f'JSGFs/{file_name}') for file_name in os.listdir('JSGFs')]
rows = 0 rows = 0
hits = 0 hits = 0
nlu = NLU()
for file_name in os.listdir('data'): for file_name in os.listdir('data'):
df = pd.read_csv(f'data/{file_name}', sep='\t', names=['user', 'sentence', 'acts']) df = pd.read_csv(f'data/{file_name}', sep='\t', names=['user', 'sentence', 'acts'])
df = df[df.user == 'user'] df = df[df.user == 'user']
@ -20,17 +21,12 @@ for file_name in os.listdir('data'):
for row in data: for row in data:
rows += 1 rows += 1
sentence = row[1] sentence = row[1]
sentences = sentence.split(',') user_acts = row[2].split('&')
for sentence in sentences: nlu_acts = nlu.get_dialog_act(sentence)
for grammar in grammars: for nlu_act in nlu_acts:
match = grammar.find_matching_rules(sentence) for user_act in user_acts:
if match: user_act = re.search(PATTERN, user_act).group()
acts = row[2].split('&') if user_act == nlu_act:
for act in acts: hits += 1
user_act = re.search(PATTERN, act).group()
if user_act == grammar.name:
print(grammar.name)
hits += 1
print(f"Accuracy: {(hits / rows)*100}") print(f"Accuracy: {(hits / rows)*100}")
# Dokładność 44.6% # Dokładność 38.5%