mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-25 09:26:27 +03:00
first idea for supporting multiple langs in download script
This commit is contained in:
parent
8f870854c4
commit
a7d7ea3afa
|
@ -1,8 +1,13 @@
|
||||||
from . import util
|
from . import util
|
||||||
from .en import English
|
from .about import __models__
|
||||||
|
import importlib
|
||||||
|
|
||||||
|
|
||||||
def load(name, vectors=None, via=None):
|
def load(name, vectors=None, via=None):
|
||||||
return English(
|
if name not in __models__:
|
||||||
|
raise Exception('Model %s not found.' % name)
|
||||||
|
|
||||||
|
mod = importlib.import_module('.%s' % __models__[name]['module'], 'spacy')
|
||||||
|
return getattr(mod, __models__[name]['class'])(
|
||||||
package=util.get_package_by_name(name, via=via),
|
package=util.get_package_by_name(name, via=via),
|
||||||
vectors_package=util.get_package_by_name(vectors, via=via))
|
vectors_package=util.get_package_by_name(vectors, via=via))
|
||||||
|
|
|
@ -10,4 +10,16 @@ __uri__ = 'https://spacy.io'
|
||||||
__author__ = 'Matthew Honnibal'
|
__author__ = 'Matthew Honnibal'
|
||||||
__email__ = 'matt@spacy.io'
|
__email__ = 'matt@spacy.io'
|
||||||
__license__ = 'MIT'
|
__license__ = 'MIT'
|
||||||
__default_model__ = 'en>=1.0.0,<1.1.0'
|
__models__ = {
|
||||||
|
'en': {
|
||||||
|
'module': 'en',
|
||||||
|
'class': 'English',
|
||||||
|
'package': 'en>=1.0.0,<1.1.0',
|
||||||
|
},
|
||||||
|
'de': {
|
||||||
|
'module': 'de',
|
||||||
|
'class': 'German',
|
||||||
|
'package': 'de>=1.0.0,<1.1.0',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
__default_model__ = 'en'
|
||||||
|
|
13
spacy/de/download.py
Normal file
13
spacy/de/download.py
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
import plac
|
||||||
|
from ..download import download
|
||||||
|
|
||||||
|
|
||||||
|
@plac.annotations(
|
||||||
|
force=("Force overwrite", "flag", "f", bool),
|
||||||
|
)
|
||||||
|
def main(data_size='all', force=False):
|
||||||
|
download('de', force)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
plac.call(main)
|
33
spacy/download.py
Normal file
33
spacy/download.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import sputnik
|
||||||
|
from sputnik.package_list import (PackageNotFoundException,
|
||||||
|
CompatiblePackageNotFoundException)
|
||||||
|
|
||||||
|
from . import about
|
||||||
|
|
||||||
|
|
||||||
|
def download(lang, force=False):
|
||||||
|
if force:
|
||||||
|
sputnik.purge(about.__title__, about.__version__)
|
||||||
|
|
||||||
|
try:
|
||||||
|
sputnik.package(about.__title__, about.__version__, about.__models__[lang]['package'])
|
||||||
|
print("Model already installed. Please run 'python -m "
|
||||||
|
"spacy.%s.download --force' to reinstall." % lang, file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
except (PackageNotFoundException, CompatiblePackageNotFoundException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
package = sputnik.install(about.__title__, about.__version__, about.__models__[lang]['package'])
|
||||||
|
|
||||||
|
try:
|
||||||
|
sputnik.package(about.__title__, about.__version__, about.__models__[lang]['package'])
|
||||||
|
except (PackageNotFoundException, CompatiblePackageNotFoundException):
|
||||||
|
print("Model failed to install. Please run 'python -m "
|
||||||
|
"spacy.%s.download --force'." % lang, file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print("Model successfully installed.", file=sys.stderr)
|
|
@ -1,57 +1,12 @@
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
|
|
||||||
import plac
|
import plac
|
||||||
import sputnik
|
from ..download import download
|
||||||
from sputnik.package_list import (PackageNotFoundException,
|
|
||||||
CompatiblePackageNotFoundException)
|
|
||||||
|
|
||||||
from .. import about
|
|
||||||
|
|
||||||
|
|
||||||
def migrate(path):
|
|
||||||
data_path = os.path.join(path, 'data')
|
|
||||||
if os.path.isdir(data_path):
|
|
||||||
if os.path.islink(data_path):
|
|
||||||
os.unlink(data_path)
|
|
||||||
else:
|
|
||||||
shutil.rmtree(data_path)
|
|
||||||
for filename in os.listdir(path):
|
|
||||||
if filename.endswith('.tgz'):
|
|
||||||
os.unlink(os.path.join(path, filename))
|
|
||||||
|
|
||||||
|
|
||||||
@plac.annotations(
|
@plac.annotations(
|
||||||
force=("Force overwrite", "flag", "f", bool),
|
force=("Force overwrite", "flag", "f", bool),
|
||||||
)
|
)
|
||||||
def main(data_size='all', force=False):
|
def main(data_size='all', force=False):
|
||||||
if force:
|
download('en', force)
|
||||||
sputnik.purge(about.__title__, about.__version__)
|
|
||||||
|
|
||||||
try:
|
|
||||||
sputnik.package(about.__title__, about.__version__, about.__default_model__)
|
|
||||||
print("Model already installed. Please run 'python -m "
|
|
||||||
"spacy.en.download --force' to reinstall.", file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
except (PackageNotFoundException, CompatiblePackageNotFoundException):
|
|
||||||
pass
|
|
||||||
|
|
||||||
package = sputnik.install(about.__title__, about.__version__, about.__default_model__)
|
|
||||||
|
|
||||||
try:
|
|
||||||
sputnik.package(about.__title__, about.__version__, about.__default_model__)
|
|
||||||
except (PackageNotFoundException, CompatiblePackageNotFoundException):
|
|
||||||
print("Model failed to install. Please run 'python -m "
|
|
||||||
"spacy.en.download --force'.", file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# FIXME clean up old-style packages
|
|
||||||
migrate(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
print("Model successfully installed.", file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -23,15 +23,17 @@ def get_package(data_dir):
|
||||||
def get_package_by_name(name=None, via=None):
|
def get_package_by_name(name=None, via=None):
|
||||||
try:
|
try:
|
||||||
return sputnik.package(about.__title__, about.__version__,
|
return sputnik.package(about.__title__, about.__version__,
|
||||||
name or about.__default_model__, data_path=via)
|
name or about.__models__[about.__default_model__]['package'],
|
||||||
|
data_path=via)
|
||||||
except PackageNotFoundException as e:
|
except PackageNotFoundException as e:
|
||||||
raise RuntimeError("Model %s not installed. Please run 'python -m "
|
raise RuntimeError("Model %s not installed. Please run 'python -m "
|
||||||
"spacy.en.download' to install latest compatible "
|
"spacy.%s.download' to install latest compatible "
|
||||||
"model." % name)
|
"model." % (name, about.__models__[name]['module']))
|
||||||
except CompatiblePackageNotFoundException as e:
|
except CompatiblePackageNotFoundException as e:
|
||||||
raise RuntimeError("Installed model is not compatible with spaCy "
|
raise RuntimeError("Installed model %s is not compatible with spaCy "
|
||||||
"version. Please run 'python -m spacy.en.download "
|
"version. Please run 'python -m spacy.%s.download "
|
||||||
"--force' to install latest compatible model.")
|
"--force' to install latest compatible model." %
|
||||||
|
(name, about.__models__[name]['module']))
|
||||||
|
|
||||||
|
|
||||||
def normalize_slice(length, start, stop, step=None):
|
def normalize_slice(length, start, stop, step=None):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user