Source code for udapi.block.ud.fixadvmodbyupos

"""
Block ud.FixAdvmodByUpos will change the dependency relation from advmod to something else
if the UPOS is not ADV.
"""
from udapi.core.block import Block


[docs] class FixAdvmodByUpos(Block): """ Make sure advmod is not used with UPOS it should not be used with. """
[docs] def process_node(self, node): if node.udeprel == 'advmod': if node.upos in ['NOUN', 'PROPN', 'PRON', 'DET', 'NUM']: node.deprel = 'obl' elif node.upos == 'VERB': node.deprel = 'advcl' elif node.upos == 'AUX': node.deprel = 'aux' elif node.upos in ['ADP', 'SCONJ']: if node.parent.upos == 'VERB': node.deprel = 'mark' else: node.deprel = 'case' elif node.upos == 'CCONJ': node.deprel = 'cc' elif node.upos == 'INTJ': node.deprel = 'discourse' else: node.deprel = 'dep' ###!!! The following are not advmod so they should probably have their ###!!! own block or this block should have a different name. elif node.udeprel == 'expl': if node.upos == 'AUX': node.deprel = 'aux' elif node.upos == 'ADP': node.deprel = 'case' elif node.upos == 'ADV': node.deprel = 'advmod' elif node.upos == 'CCONJ': node.deprel = 'cc' elif node.udeprel in ['aux', 'cop']: if node.upos != 'AUX': node.deprel = 'dep' elif node.udeprel == 'case': if node.upos == 'ADJ': node.deprel = 'amod' elif node.upos == 'DET': node.deprel = 'det' elif node.upos == 'PRON': node.deprel = 'nmod' elif node.udeprel == 'mark': if node.upos in ['PRON', 'DET']: node.deprel = 'nsubj' # it could be also obj, iobj, obl or nmod; just guessing what might be more probable elif node.upos == 'NOUN': node.deprel = 'obl' elif node.upos == 'ADJ': node.deprel = 'amod' elif node.upos == 'INTJ': node.deprel = 'discourse' elif node.udeprel == 'cc': if node.upos == 'AUX': node.deprel = 'aux' elif node.upos == 'DET': node.deprel = 'det' elif node.upos == 'INTJ': node.deprel = 'discourse' elif node.upos == 'NOUN': node.deprel = 'dep' elif node.udeprel == 'det': if node.upos == 'NOUN': node.deprel = 'nmod' elif node.upos == 'ADJ': node.deprel = 'amod' elif node.upos == 'NUM': node.deprel = 'nummod' elif node.upos == 'ADV': node.deprel = 'advmod' elif node.upos == 'AUX': node.deprel = 'aux' elif node.upos == 'VERB': node.deprel = 'dep' elif node.upos == 'SCONJ': node.deprel = 'mark' elif node.upos == 'CCONJ': node.deprel = 'cc' elif node.upos == 'X': node.deprel = 'dep' elif node.udeprel == 'nummod': if node.upos == 'ADJ': node.deprel = 'amod' elif node.upos == 'PRON': node.deprel = 'nmod' elif node.upos == 'DET': node.deprel = 'det' elif node.upos == 'ADP': node.deprel = 'case' elif node.udeprel == 'punct': if node.upos != 'PUNCT': node.deprel = 'dep' elif node.udeprel == 'obl' and node.parent.upos in ['NOUN', 'PROPN', 'PRON'] and node.parent.udeprel in ['nsubj', 'obj', 'iobj', 'obl', 'vocative', 'dislocated', 'expl', 'nmod']: node.deprel = 'nmod'