udapi.block.demo.complexity module¶
demo.Complexity prints statistics on syntactic complexity.
- class udapi.block.demo.complexity.Complexity(matches=False, **kwargs)[source]¶
Bases:
BaseWriter
- udapi.block.demo.complexity.is_adjectivized_predicate(node)[source]¶
E.g. kouřící komín, zbitý kluk
Silvie: [(POS == „ADJ“ & feats:VerbForm == „Part“), parent [POS in {„NOUN“, „PROPN“}] ] - parent [POS in {„NOUN“, „PROPN“}] zamezí případům jako
“kvůli nesmyslné a stupňující(parent=nesmyslné,deprel=conj) se žárlivosti” “Nové pronikající(parent=Nové,deprel=amod) socialistické myšlení” asi chyba parsingu, mělo být parent=myšlení?
dotaz naopak matchuje na “způsob, jakým jsou popsány”, proto přidávám podmínku not node.misc[“ClauseHead”]
- udapi.block.demo.complexity.is_complex_nominal(node)[source]¶
[(POS in {“NOUN”, “PROPN”} | POS == “PRON” & feats:PronType == “Prs” & !(feats:Poss==”Yes”)) 2x descendant [deprel != “conj”]] TODO: punct, case, cc a dep taky ignorovat? TODO: opravdu descendants a ne children? (descendants snadno roste nad všechny meze, je-li tam třeba vedlejší věta) TODO: beztak bude chtít odfiltrovat copuly: “Jádrem tvorby jsou sbírky.” - Jádrem má 3 děti. TODO: a nezvýšit ten limit z 2x aspoň na 3x?
- udapi.block.demo.complexity.is_controlled_predicate(node)[source]¶
E.g. Mohli jsme odejít i zůstat.
TODO: Chceme zahrnout i druhý a další člen koordinace, např. “stihl napsat a publikovat”, tedy node.udeprel == “conj” and node.parent.udeprel == “xcomp”?
- udapi.block.demo.complexity.is_finite_clause_head(node)[source]¶
Is a given node a head of a finite clause?
Silvie: [(POS == „VERB“ & feats:Verbform == „Fin“ | Verbform == „Part“} ) ] OR [(POS in {„ADJ“, „NOUN“, „PROPN“}, [child POS == „AUX“)]] - POS == „VERB“ je zbytečné, protože VerbForm=Part je nastaveno i u ADJ (“je nucen” apod.) - child POS == „AUX“ zase matchuje i např. na “Vidím psa(NOUN), který je(AUX,acl,parent=psa) z dávné doby.” - adjectivized predicates (převažující(VerbForm=Part) básně) by neměly být určeny jako clause_head
Most finite verbs with deprel=amod are parsing errors - they should have deprel=acl, but for better robustness we include these as well.
Similarly “dep” and “orphan” are mostly parsing errors.
TODO: by uncommenting the nsubj/csubj line, we find few more real clause heads, but also some false positives.
- udapi.block.demo.complexity.is_postponed_nom_mod(node)[source]¶
Is a given node a postponed nominal modifier?
Silvie: [(POS in {“NOUN”, “PROPN”} | POS == “PRON” & feats:PronType == “Prs” & !(feats:Poss==”Yes”)), child with higher word order than parent [deprel != “conj”, POS in {“NOUN”, “PROPN”} | POS == “PRON” & feats:PronType == “Prs” & !(feats:Poss==”Yes”)]
TODO: Tohle hledá v češtině zcela běžné jevy jako “vznik díla”. Nechceme hledat něco jiného?
- udapi.block.demo.complexity.is_relcl(node)[source]¶
Is a given node a head of a relative clause?
Unfortunatelly, UDPipe 2.4 produces just acl instead of acl:relcl.
- udapi.block.demo.complexity.is_vp(node)[source]¶
E.g. prosili, naléhali a žadonili => 1 coordinated verb phrase, head “prosili”.
[POS == “VERB”, [deprel == “conj”, POS == “VERB”]], unique coordination heads TODO: zahrnout i non-VERB? - vznikla a byla přijata(conj,ADJ,parent=vznikla) - je(cop,AUX) nešťastný(ADJ) a nechá(conj,VERB,parent=nešťastný) se nalákat - “podařilo se to a dokladem(ClauseHead,NOUN,conj,parent=podařilo) je(cop,AUX,parent=dokladem)” - omezit se jen na (či využít) ClauseHead, nebo zahrnout i non-finite verbs (koordinace infinitivů či příčestí)? “stihl(ClauseHead) napsat(VerbForm=Inf) a publikovat(VerbForm=Inf)” … napsat ani publikovat nejsou ClauseHead “rozhodl se ukončit a ukazuje(ClauseHead,parent=ukončit)” správně by mělo být parent=rozhodl, ale parser dělá chyby. - Parsing vůbec dělá mnoho chyb v koordinacích, takže je vhodné podmínky velmi omezit.