Source code for segram.nlp.pipeline.annotator

from typing import Any, Iterable, Mapping, Self
from spacy.tokens import Token
from spacy.language import Language
from spacy.pipeline import AttributeRuler
from ...utils.resources import JSONResource


[docs] class Annotator(AttributeRuler): """Annotator class adding token flags used in semantic grammar analysis. It is implemented as :py:class:`spacy.pipeline.AttributeRuler` subclass and uses standard token POS and DEP attributes to define a set of custom semantic grammar flags. """
[docs] @classmethod def from_patterns( cls, nlp: Language, name: str, *, patterns: Mapping[str, str], **kwds: Any ) -> Self: """Initialize from a patterns packahe resource.""" obj = cls(nlp.vocab, name, **kwds) patterns = JSONResource.from_package(**patterns).get() obj.init_extension_attrs(patterns) obj.add_patterns(patterns) return obj
def init_extension_attrs(self, patterns: Iterable[dict]) -> None: for pattern in patterns: attrs = pattern.get("attrs", {}) for attr, val in attrs.get("_", {}).items(): if not Token.has_extension(attr): Token.set_extension(attr, default=not val)