OPIS QUASI-NATURALNEGO JĘZYKA KOMEND GŁOSOWYCH W FORMACIE VCD ============================================================= Opis języka komend głosowych zapisywany jest w pliku tekstowym (rozszerzenie .VCD). Plik ten powinien być kodowany w formacie ANSI. Pojedyncza komenda zapisywana jest pod postacią jednego lub większej liczby sformułowań (wariantów). Każda komenda musi mieć unikalną nazwę, za pomocą której będzie ona reprezentowana w programie w języku Arlang. Jeżeli podajemy sformułowania komend w języku polskim, to na początku omawianego pliku musi się znaleźć dyrektywa: $ Language: Polish Podstawowa struktura opisu języka komend jest następująca. Pojedyncza komenda jest zapisywana w kilku kolejnych liniach w ten sposób, że pierwsza z tych linii zawiera słowo kluczowe #COM po którym podana jest nazwa komendy, zaś każda kolejna linia zawiera pojedynczy wariant komendy tj. ciąg wyrazów składających się na tę komendę. Ilustruje to poniższy przykład: $ LANGUAGE: Polish #com open otwórz chwytak proszę otworzyć chwytak #com close zamknij chwytak proszę zamknąć chwytak Przedstawiona struktura nie zapewnia jednak w wystarczającym stopniu uwzględnienia różnorodności sformułowań komend głosowych, charakterystycznej dla języka naturalnego. Dlatego format VCD umożliwia definiowanie komend głosowych jako ciągów nie tylko pojedynczych wyrazów, ale również fraz składowych, które także mogą być opisywane w postaci wariantów. Frazy składowe mogą się z kolei składać z ciągów wyrazów oraz fraz niższego rzędu (stopień zagłębienia takiej struktury jest teoretycznie nieograniczony). W opisie komendy głosowej fraza jest zapisana w postaci: * np: *przesuń Opis frazy ma taką samą strukturę jak opis komendy głosowej, z tym, że zamiast słowa kluczowego #COM zaczyna się od słowa kluczowego #DEF np.: #def przesuń przesuń proszę przesunąć Elementami ułatwiającymi uwzględnienie różnorodności sformułowań komend głosowych są też wyrazy i frazy opcjonalne. Są one zaznaczone w opisie komendy (lub frazy) poprzez poprzedzenie ich znakiem zapytania np.: *przesuń ?ten przedmiot Powyższy opis oznacza, że zarówno sformułowanie "przesuń przedmiot" jak i "przesuń ten przedmiot" będzie akceptowane przez system rozpoznawania mowy. OPIS SEMANTYKI KOMEND GŁOSOWYCH ------------------------------- Znaczenie wypowiedzianej przez użytkownika komendy głosowej jest zdeterminowane poprzez nazwę komendy, ewentualnie dodatkowo poprzez szereg informacji liczbowych (będziemy je nazywać wartościami semantycznymi), przedstawionych za pomocą tzw. parametrów komendy. Przykładowo, informacje zawarte w komendzie "przesuń wałek numer jeden o dziesięć milimetrów" można opisać za pomocą dwóch wartości semantycznych: - parametr (wartość semantyczna) nr 1: numer wałka (w tym przypadku 1), - parametr (wartość semantyczna) nr 2: odległość (w tym przypadku 10). Wartości semantyczne determinujące znaczenie komendy są zazwyczaj obliczane na podstawie parametrów opisujących pojedyczne wyrazy składowe komendy, bądź parametrów opisujących jej frazy składowe. Z kolei parametry fraz składowych mogą być obliczane na podstawie parametrów fraz niższego rzędu. Przykładowo, semantyka komendy "Dodaj do siebie pierwiastki równania kwadratowego o współczynnikach jeden, trzy i dwa" jest zdeterminowana za pomocą dwóch wartości semantycznych (dwóch wartości pierwiastów równania kwadratowego). Wartości te mogą być obliczone na podstawie podanych wartości współczynników równania, czyli parametrów fraz składowych komendy, określających te współczynniki. Jeżeli struktura komendy zostałaby zapisana w formacie VCD w sposób następujący: #com dodaj dodaj ?*do_siebie pierwiastki równania kwadratowego o współczynnikach *a *b ?i *c #def do_siebie do siebie #def a *liczba #def b *liczba #def c *liczba #def liczba jeden dwa trzy ... to każda z fraz o nazwie a, b i c jest opisana jednym parametrem, będącym współczynnikiem równania kwadratowego. Przypisywanie parametru liczbowego do danego wariantu komendy (bądź do danego wariantu frazy składowej) jest realizowane za pomocą zapisania wartości liczbowej (bądź wyrażenia arytmetycznego) po dwukropku na końcu linii opisującej dany wariant komendy (frazy) np.: #def liczba jeden : 1 dwa : 2 trzy : 3 ... Jeżeli dany wariant komendy (frazy) ma kilka parametrów, to należy je zapisać kolejno, oddzielając od siebie średnikami np.: #def wynik_meczu jeden do jednego: 1;1 dwa do jednego : 2;1 .... Istnieje możliwość przeniesienia zapisu kolejnego parametru do nowej linii pod warunkiem, że linia ta zaczyna się od średnika np.: trzy do jednego : 3 ;1 W przypadku, gdy parametry danej komendy (frazy) są obliczane na podstawie parametrów jej fraz składowych, zamiast konkretnej liczby podaje się wyrażenie arytmetyczne (zapisane zgodnie z zasadami języka Arlang) odwołujące się do parametrów frazy składowej. Parametry fraz składowych zapisuje się jako p1, p2, p3 (wielkości liter nie odgrywają roli, zatem można je też zapisać jako P1, P2, P3) odpowiednio w przypadku frazy stojącej na pozycji pierwszej, drugiej, trzeciej itd. Jeśli jednak chcemy się odwołać do drugiego, trzeciego itd parametru danej frazy, to musimy zapisać odpowiedni indeks w nawiasach kwadratowych np.: p3[2] - oznacza drugi parametr frazy stojącej na miejscu trzecim Uwaga1: Przy określaniu pozycji frazy uwzględniamy wszystkie frazy oraz pojedyncze słowa, jednak pomijając frazy i słowa opcjonalne (poprzedzone znakiem zapytania). Przykładowo, w przypadku komendy o syntaktyce opisanej w sposób następujący: *przesuń ?głowicę o ośmiokrotność liczby *liczba wartość parametru komendy (wartość przesunięcia) zostanie opisana jako 8*p5, a zatem pełny (syntaktyczny i semantyczny) opis komendy będzie: *przesuń ?głowicę o ośmiokrotność liczby *liczba: 8*p5 gdyż fraza "liczba" znajduje się na piątym miejscu (nie uwzględniamy opcjonalnego słowa "głowicę"). Uwaga2: Jeżeli danemu słowu nie przypiszemy żadnej wartości parametrów, to automatycznie jest mu przypisywany parametr równy 0 Uwaga3: Jeżeli danej frazie nie przypiszemy żadnego parametru, to automatycznie jest jej przypisany parametr o wartości równej sumie parametrów wszystkich słów i fraz składowych tej frazy. Może się to okazać wygodne przy definiowaniu języka komend głosowych np. wtedy, gdy fraza ma po prostu przejmować wartość jednego ze słów lub fraz składowych (można wtedy pominąć zapis wartości parametru tej frazy).