Wyszukiwarka drzew składniowych ze Składnicy frazowej
Niniejsza strona pozwala na zadawanie zapytań dotyczących Składnicy frazowej — banku składnikowych drzew składniowych języka polskiego. Udostępniamy wersję 0.5 Składnicy (8227 drzew), będącą wynikiem projektu N N104 224735, oraz wersję bieżącą, rozbudowaną w projektach NEKST, CLARIN-PL, CLARIN-PL-2.
Poniżej prezentujemy język zapytań wyszukiwarki wzorowany na języku wyszukiwarki TIGERSearch. Po zadaniu pytania wyszukiwarka prezentuje stronicowaną listę wszystkich pasujących zdań. Po wybraniu zdania z tej listy wyświetlane jest pasujące drzewo z możliwością przechodzenia między dopasowaniami, jeżeli jest ich więcej niż jedno w obrębie danego zdania. Kolejność zwracanych wyników nie jest zdefiniowana.
Przykłady zapytań
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):
- znajdź (zdania zawierające) formy leksemu ‹rozmawiać›:
[base=rozmawiać]
-
znajdź frazy nominalne (
fno
) w bierniku:[cat=fno & przypadek=bier]
-
znajdź frazy nominalne zawierające jako bezpośredni składnik
frazę przymiotnikową:
[cat=fno] > [cat=fpt]
-
znajdź frazy nominalne zawierające gdzieś w swojej strukturze
zdanie
(względne):
[cat=fno] >* [cat=zdanie]
-
znajdź frazy nominalne zawierające jako bezpośredni składnik
frazę przymiotnikową, a gdzieś w swojej strukturze zdanie:
#z: [cat=fno] > [cat=fpt] & #z >* [cat=zdanie]
-
znajdź frazy nominalne zawierające jako bezpośredni składnik
frazę przymiotnikową i nie zawierające nigdzie w swojej
strukturze zdania:
#z: [cat=fno] > [cat=fpt] & !( #z >* [cat=zdanie] )
Węzły drzewa — podstawowy element zapytań
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.
Atrybuty węzłów
Każdy wierzchołek drzewa jest charakteryzowany pewnym zbiorem
atrybutów. Pożądane 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 zdanie
atrybutu category
:
[ category = "zdanie" ]Jeżeli szukana wartość jest ciągiem liter i cyfr (nie zawierającym w szczególności odstępu), to znaki cudzysłowu można pominąć:
[ category = zdanie ]Jest też dostępny operator wyrażający różność od podanej wartości:
[ category != zdanie ]
Atrybuty wierzchołków terminalnych to:
orth
— wykładnik tekstowy (token, słowo),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
lubcategory
— kategoria składniowa czyli nazwa jednostki nieterminalnej,przypadek
,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,sel
— czy dany wierzchołek należy do drzewa wybranego przez anotatorów (zob. punkt o niejednoznacznościach).
true
i false
.
Wyrażenia regularne
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:
- słowa kończące się na ąc:
[ orth = /.*ąc/ ]
- formy zaliczone do jednej z klas zaimków osobowych
(
ppron12
ippron3
), a więc takie, których klasa gramatyczna zaczyna się ciągiemppron
:[ pos = /ppron.*/ ]
- formy rzeczowników w bierniku (znacznik zaczyna
się
subst:
i zawiera fragment:acc:
):[ tag = /subst:.*:acc:.*/ ]
Warunki na wiele atrybutów lub wiele wartości
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:
- frazy nominalne w bierniku:
[cat=fno & przypadek=bier]
- frazy nominalne lub przymiotnikowe w bierniku:
[(cat=fno | cat=fpt) & przypadek=bier]
Analogiczne wyrażenia mogą też pojawiać się po znaku równości, np.:
[cat = (fno | fpt) & przypadek=bier]
Relacje między węzłami
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=fno] & [cat=fpt]
Ważnym elementem języka zapytań są operatory określające relacje na wierzchołkach związane ze strukturą drzewa. Są to:
Relacja | Zapis | |
---|---|---|
bezpośredni nadrzędnik | A > B |
A jest rodzicem B w pewnym drzewie |
nadrzędnik | A >* B |
B należy do pewnego poddrzewa A (B != A) |
nadrzędnik z etykietą | A >R B |
w pewnym drzewie A jest rodzicem B, który wyprowadzono z użyciem reguły R |
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 |
bezpośrednie poprzedzanie | A . B |
A poprzedza B (inaczej fraza B zaczyna się tam gdzie kończy się A) |
poprzedzanie | A .* B |
B występuje po A |
poprzedzanie | A .N B |
B zaczyna się N wyrazów od końca A |
poprzedzanie | A .M,N B |
B zaczyna się między M a N wyrazów od końca A |
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 |
rodzeństwo | A $ B |
A i B mają w pewnym drzewie 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 |
korzeń | root(A) |
A jest korzeniem lasu |
pokrewieństwo | same_tree(A, B) |
istnieje drzewo zawierające A i B |
Te z powyższych operatorów, które zapisane są infiksowo, można
łączyć w łańcuchy. Na przykład następujące wyrażenie wyszukuje
zdania, które zawierają frazę wymaganą fw
, która jest
realizowana
przez frazę przymiotnikową:
[cat=zdanie] > [cat=fw] > [cat=fpt]
Zmienne
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/ & base=#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ęściwarunku
wymagamy, aby atrybut base
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] . [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
zdanie
, które by miały jako swoje dzieci jednocześnie:
frazę
wymaganą oznaczoną jako podmiot subj
, frazę wymaganą
nominalną
w bierniku np(bier)
oraz frazę wymaganą przysłówkową
advp
. 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=zdanie] > [tfw=subj] & #z > [tfw="np(bier)"] & #z > [tfw=advp]
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 „nie istnieje”
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=zdanie] > [tfw=/infp(.*)/ ] & ! #z > [tfw=subj]
Poprawne zapytanie nie może się składać wyłącznie z wierzchołków wyspecyfikowanych w zasięgu operatora „nie istnieje”.
Praca ze strukturami niejednoznacznymi
Składnica frazowa powstała w wyniku automatycznej analizy składniowej zdań i ujednoznacznienia ich przez językoznawców. W procesie tym analizator generuje wiele możliwych interpretacji składniowych, a eksperci oznaczają jedno drzewo jako najlepiej pasujący opis danego zdania.
Dotychczas przedstawiliśmy zapytania o interpretacje wybrane
przez ekspertów. Jednak dla wyszukiwarki dostępne są wszystkie
interpretacje wygnerowane przez analizator. Można się do nich
odwołać specyfikując wierzchołek w podwójnych nawiasach
kwadratowych [[]]
. Tak więc następujące zapytanie wyszukuje
wszystkie drzewa, dla których analizator automatyczny dopuścił
istnienie frazy nominalnej w bierniku:
[[cat=fno & przypadek=bier]]Zapis w pojedynczych nawiasach jest w istocie skrótem notacyjnym równoważnym dodaniu warunku, że wierzchołek ma ustawiony atrybut
sel
, sygnalizujący, że należy on do drzewa wybranego przez
językoznawców. Tak więc zapytanie
[cat=fno & przypadek=bier]jest równoważne
[[cat=fno & przypadek=bier & sel]]
W następującym zapytaniu szukamy fraz wymaganych, które zostały
przez językoznawców uznane za przyimkowe (prepnp
), a dla
których analizator automatyczny proponował też interpretację
jako przysłówkowe (advp
):
[tfw=/prepnp.*/ & from=#f & to=#t] & [[tfw="advp" & from=#f & to=#t]]Użycie zmiennych i atrybutów
from
i to
zapewnia, że dwie
znalezione jednostki są rozpięte (w różnych drzewach) nad tym
samym fragmentem tekstu.