Už jsem zde stručně představil unifikační gramatiky. Také jsem uvedl, že algoritmus pro parsing podle takové gramatiky je NP-úplný (tj. v nejhorším případě zřejmě exponenciální). Typická unifikační gramatika má generativní sílu větší než bezkontextové gramatiky a dokonce větší než mírně kontextové (angl. mildly context-sensitive), tzn. že délka slova při aplikaci pravidel roste více než lineárně (např. exponenciálně).
Vzhledem k velké výpočetní i prostorové složitosti algoritmu se používá pro parsing dynamické programování. Speciální datová struktura chart reprezentuje dílčí zpracované podřetězce, čímž výrazně zvyšuje rychlost parsingu (omezením backtrackingu, algoritmus ovšem i nadále zůstane exponenciální).
Chart parsing je typu bottom-up, takže nemá problém s levou rekurzí a v případě zkracujících pravidel vždy skončí (takové gramatiky ovšem nejsou v praxi běžné). Časová náročnost algoritmu není u reálných gramatik až tak strašná, vzhledem k používání dalších omezujících podmínek (subkategorizace) je parsing většinou polynomiální. Spolehnout se na to ale nelze.
Koho problematika zajímá, snadno na internetu najde články k tématu např. od Hanse Uszkoreita.
tvrdenie ze .... NP-uplny (tj. v nejhorsim pripade zrejme exponencialni) sa mi nezda dostatocne presne. Ja mam pocit, ze kazdy NP jazyk je exponencialny na deterministickom turingovom stroji, samozrejme ked sa bavime o casovej zlozitosti, a polynomialny na nedeterministickom. Mysleli ste to teda tak, ze algoritmus pre ten parsing -- ktory je simulovany na deterministickom vypoctovom modeli -- je v najhorsom pripade exponencialny?
Jen jsem se snažil naznačit, že zatím nikdo nedokázal, že pro NP-úplné úlohy neexistuje polynomiální deterministický algoritmus.
Nezávisle na této teoretické poznámce to je, jak píšete - onen algoritmus pro parsing je v praxi v nejhorším případě exponenciální (ve skutečnosti to jde u přirozených jazyků většinou polynomiálně a dokonce existuje jazyk bez rekurze, ale bavíme se o O(n)).
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 343×
Přečteno 25 471×
Přečteno 23 874×
Přečteno 20 264×
Přečteno 17 978×