udapi.block.demo.complexity module

demo.Complexity prints statistics on syntactic complexity.

class udapi.block.demo.complexity.Complexity(matches=False, **kwargs)[source]

Bases: BaseWriter

expand_subtree(nodes, expand_type)[source]
get_complex_t_units(root)[source]
get_coord_phrase(root, phrase_type_function)[source]
get_main_clauses(root)[source]
get_t_units(main_heads)[source]
print_match(category, group, expand_type='no')[source]
process_tree(root)[source]

Process a UD tree

report(category, groups, expand_type='no')[source]
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_finite_verb(node)[source]
udapi.block.demo.complexity.is_np(node)[source]
udapi.block.demo.complexity.is_postponed_adj_mod(node)[source]
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.

udapi.block.demo.complexity.non_punct(nodes)[source]