From a7801e7342817fd52693bdee8b4deaf548fc2cef Mon Sep 17 00:00:00 2001 From: ines Date: Mon, 8 May 2017 15:27:25 +0200 Subject: [PATCH] Update spacy.load() path argument is now deprecated and name can either take a model name or path. Implement lazy loading by importing module and read Language class name off __all__. --- spacy/__init__.py | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/spacy/__init__.py b/spacy/__init__.py index 54ba27902..5e6d6cd18 100644 --- a/spacy/__init__.py +++ b/spacy/__init__.py @@ -1,37 +1,23 @@ # coding: utf8 from __future__ import unicode_literals -from . import util -from .util import prints -from .deprecated import resolve_model_name import importlib + +from .compat import basestring_ from .cli.info import info from .glossary import explain - - -_languages_name = set(["en", "de", "es", "pt", "fr", - "it", "hu", "zh", "nl", "sv", - "fi", "bn", "he", "nb", "ja"]) +from . import util def load(name, **overrides): - if overrides.get('path') in (None, False, True): - data_path = util.get_data_path() - model_name = resolve_model_name(name) - model_path = data_path / model_name - if not model_path.exists(): - lang_name = util.get_lang_class(name).lang - model_path = None - prints("Only loading the '%s' tokenizer." % lang_name, - title="Warning: no model found for '%s'" % name) - else: - model_path = util.ensure_path(overrides['path']) - data_path = model_path.parent - model_name = '' - meta = util.parse_package_meta(data_path, model_name, require=False) - lang = meta['lang'] if meta and 'lang' in meta else name - module = importlib.import_module("."+lang, "spacy") - cls = module.EXPORT + if overrides.get('path') not in (None, False, True): + name = overrides.get('path') + model_path = util.resolve_model_path(name) + meta = util.parse_package_meta(model_path) + if 'lang' not in meta: + raise IOError('No language setting found in model meta.') + module = importlib.import_module('.%s' % meta['lang'], 'spacy') + cls = getattr(module, module.__all__[0]) overrides['meta'] = meta overrides['path'] = model_path return cls(**overrides)