diff --git a/spacy/language.py b/spacy/language.py index dcdfd7847..de25157fb 100644 --- a/spacy/language.py +++ b/spacy/language.py @@ -23,6 +23,7 @@ from .pipeline import TokenVectorEncoder, NeuralTagger, NeuralEntityRecognizer from .pipeline import NeuralLabeller from .pipeline import SimilarityHook from .pipeline import TextCategorizer +from . import about from .compat import json_dumps from .attrs import IS_STOP @@ -149,8 +150,8 @@ class Language(object): Defaults = BaseDefaults lang = None - def __init__(self, vocab=True, make_doc=True, pipeline=None, meta={}, - disable=tuple(), **kwargs): + def __init__(self, vocab=True, make_doc=True, pipeline=None, + meta={}, disable=tuple(), **kwargs): """Initialise a Language object. vocab (Vocab): A `Vocab` object. If `True`, a vocab is created via @@ -167,7 +168,7 @@ class Language(object): models to add model meta data. RETURNS (Language): The newly constructed object. """ - self.meta = dict(meta) + self._meta = dict(meta) if vocab is True: factory = self.Defaults.create_vocab vocab = factory(self, **meta.get('vocab', {})) @@ -199,6 +200,28 @@ class Language(object): flat_list.append(pipe) self.pipeline = flat_list + @property + def meta(self): + self._meta.setdefault('lang', self.vocab.lang) + self._meta.setdefault('name', '') + self._meta.setdefault('version', '0.0.0') + self._meta.setdefault('spacy_version', about.__version__) + self._meta.setdefault('description', '') + self._meta.setdefault('author', '') + self._meta.setdefault('email', '') + self._meta.setdefault('url', '') + self._meta.setdefault('license', '') + pipeline = [] + for component in self.pipeline: + if hasattr(component, 'name'): + pipeline.append(component.name) + self._meta['pipeline'] = pipeline + return self._meta + + @meta.setter + def meta(self, value): + self._meta = value + # Conveniences to access pipeline components @property def tensorizer(self):