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
).
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=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.