refactor evaluate
This commit is contained in:
parent
c852703065
commit
3d8a677c27
@ -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};
|
||||||
|
@ -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;
|
||||||
|
11
Modules.py
11
Modules.py
@ -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 != '':
|
||||||
|
26
evaluate.py
26
evaluate.py
@ -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%
|
Loading…
Reference in New Issue
Block a user