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 archiwalną 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. Udostępniane są dwa warianty korpusu: pełne lasy składniowe wygenerowane przez parser z oznaczonym drzewem poprawnym (forests) oraz same drzewa poprawne (chosen trees). Ta druga postać pozwala na szybsze wykonywanie zapytań.
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=acc]
 - 
            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).
catlubcategory— 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
        (
ppron12ippron3), 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=acc]
 - frazy nominalne lub przymiotnikowe w bierniku:
        
[(cat=fno | cat=fpt) & przypadek=acc]
 
Analogiczne wyrażenia mogą też pojawiać się po znaku równości, np.:
[cat = (fno | fpt) & przypadek=acc]
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, przy czym tę realizację A uzyskano z użyciem reguły gramatyki o symbolu 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 bezpośrednio poprzedza B (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 | 
| 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) | 
            w lesie składniowym istnieje drzewo zawierające jednocześnie 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(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=zdanie] > [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 „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=acc]]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=acc]jest równoważne
[[cat=fno & przypadek=acc & 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 xp:
    
[tfw=/prepnp.*/ & from=#f & to=#t] & [[tfw=/xp.*/ & 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.