mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-10-31 07:57:35 +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