Poniżej prezentujemy język zapytań wyszukiwarki drzew, który stanowi rozszerzony podzbiór języka wyszukiwarki TIGERSearch. Po zadaniu pytania wyszukiwarka prezentuje listę wszystkich pasujących zdań.
Oto kilka przykładów zapytań pozwalających zorientować się w możliwościach wyszukiwarki (wynik zapytania można zobaczyć po kliknięciu w zapytanie):
[lemma=rozmawiać]
[lemma=rozmawiać] ->adjunct []
NP
) w bierniku:
[cat=NP & case=acc]
[cat=NP] > [cat=AdjP]
[cat=NP] >* [cat=S]
[cat=NP] >@l [cat=Conj]
#z: [cat=NP] > [cat=AdjP] & #z >* [cat=S]
#z: [cat=NP] > [cat=AdjP] & !( #z >* [cat=S] )
adjunct
:
[] >adjunct [cat=NP]
Każde zapytanie musi się odnosić do co najmniej jednego węzła w drzewie składnikowym, a więc do co najmniej jednej jednostki nieterminalnej lub terminalnej gramatyki. Najprostsze zapytanie składa się z pary nawiasów kwadratowych:
[]Dopasowuje się ono do dowolnego węzła w drzewie, więc jego zbiorem wyników jest cały bank drzew (zadanie tego zapytania pozwala sprawdzić liczbę zdań w zbiorze). Zbiór wyników można ograniczać poprzez zadawanie atrybutów węzłów oraz relacji między węzłami, co wyjaśniono w następnych punktach.
Każdy wierzchołek drzewa jest charakteryzowany pewnym zbiorem
atrybutów. Poszukiwane wartości atrybutów można zadawać w postaci
równości wewnątrz nawiasów specyfikujących wierzchołek. Poniższe
zapytanie znajduje wierzchołki o wartości S
atrybutu category
:
[ category = "S" ]Jeżeli szukana wartość jest ciągiem liter i cyfr (niezawierającym w szczególności odstępu), to znaki cudzysłowu można pominąć:
[ category = S ]Jest też dostępny operator wyrażający różność od podanej wartości:
[ category != S ]
Atrybuty wierzchołków terminalnych to:
orth
— wykładnik tekstowy (token, słowo),lemma
lub
base
— lemat leksemu reprezentowanego przez dany token,
tag
— znacznik morfosyntaktyczny formy reprezentowanej
przez dany token,
pos
— część znacznika morfosyntaktycznego przed
pierwszym
dwukropkiem, czyli klasa gramatyczna (np. subst
, adj
,
fin
,
praet
).
cat
lub category
— kategoria składniowa
czyli nazwa
jednostki nieterminalnej,
case
, rodzaj
, liczba
,
osoba
, aspekt
, czas
,
tryb
, rekcja
, stopień
, wyróżnik
(fleksyjny),
(pre)dest
(ynacja), ink
(orporacja), neg
(acja)
itd. —
atrybuty składniowe nieterminala. Ich obecność jest zależna od
kategorii składniowej, zbiór dostępnych wartości najłatwiej
chyba wypatrzeć w drzewach.
nid
— identyfikator wierzchołka,from
— identyfikator pozycji w tekście, od której
zaczyna
się wystąpienie danej jednostki,
to
— identyfikator pozycji w tekście, na której
kończy
się wystąpienie danej jednostki,
depth
— odległość danego wierzchołka od korzenia drzewa
(korzeń jest na głębokości 0),
terminal
— czy wierzchołek jest terminalem,center
— czy wierzchołek jest centrum
składniowym swojego rodzica,[terminal]
i [!center]
.
Wartość po prawej stronie znaku równości w specyfikacji atrybutu może także być ujętym w ukośniki wyrażeniem regularnym do którego poszukiwana wartość musi się dopasować. Wyrażenie musi się dopasować do całej poszukiwanej wartości. Na przykład:
[ orth = /.*ąc/ ]
ppron12
i ppron3
), a więc
takie, których klasa gramatyczna zaczyna
się ciągiem ppron
:
[ pos = /ppron.*/ ]
subst:
i zawiera fragment :acc:
):
[ tag = /subst:.*:acc:.*/ ]
W obrębie specyfikacji wierzchołka można umieścić wiele
warunków określających wartości atrybutów połączonych operatorami
koniunkcji &
, alternatywy |
i negacji
!
. Odpowiednie
połączenie warunków można wymusić za pomocą nawiasów. Na
przykład:
[cat=NP & case=acc]
[(cat=NP | cat=AdjP) & case=acc]
Analogiczne wyrażenia mogą też pojawiać się po znaku równości, np.:
[cat = (NP | AdjP) & case=acc]
Również specyfikacje wierzchołków możemy łączyć operatorami i nawiasami w bardziej skomplikowane wyrażenia. Poniższe zapytanie znajduje drzewa zawierające zarówno frazę nominalną jak i przymiotnikową, ale nie wymaga żadnej szczególnej konfiguracji tych fraz względem siebie:
[cat=NP] & [cat=AdjP]
Ważnym elementem języka zapytań są operatory określające relacje na wierzchołkach związane ze strukturą drzewa. Są to:
Relacja | Zapis | |
---|---|---|
relacje terminalne | ||
bezpośrednie poprzedzanie | A . B |
A bezpośrednio poprzedza B w porządku tekstowym (inaczej: fraza B zaczyna się tam, gdzie kończy się A) |
poprzedzanie | A .* B |
A poprzedza B |
poprzedzanie | A .N B |
B zaczyna się N terminali od końca A |
poprzedzanie | A .M,N B |
B zaczyna się między M a N terminali od końca A |
relacje zależnościowe | (A i B są terminalami) | |
bezpośredni nadrzędnik | A -> B |
A jest nadrzędnikiem B w drzewie zależnościowym |
nadrzędnik z etykietą | A ->R B |
w drzewie zależnościowym A jest nadrzędnikiem B i węzły są połączone relacją zależnościową R |
relacje składnikowe | ||
bezpośredni nadrzędnik | A > B |
A jest rodzicem B w drzewie składnikowym |
nadrzędnik z etykietą | A >R B |
w pewnym drzewie A jest rodzicem B i węzły są połączone relacją zależnościową R |
nadrzędnik | A >* B |
B należy do pewnego poddrzewa A (B != A) |
nadrzędnik | A >N B |
B należy do pewnego poddrzewa A, ścieżka A–B ma długość N |
nadrzędnik | A >M,N B |
B należy do pewnego poddrzewa A, ścieżka A–B ma długość między M i N |
rodzeństwo | A $ B |
A i B mają w drzewie składnikowym wspólnego rodzica |
rodzeństwo i poprzedzanie | A $. B |
A i B stanowią dwa kolejne składniki pewnego wspólnego rodzica |
rodzeństwo i poprzedzanie | A $.* B |
A i B mają w pewnym drzewie wspólnego rodzica i A występuje przed B na jego liście składników |
lewy potomek | A >@l B |
B należy do pewnego poddrzewa A i żadna jednostka w tym poddrzewie nie poprzedza B (B leży na skrajnej lewej gałęzi pewnego poddrzewa A) |
prawy potomek | A >@r B |
B należy do pewnego poddrzewa A i B nie poprzedza żadnej jednostki w tym poddrzewie (B leży na skrajnej prawej gałęzi pewnego poddrzewa A) |
centralny potomek | A >@c B |
B należy do pewnego poddrzewa A i istnieje ścieżka z A do B prowadząca gałęziami głównymi |
korzeń | root(A) |
A jest korzeniem lasu |
Operatory infiksowe można łączyć w łańcuchy. Na przykład
następujące wyrażenie wyszukuje zdania, które zawierają frazę
werbalną VP
, która zawiera formę
czasownikową V
(co praktycznie oznacza, jest to fraza
bez koordynacji):
[cat=S] > [cat=VP] > [cat=V]
Zmienne pozwalają nadać nazwę pewnemu elementowi zapytania, aby
wskazać, że musi on być identyczny z innym elementem. Można ich
użyć na dwa sposoby: w odniesieniu do wartości atrybutów oraz do
specyfikacji wierzchołków. Nazwy zmiennych poprzedzamy znakiem
#
.
Pierwszy sposób użycia ilustruje następujący przykład:
[orth=#w: /.*zny/ & lemma=#w]Wymagamy, aby atrybut
orth
miał wartość pasującą do wzorca
/.*zny/
(a więc, aby słowo kończyło
się -zny). Tej wartości nadajemy nazwę #w
,
a w dalszej części warunku wymagamy, aby
atrybut lemma
miał tę samą wartość, czyli by w
tekście występowała forma podstawowa leksemu. Użycia
zmiennych nie muszą występować w obrębie specyfikacji tego
samego wierzchołka. W następnym zapytaniu poszukujemy dwóch
wystąpień tego samego słowa obok siebie (relacja .
):
[orth=#s & pos!=interp] . [orth=#s]
Drugi sposób użycia zmiennych pozwala wyspecyfikować udział
konkretnego wierzchołka w większej liczbie relacji. Na przykład
w poniższym zapytaniu poszukujemy wierzchołków kategorii
S
, które by miały jako swoje dzieci jednocześnie:
frazę
wymaganą oznaczoną jako podmiot subj(typ)
, frazę wymaganą
nominalną podlegającą dopełniaczowi negacji np(accgen)
oraz frazę wymaganą „przysłówkowatą”
xp(typ)
. W tym celu oznaczamy wierzchołek reprezentujący
zdanie zmienną
#z
, aby następnie użyć jej jeszcze dwukrotnie w specyfikacjach
kolejnych relacji:
#z: [cat=S] > [tfw=/subj.*/] & #z > [tfw="np(accgen)"] & #z > [tfw=/xp.*/]
W kontekście zapytań z udziałem wielu węzłów warto pamiętać, że każda para nawiasów kwadratowych implicite zadaje inny węzeł. Tak więc poniższe zapytanie znajduje węzły, które mają co najmniej dwoje dzieci:
#w: [] > [] & #w > []
Operator negacji użyty w obrębie specyfikacji wierzchołka
wybiera drzewa posiadające wierzchołek niepasujący do
zanegowanego kryterium. Czasami chciałoby się jednak znaleźć
drzewa, w których pewien typ wierzchołka nie wystepuje. Takie
działanie ma operator negacji !
użyty na zewnątrz
specyfikacji
wierzchołka (czyli na zewnątrz nawiasów kwadratowych). Na
przykład następujące zapytanie znajduje zdania, które zawierają
frazę wymaganą bezokolicznikową infp
, ale nie zawierają
jawnie
wyrażonego podmiotu subj(…)
:
#z: [cat=S] > [tfw=/infp(.*)/ ] & ! #z > [tfw=/subj.*/]