Module nafparserpy.layers.utils
Expand source code
from dataclasses import dataclass, field
from lxml import etree
class AttributeGetter:
"""Provides an attribute getter"""
def get(self, attribute):
"""Get attribute from `attrs` field
Parameters
----------
attribute : str
attribute name
Raises
------
KeyError: if the layer has no such attribute"""
if self.has(attribute):
return self.attrs[attribute]
else:
raise KeyError('Attribute {} is not present in layer:\n{}'.format(attribute, self))
def has(self, attribute):
"""Test if attribute appears in `attrs` field"""
return self.attrs is not None and attribute in self.attrs.keys()
class IdrefGetter:
"""Provides a target ids getter for layers with a `span` field"""
def target_ids(self):
"""Return list of target ids covered by the layer's span"""
if self.span is None:
return []
return [t.id for t in self.span.targets]
class ExternalReferenceHolder:
"""Provides add/get method for external references"""
def add_external_ref(self, external_ref):
self.external_references.items.append(external_ref)
def get_external_refs(self):
return [x.reference for x in self.external_references.items]
@dataclass
class AttributeLayer(AttributeGetter):
"""A layer containing only attributes"""
layer: str
attrs: dict = field(default_factory=dict)
"""optional attributes (keys are subclass dependent)"""
def node(self):
"""Create etree node from object"""
return create_node(self.layer, None, [], self.attrs)
@staticmethod
def object(layer_name, node):
"""Create object from etree node"""
return AttributeLayer(layer_name, node.attrib)
def is_none(self):
return not self.attrs
def create_node(layer, text, children, attributes):
"""Create an etree Element node from the text, children and attributes of NAF objects
Parameters
----------
layer : str
layer name
text : str
text of node
children : list
list of NAF objects to add as subelements in the node
attributes : dict
node attributes (whether compulsory or optional)
"""
node = etree.Element(layer)
if text is not None:
node.text = etree.CDATA(text)
for child in children:
# create node for each child and append to node subelements
node.append(child.node())
for k, v in attributes.items():
node.set(k, v)
return node
Functions
def create_node(layer, text, children, attributes)
-
Create an etree Element node from the text, children and attributes of NAF objects
Parameters
layer
:str
- layer name
text
:str
- text of node
children
:list
- list of NAF objects to add as subelements in the node
attributes
:dict
- node attributes (whether compulsory or optional)
Expand source code
def create_node(layer, text, children, attributes): """Create an etree Element node from the text, children and attributes of NAF objects Parameters ---------- layer : str layer name text : str text of node children : list list of NAF objects to add as subelements in the node attributes : dict node attributes (whether compulsory or optional) """ node = etree.Element(layer) if text is not None: node.text = etree.CDATA(text) for child in children: # create node for each child and append to node subelements node.append(child.node()) for k, v in attributes.items(): node.set(k, v) return node
Classes
class AttributeGetter
-
Provides an attribute getter
Expand source code
class AttributeGetter: """Provides an attribute getter""" def get(self, attribute): """Get attribute from `attrs` field Parameters ---------- attribute : str attribute name Raises ------ KeyError: if the layer has no such attribute""" if self.has(attribute): return self.attrs[attribute] else: raise KeyError('Attribute {} is not present in layer:\n{}'.format(attribute, self)) def has(self, attribute): """Test if attribute appears in `attrs` field""" return self.attrs is not None and attribute in self.attrs.keys()
Subclasses
- CLink
- Chunk
- Edge
- Coref
- Component
- ExternalRef
- Entity
- FactVal
- Mark
- Mw
- LP
- LPDependency
- OpinionExpression
- OpinionHolder
- OpinionTarget
- Predicate
- Role
- PredicateAnchor
- Term
- Wf
- Timex3
- Topic
- Tunit
- AttributeLayer
Methods
def get(self, attribute)
-
Get attribute from
attrs
fieldParameters
attribute
:str
- attribute name
Raises
KeyError
:if the layer has no such attribute
Expand source code
def get(self, attribute): """Get attribute from `attrs` field Parameters ---------- attribute : str attribute name Raises ------ KeyError: if the layer has no such attribute""" if self.has(attribute): return self.attrs[attribute] else: raise KeyError('Attribute {} is not present in layer:\n{}'.format(attribute, self))
def has(self, attribute)
-
Test if attribute appears in
attrs
fieldExpand source code
def has(self, attribute): """Test if attribute appears in `attrs` field""" return self.attrs is not None and attribute in self.attrs.keys()
class AttributeLayer (layer: str, attrs: dict = <factory>)
-
A layer containing only attributes
Expand source code
@dataclass class AttributeLayer(AttributeGetter): """A layer containing only attributes""" layer: str attrs: dict = field(default_factory=dict) """optional attributes (keys are subclass dependent)""" def node(self): """Create etree node from object""" return create_node(self.layer, None, [], self.attrs) @staticmethod def object(layer_name, node): """Create object from etree node""" return AttributeLayer(layer_name, node.attrib) def is_none(self): return not self.attrs
Ancestors
Subclasses
Class variables
var attrs : dict
-
optional attributes (keys are subclass dependent)
var layer : str
Static methods
def object(layer_name, node)
-
Create object from etree node
Expand source code
@staticmethod def object(layer_name, node): """Create object from etree node""" return AttributeLayer(layer_name, node.attrib)
Methods
def is_none(self)
-
Expand source code
def is_none(self): return not self.attrs
def node(self)
-
Create etree node from object
Expand source code
def node(self): """Create etree node from object""" return create_node(self.layer, None, [], self.attrs)
Inherited members
class ExternalReferenceHolder
-
Provides add/get method for external references
Expand source code
class ExternalReferenceHolder: """Provides add/get method for external references""" def add_external_ref(self, external_ref): self.external_references.items.append(external_ref) def get_external_refs(self): return [x.reference for x in self.external_references.items]
Subclasses
Methods
def add_external_ref(self, external_ref)
-
Expand source code
def add_external_ref(self, external_ref): self.external_references.items.append(external_ref)
def get_external_refs(self)
-
Expand source code
def get_external_refs(self): return [x.reference for x in self.external_references.items]
class IdrefGetter
-
Provides a target ids getter for layers with a
span
fieldExpand source code
class IdrefGetter: """Provides a target ids getter for layers with a `span` field""" def target_ids(self): """Return list of target ids covered by the layer's span""" if self.span is None: return [] return [t.id for t in self.span.targets]
Subclasses
- StatementCue
- StatementSource
- StatementTarget
- T
- Coref
- Component
- Entity
- Factuality
- Mark
- OpinionExpression
- OpinionHolder
- OpinionTarget
- Predicate
- Role
- Term
- Timex3
Methods
def target_ids(self)
-
Return list of target ids covered by the layer's span
Expand source code
def target_ids(self): """Return list of target ids covered by the layer's span""" if self.span is None: return [] return [t.id for t in self.span.targets]