2024-05-05 16:54:03 +02:00
|
|
|
import os
|
|
|
|
import pandas as pd
|
|
|
|
import jsgf
|
2024-05-11 19:41:13 +02:00
|
|
|
from unidecode import unidecode
|
|
|
|
import string
|
|
|
|
|
|
|
|
|
|
|
|
def decode_prompt(prompt):
|
|
|
|
prompt_decoded = unidecode(prompt)
|
|
|
|
translator = str.maketrans('', '', string.punctuation)
|
|
|
|
prompt_decoded = prompt_decoded.translate(translator)
|
|
|
|
return prompt_decoded
|
2024-05-05 16:54:03 +02:00
|
|
|
|
|
|
|
grammar = jsgf.parse_grammar_file('book.jsgf')
|
|
|
|
data_files = []
|
|
|
|
|
|
|
|
for filename in os.listdir("data"):
|
|
|
|
f = os.path.join("data", filename)
|
|
|
|
if os.path.isfile(f):
|
|
|
|
data_files.append(pd.read_csv(f, sep='\t', header=None))
|
|
|
|
|
|
|
|
recognized = 0
|
|
|
|
unrecognized = 0
|
|
|
|
|
|
|
|
for df in data_files:
|
2024-05-09 23:34:11 +02:00
|
|
|
if len(df.columns) == 3:
|
2024-05-05 16:54:03 +02:00
|
|
|
df.columns = ["agent", "message", "act"]
|
2024-05-09 23:34:11 +02:00
|
|
|
elif len(df.columns) == 2:
|
2024-05-05 16:54:03 +02:00
|
|
|
df.columns = ["agent", "message"]
|
|
|
|
else:
|
|
|
|
continue
|
|
|
|
user_speech_rows = df[df['agent'] == "user"]
|
|
|
|
user_speeches = user_speech_rows["message"]
|
|
|
|
entries_count = len(user_speeches)
|
2024-05-11 19:41:13 +02:00
|
|
|
|
|
|
|
|
2024-05-09 23:34:11 +02:00
|
|
|
parsed = user_speeches.apply(
|
2024-05-11 19:41:13 +02:00
|
|
|
lambda x: bool(grammar.find_matching_rules(decode_prompt(x))))
|
2024-05-05 16:54:03 +02:00
|
|
|
true_count = parsed.sum()
|
|
|
|
false_count = len(parsed) - true_count
|
|
|
|
recognized += true_count
|
|
|
|
unrecognized += false_count
|
|
|
|
|
|
|
|
print(f"Recognized user utterances: {recognized}")
|
|
|
|
print(f"Unrecognized user utterances: {unrecognized}")
|
2024-05-09 23:34:11 +02:00
|
|
|
print(f"Accuracy: {recognized/(recognized+unrecognized)}")
|