Tabulkový analyzátor

Z Wikipedie, otevřené encyklopedie

Tabulkový analyzátor (anglicky chart parser) je v matematické informatice druh syntaktických analyzátorů vhodných pro analýzu nejednoznačných bezkontextových jazyků (včetně gramatik přirozených jazyků). Používá přístupu dynamického programování – všechny probírané dílčí výsledky se ukládají do tabulky, která reprezentuje orientovaný multigraf, díky čemuž mohou být používány opakovaně. Tím se zabrání backtrackingu a kombinatorické explozi. Český název odráží skutečnost, že orientovaný multigraf bývá implementován tabulkou (maticí).

Za autora tabulkové analýzy je považován Martin Kay.[1]

Typy tabulkových analyzátorů[editovat | editovat zdroj]

Tabulkové analyzátory obvykle používají nějakou variantu Viterbiho algoritmu. Earleyův analyzátor je tabulkový analyzátor, který se používá především pro syntaktickou analýzu v matematické lingvistice, a který je pojmenovaný po svém objeviteli. Dalším algoritmem tabulkové analýzy je algoritmus Cocke-Younger-Kasami (CYK).

Tabulkové analyzátory lze používat i pro syntaktickou analýzu počítačových jazyků. Jmenovitě Earleyův analyzátor se používá v generátorech překladačů, díky své schopnosti analyzovat jazyk generovaný libovolnou bezkontextovou gramatikou, což usnadňuje úlohu vytvoření gramatiky pro daný jazyk. Jejich nižší efektivita však vedla k tomu, že se jim lidé při konstrukci překladačů obvykle vyhýbají.

Při obousměrné tabulkové analýze jsou hrany multigrafu označovány směrem (dopředu nebo zpět), a pravidla jsou vynucena podle směru, kterým musí vést hrany, aby je bylo možné zkombinovat do dalších hran.

Při inkrementální tabulkové analýze se orientovaný multigraf konstruuje inkrementálně, jak uživatel upravuje text; při každé změně textu se provede minimální možná odpovídající změna v tabulce.

Tabulkové analyzátory lze rozdělit na analyzátory shora dolů, zdola nahoru a analyzátory řízené hlavou pravidla[2], a na aktivní a pasivní.

Tabulka[editovat | editovat zdroj]

Analyzátor zpracovává větu obsahující n slov jako graf s n+1 uzly – první uzel je před prvním slovem, dalších n-1 uzlů je mezi jednotlivými slovy a poslední uzel je za posledním slovem věty. Každé slovo je reprezentováno orientovanou hranou z uzlu před tímto slovem do následujícího uzlu. Celá vstupní věta tak tvoří nerozvětvenou cestu z pozice před prvním slovem na pozici za posledním slovem.

Analýza věty spočívá v přidávání orientovaných hran mezi jednotlivé uzly grafu. Každý krok analýzy přidá novou hranu ohodnocenou nějakou položkou gramatiky. Pokud se v průběhu analýzy přidá hrana, která jde z nultého do posledního uzlu a je ohodnocena úplnou položkou vytvořenou z pravidla, na jehož levé straně je počáteční symbol gramatiky, znamená to přijetí věty.

Při analýze uvažujeme pouze hrany, které jdou zleva doprava. Mezi libovolnými dvěma uzly může vést větší počet hran, proto se při analýze vytváří multigraf. Multigraf lze reprezentovat maticí (n+1) x (n+1) (anglicky chart), kde n je délka vstupní věty. Mezery mezi slovy ve vstupní větě jsou číslovány od 0 do n. V každém prvku matice může být libovolný počet položek, z nichž každá reprezentuje jednu hranu multigrafu, což jsou pravidla s tečkou na pravé straně. (Viz LR analyzátor).

Formálně lze hranu multigrafu popsat jako množinu trojic <i, j, A → α . β>, kde:

  • A → α . β je položka gramatiky (pravidlo, v jehož pravé straně je vyznačena aktuální pozice tečkou); zatímco symboly, které odpovídají řetězci α, již byly načteny, symboly odpovídající β dosud ne. α a β je libovolná posloupnost terminálních a neterminálních symboly dané gramatiky. Řetězce α i β mohou být i prázdné.
  • i (0 ≤ i ≤ n) je pozice ve vstupním řetězci, na které začíná pokrytí vstupního řetězce uvedenou položkou.
  • j (j ≥ i) je pozice, po kterou byly načteny vstupní terminální symboly, které odpovídají řetězci α.

Příklad[editovat | editovat zdroj]

Hrana multigrafu použitého při analýze může vypadat například takto:

< 2, 5, VP → V NP . NP >

Což znamená:

  • Od vstupní pozice 2 může začínat slovesná fráze (VP).
  • Dosud byl vstup načten až po pozici 5, což na pravé straně pravidla VP → V NP NP odpovídá pozici mezi oběma jmennými frázemi.
  • Další NP začíná na pozici 5, pokud lze příslušné pravidlo pro VP vůbec použít

Operace při analýze[editovat | editovat zdroj]

Tabulkový analyzátor používá při analýze tři typy operací:

  1. Predikce (predikce)
  2. Načtení terminálního symbolu (přesun)
  3. Kombinace dvou dílčích konstituentů (redukce)

Predikce[editovat | editovat zdroj]

Pokud tabulka obsahuje < i, j, A → α . B β > a B → γ je pravidlo gramatiky,

pak do tabulky přidáme

< j, j, B → . γ >

(pokud už v tabulce není).

Od počáteční pozice j se očekává složka kategorie B (tj. řetězec terminálů vytvořený z neterminálního symbolu B). Pro expanzi symbolu B existuje pravidlo s pravou stranou γ. Přidáme tedy novou predikci γ začínající od pozice j.

Načtení terminálního symbolu[editovat | editovat zdroj]

Pokud tabulka obsahuje < i, j, A → α . w β > (kde w je terminální symbol příp. preterminální symbol) a pokud w je j-té slovo analyzované věty s = w0w1 ... wn,

pak do tabulky přidáme

< i, j+1, A → α w . β >

(pokud už v tabulce není).

Analýza je tedy v situaci, kdy se na pozici j očekává terminální symbol (příp. preterminální symbol vyjadřující slovní druh nebo jinou mluvnickou kategorii např. finitní sloveso). Je-li j-té slovo skutečně rovné w (nebo je jeho mluvnická kategorie w), pak jej lze začlenit do analýzy. To se znázorní posunutím tečky za načtené slovo.

Kombinace dvou dílčích konstituentů[editovat | editovat zdroj]

Poznámka: zde popsaná operace kombinace se týká analyzátorů zdola nahoru. Jiné metody tabulkové analýzy mohou pracovat poněkud odlišně.

Pokud tabulka obsahuje položku < i, j, A → α . B β > (B je neterminální symbol) a položku < j, k, B → γ . >

potom do tabulky přidáme

< i, k, A → α B . β >

(pokud v ní už není).

Během analýzy byla nalezena úplná položka pokrývající pozice j a k odpovídající neterminálnímu symbolu B. Pokud v multigrafu existuje hrana, která odráží očekávání, že hrana B může začínat na pozici j, mohou být obě zkombinovány do nové hrany, která pokrývá pozice ik. Značka (tečka) je proto přesunuta za symbol B.

Algoritmus analýzy[editovat | editovat zdroj]

Vstup: řetězec s = w0w1 ... wn.

  1. <0,0, S' → . S >, (kde S je počáteční symbol gramatiky, S' je přidaný neterminální symbol.
  2. Opakovat výše uvedené kroky predikce, přesunu a redukce tak dlouho, dokud lze přidávat další položky tabulky.

Výstup: ano, pokud tabulka obsahuje <0, n, S' → S . >, jinak ne.

Poznámka: Popsaný algoritmus pouze zjišťuje, zda lze danou větu odvodit v dané gramatice. Pro získání rozboru věty (jednoho nebo více derivačních stromů tzv. sbaleného lesa derivačních stromů) je třeba využít další informace z grafu.

V bodě 2 není uvedeno, v jakém pořadí se mají provádět jednotlivé kroky. Vlastní analýza může používat různé metody vyhledávání (prohledávání do hloubky, prohledávání do šířky, uspořádané prohledávání). V praktických algoritmech se pro určení pořadí kroků postupně vytváří seznam nazývaný anglicky agenda. Způsob jeho budování rozhoduje, jaký postup analýzy se používá.

Příklad[editovat | editovat zdroj]

Máme bezkontextovou gramatiku popisující zjednodušenou gramatiku němčiny s následujícími pravidly:

  1. SNP VP
  2. SS PP
  3. VPV NP
  4. NPNP PP
  5. NPArt N
  6. PPP NP

a lexikálními pravidly:

  1. NP → Donald
  2. NP → Daisy
  3. V → beobachtet
  4. N → Fernglas
  5. P → mit
  6. Art → dem

Má být analyzována německá věta "Donald beobachtet Daisy mit dem Fernglas" (Donald pozoroval Daisy dalekohledem).

Čís. Přidaná položka tabulky Zdroj
1 < 0, 0, S' → . S > Inicializace
2 < 0, 0, S → . NP VP > P 1, 1
3 < 0, 0, S → . S PP > P 1, 2
4 < 0, 0, NP → . NP PP > P 2, 4
5 < 0, 0, NP → . Art N > P 2, 5
6 < 0, 1, NP → Donald . > S 2, L1
7 < 0, 1, S → NP . VP > C 2, 6
8 < 0, 1, NP → NP . PP > C 4,6
9 < 1, 1, VP → . V NP > P 7, 3
10 < 1, 1, PP → . P NP > P 8, 6
11 < 1, 2, V → beobachtet . > S 9, L3
12 < 1, 2, VP → V . NP > C, 9, 11
13 < 2, 2, NP → . NP PP > P 12, 4
14 < 2, 2, NP → . Art N > P 12, 5
15 < 2, 3, NP → Daisy . > S 12, L2
16 < 1, 3, VP → V NP . > C 12, 15
17 < 2, 3, NP → NP . PP > C 13, 15
18 < 0, 3, S → NP VP . > C 7, 16
19 < 3, 3, PP → . P NP > P 17, 6
20 < 3, 4, PP → mit . NP > S 19, L5
21 < 4, 4, NP → . NP PP > P 20, 4
22 < 4, 4, NP → . Art N > P 20, 5
23 < 4, 5, Art → dem . > S 22, L6
24 < 0, 3, S → S . PP > C 3, 18
25 < 4, 5, NP → Art . N > C 22, 23
26 < 5, 6, N → Fernglas . > S 25, L4
27 < 4, 6, NP → Art N . > C, 25, 26
28 < 3, 6, PP → mit NP . > C 20, 27
29 < 2, 6, NP → NP PP . > C 17, 28
30 < 1, 6, VP → V NP . > C, 12, 29
31 < 0, 6, S → NP VP . > C 7, 30
32 < 0, 6, S → S PP . > C 24, 28
33 < 0, 6, S' → S . > C 1,31
34 < 0, 6, S' → S . > C 1,32

Vysvětlivky:

  • Pn,m=Predikce (predict) vstupu n přepisovacím pravidlem m,
  • Sn,Lm=Přesun (načtení) predikce vstupu n lexikálním pravidlem m,
  • Cn,m=Redukce (kombinace) položek n a m

Skutečnost, že koncovou položku lze vytvořit různými způsoby (33 a 34), ukazuje, že větu lze analyzovat dvěma způsoby (tj. věta je víceznačná). Další analýza odpovídá českému překladu „Donald pozoroval Daisy s dalekohledem“ (tj. dalekohled měla v tomto případě Daisy).

Rozšíření[editovat | editovat zdroj]

Vypouštějící pravidla[editovat | editovat zdroj]

Vypouštějící pravidla jsou pravidla tvaru A → ε. Tato pravidla jsou obvykle integrována zvláštní strategií zpracování do grafu analyzátoru.

Náhled[editovat | editovat zdroj]

Generování nepotřebných položek grafu lze zabránit tím, že se pro rozhodování kromě trojic v tabulce použije také k dopředu načtených a dosud neanalyzovaných symbolů ze vstupu (tzv. 'náhledanglicky lookahead). Tato technika je dobře známá u LR (k) analyzátorů.

Separovaná gramatika[editovat | editovat zdroj]

Pro analýzu přirozených jazyků se zpravidla používají tzv. separované gramatiky, v nichž je gramatika rozdělena na slovník a syntaktická pravidla. Pravá strana bezkontextových pravidel gramatiky tedy obsahuje buď pouze terminální symboly (slova analyzovaného jazyka) nebo neterminální symboly. To umožňuje zefektivnit proces predikce a načítání, protože postupují pouze na úroveň preterminálních symbolů (slovních druhů nebo jemnějších kategorií).

Robustnost[editovat | editovat zdroj]

Protože ne vždy je vstupem analyzátoru věta vytvořená podle pravidel gramatiky, je užitečné, aby analyzátor byl robustní, tj. necitlivý vůči gramatickým chybám. To se týká například neznámých slov, kterým jsou v kroku skenování přiřazeny všechny pravděpodobné slovní druhy, nebo chybějících či nadbytečných slov, která jsou rozpoznávána pomocí speciálních chybových pravidel.

Složitost[editovat | editovat zdroj]

O(n3) pro všechny bezkontextové gramatiky, O(n2) pro jednoznačné bezkontextové gramatiky.

Aplikace[editovat | editovat zdroj]

Tabulkové analyzátory se většinou používají ve spojení s syntaktické analýzy přirozeného jazyka, protože až na Tomitův analyzátor mají nejlepší časovou složitost pro jakékoli (tedy i víceznačné) bezkontextové gramatiky. Například kontrola gramatiky v aplikaci Microsoft Word používá tabulkový analyzátor. Syntaxe programovacích jazyků je zpravidla navržena tak, aby jejich analýza byla co nejefektivnější, a proto je lze obvykle účinněji analyzovat LR(k) nebo LL(k) analyzátory.

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

V tomto článku byly použity překlady textů z článků Chart parser na anglické Wikipedii a Chart-Parser na německé Wikipedii.

  1. Chart Parsing [online]. [cit. 2011-11-20]. Dostupné v archivu pořízeném dne 2015-02-21. 
  2. SMRŽ, Pavel; HORÁK, Aleš. Probabilistic Head-Driven Chart Parsing of Czech Sentences. In: SOJKA, Petr; KOPEČEK, Ivan; PALA, Karel. Text, Speech and Dialogue. Lecture Notes in Computer Science. Berlin, Heidelberg: Springer, 2000. Dostupné online. ISBN 978-3-540-41042-3, ISBN 978-3-540-45323-9. DOI 10.1007/3-540-45323-7_14. Svazek 1902. S. 83. (anglicky)

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]

  • EARLEY, Jay. An Efficient Context-Free Parsing Algorithm. Communications of the ACM. 1970, čís. 13. Dostupné v archivu pořízeném dne 2017-08-11. ISSN 0001-0782.  Archivováno 11. 8. 2017 na Wayback Machine..
  • GAZDAR, Gerald; MELLISH, Chris. Natural Language Processing in Prolog. An Introduction to computational Linguistics [online]. Wokingham u. a.: 1989. ISBN 0-201-18053-7. .
  • KADLEC, Vladimír; HORÁK, Aleš. Algoritmy syntaktické analýzy (pomocí CFG) [online]. [cit. 2015-07-09]. Dostupné online. 
  • ARNOLD, Doug. Chart Parsing [online]. [cit. 2015-07-09]. Dostupné v archivu pořízeném dne 2015-02-21.