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 <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 <inform4> = <cost> {cost}*;
public <inform4> = <cost> {cost};
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 <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*;
@ -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 <inform16> = Obecny <overdue_books> {overdue_books}*;
public <inform17> = Nie <soon_overdue> {soon_overdue}*;
public <inform18> = <reservation> {reservation}*;
public <inform19> = <status> {status}*;
public <inform18> = <reservation> {reservation};
public <inform19> = <status> {status};
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 <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 <inform24> = <offer> {offer}*;
public <inform25> = <book_availability> {book_availability}*;
public <inform24> = <offer> {offer};
public <inform25> = <book_availability> {book_availability};
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 <inform29> = <new_card> {new_card}*;
public <inform29> = <new_card> {new_card};
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 <inform32> = Godziny otwarcia biblioteki <days> {days} <time> {time} oraz <days> {days} <time> {time}*;
public <inform33> = <ebook> {ebook}*;
public <inform34> = <book_limit> {book_limit}*;
public <inform35> = <penalty_cost> {penalty_cost}*;
public <inform36> = <lost_card> {lost_card}*;
public <inform37> = <card_block> {card_block}*;
public <inform38> = <stolen_card> {stolen_card}*;
public <inform33> = <ebook> {ebook};
public <inform34> = <book_limit> {book_limit};
public <inform35> = <penalty_cost> {penalty_cost};
public <inform36> = <lost_card> {lost_card};
public <inform37> = <card_block> {card_block};
public <inform38> = <stolen_card> {stolen_card};
public <inform39> = Posiadamy wszystkie dzieła <author> {author}*;
public <inform40> = <renew_book> {renew_book}*;
public <inform41> = <days> {days}*;
public <inform42> = <book> {book} <book> {book} <book> {book}*;
public <inform43> = <time> {time}*;
public <inform44> = <summary> {summary}*;
public <inform40> = <renew_book> {renew_book};
public <inform41> = <days> {days};
public <inform42> = <book> {book} <book> {book} <book> {book};
public <inform43> = <time> {time};
public <inform44> = <summary> {summary};
public <inform45> = Na podstawie wcześniej przeczytanych przez Ciebie lektur polecam książkę <book> {book}*;
public <inform46> = Polecam książkę <book> {book}*;
public <inform47> = Nasza placówka <location> {location}*;
public <inform48> = Godziny otwarcia <time> {time}*;
public <inform49> = Najczęściej wypożyczanym <category> {category} jest książka <book> {book}*;
public <inform50> = <name> {name} <date_of_birth> {date_of_birth}*;
public <inform51> = <create_an_account> {create_an_account}*;
public <inform52> = <new_account> {new_account}*;
public <inform51> = <create_an_account> {create_an_account};
public <inform52> = <new_account> {new_account};
<langs> = <lang> {lang};

View File

@ -3,13 +3,13 @@
grammar reqmore;
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 <reqmore4> = Czy w ostatnim czasie <new> {new}*;
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 <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;
<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')]
def get_dialog_act(self, sentence):
for grammar in self.grammars:
match = grammar.find_matching_rules(sentence)
if match:
return grammar.name
acts = []
for sentence in sentence.split(','):
for grammar in self.grammars:
match = grammar.find_matching_rules(sentence)
if match:
acts.append(grammar.name)
return acts
def match_slots(self, expansion, slots):
if expansion.tag != '':

View File

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