Module nafparserpy.layers.constituency

Expand source code
from dataclasses import dataclass, field
from typing import List

from nafparserpy.layers.utils import create_node, AttributeGetter, IdrefGetter
from nafparserpy.layers.elements import Span


@dataclass
class Edge(AttributeGetter):
    """Represents an edge"""
    from_idref: str
    """id of 'from' node (note that the field name differs from the NAF attribute 'from')"""
    to: str
    """id of 'to' node"""
    attrs: dict = field(default_factory=dict)
    """optional attributes ('id' and 'head')"""

    def __post_init__(self):
        """Copy compulsory attributes to `attrs` field"""
        self.attrs.update({'from': self.from_idref, 'to': self.to})

    def node(self):
        """Create etree node from object"""
        return create_node('edge', None, [], self.attrs)

    @staticmethod
    def object(node):
        """Create object from etree node"""
        return Edge(node.get('from'), node.get('to'), node.attrib)


@dataclass
class T(IdrefGetter):
    """Represents a terminal"""
    id: str
    span: Span

    def node(self):
        """Create etree node from object"""
        return create_node('t', None, [self.span], {'id': self.id})

    @staticmethod
    def object(node):
        """Create object from etree node"""
        return T(node.get('id'), Span.object(node.find('span')))


@dataclass
class Nt:
    """Represents a nonterminal"""
    id: str
    label: str

    def node(self):
        """Create etree node from object"""
        return create_node('nt', None, [], {'id': self.id, 'label': self.label})

    @staticmethod
    def object(node):
        """Create object from etree node"""
        return Nt(node.get('id'), node.get('label'))


@dataclass
class Tree:
    """Represents a tree"""
    nts: List[Nt]
    """nonterminals"""
    ts: List[T]
    """terminals"""
    edges: List[Edge]
    """edges"""

    def node(self):
        """Create etree node from object"""
        return create_node('tree', None, self.nts + self.ts + self.edges, {})

    @staticmethod
    def object(node):
        """Create object from etree node"""
        return Tree([Nt.object(n) for n in node.findall('nt')],
                    [T.object(n) for n in node.findall('t')],
                    [Edge.object(n) for n in node.findall('edge')])


@dataclass
class Constituency:
    """Constituency layer class"""
    items: List[Tree]
    """list of trees"""

    def node(self):
        """Create etree node from object"""
        return create_node('constituency', None, self.items, {})

    @staticmethod
    def object(node):
        """Create list of `Tree` objects from etree node"""
        return [Tree.object(n) for n in node]

Classes

class Constituency (items: List[Tree])

Constituency layer class

Expand source code
@dataclass
class Constituency:
    """Constituency layer class"""
    items: List[Tree]
    """list of trees"""

    def node(self):
        """Create etree node from object"""
        return create_node('constituency', None, self.items, {})

    @staticmethod
    def object(node):
        """Create list of `Tree` objects from etree node"""
        return [Tree.object(n) for n in node]

Class variables

var items : List[Tree]

list of trees

Static methods

def object(node)

Create list of Tree objects from etree node

Expand source code
@staticmethod
def object(node):
    """Create list of `Tree` objects from etree node"""
    return [Tree.object(n) for n in node]

Methods

def node(self)

Create etree node from object

Expand source code
def node(self):
    """Create etree node from object"""
    return create_node('constituency', None, self.items, {})
class Edge (from_idref: str, to: str, attrs: dict = <factory>)

Represents an edge

Expand source code
@dataclass
class Edge(AttributeGetter):
    """Represents an edge"""
    from_idref: str
    """id of 'from' node (note that the field name differs from the NAF attribute 'from')"""
    to: str
    """id of 'to' node"""
    attrs: dict = field(default_factory=dict)
    """optional attributes ('id' and 'head')"""

    def __post_init__(self):
        """Copy compulsory attributes to `attrs` field"""
        self.attrs.update({'from': self.from_idref, 'to': self.to})

    def node(self):
        """Create etree node from object"""
        return create_node('edge', None, [], self.attrs)

    @staticmethod
    def object(node):
        """Create object from etree node"""
        return Edge(node.get('from'), node.get('to'), node.attrib)

Ancestors

Class variables

var attrs : dict

optional attributes ('id' and 'head')

var from_idref : str

id of 'from' node (note that the field name differs from the NAF attribute 'from')

var to : str

id of 'to' node

Static methods

def object(node)

Create object from etree node

Expand source code
@staticmethod
def object(node):
    """Create object from etree node"""
    return Edge(node.get('from'), node.get('to'), node.attrib)

Methods

def node(self)

Create etree node from object

Expand source code
def node(self):
    """Create etree node from object"""
    return create_node('edge', None, [], self.attrs)

Inherited members

class Nt (id: str, label: str)

Represents a nonterminal

Expand source code
@dataclass
class Nt:
    """Represents a nonterminal"""
    id: str
    label: str

    def node(self):
        """Create etree node from object"""
        return create_node('nt', None, [], {'id': self.id, 'label': self.label})

    @staticmethod
    def object(node):
        """Create object from etree node"""
        return Nt(node.get('id'), node.get('label'))

Class variables

var id : str
var label : str

Static methods

def object(node)

Create object from etree node

Expand source code
@staticmethod
def object(node):
    """Create object from etree node"""
    return Nt(node.get('id'), node.get('label'))

Methods

def node(self)

Create etree node from object

Expand source code
def node(self):
    """Create etree node from object"""
    return create_node('nt', None, [], {'id': self.id, 'label': self.label})
class T (id: str, span: Span)

Represents a terminal

Expand source code
@dataclass
class T(IdrefGetter):
    """Represents a terminal"""
    id: str
    span: Span

    def node(self):
        """Create etree node from object"""
        return create_node('t', None, [self.span], {'id': self.id})

    @staticmethod
    def object(node):
        """Create object from etree node"""
        return T(node.get('id'), Span.object(node.find('span')))

Ancestors

Class variables

var id : str
var spanSpan

Static methods

def object(node)

Create object from etree node

Expand source code
@staticmethod
def object(node):
    """Create object from etree node"""
    return T(node.get('id'), Span.object(node.find('span')))

Methods

def node(self)

Create etree node from object

Expand source code
def node(self):
    """Create etree node from object"""
    return create_node('t', None, [self.span], {'id': self.id})

Inherited members

class Tree (nts: List[Nt], ts: List[T], edges: List[Edge])

Represents a tree

Expand source code
@dataclass
class Tree:
    """Represents a tree"""
    nts: List[Nt]
    """nonterminals"""
    ts: List[T]
    """terminals"""
    edges: List[Edge]
    """edges"""

    def node(self):
        """Create etree node from object"""
        return create_node('tree', None, self.nts + self.ts + self.edges, {})

    @staticmethod
    def object(node):
        """Create object from etree node"""
        return Tree([Nt.object(n) for n in node.findall('nt')],
                    [T.object(n) for n in node.findall('t')],
                    [Edge.object(n) for n in node.findall('edge')])

Class variables

var edges : List[Edge]

edges

var nts : List[Nt]

nonterminals

var ts : List[T]

terminals

Static methods

def object(node)

Create object from etree node

Expand source code
@staticmethod
def object(node):
    """Create object from etree node"""
    return Tree([Nt.object(n) for n in node.findall('nt')],
                [T.object(n) for n in node.findall('t')],
                [Edge.object(n) for n in node.findall('edge')])

Methods

def node(self)

Create etree node from object

Expand source code
def node(self):
    """Create etree node from object"""
    return create_node('tree', None, self.nts + self.ts + self.edges, {})