2018-04-03 13:50:31 +00:00
|
|
|
# coding: utf8
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
|
|
import os
|
|
|
|
import warnings
|
|
|
|
import inspect
|
|
|
|
|
|
|
|
|
|
|
|
def add_codes(err_cls):
|
|
|
|
"""Add error codes to string messages via class attribute names."""
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
|
2018-04-03 13:50:31 +00:00
|
|
|
class ErrorsWithCodes(object):
|
|
|
|
def __getattribute__(self, code):
|
|
|
|
msg = getattr(err_cls, code)
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
return "[{code}] {msg}".format(code=code, msg=msg)
|
|
|
|
|
2018-04-03 13:50:31 +00:00
|
|
|
return ErrorsWithCodes()
|
|
|
|
|
|
|
|
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
# fmt: off
|
|
|
|
|
2018-04-03 13:50:31 +00:00
|
|
|
@add_codes
|
|
|
|
class Warnings(object):
|
|
|
|
W001 = ("As of spaCy v2.0, the keyword argument `path=` is deprecated. "
|
|
|
|
"You can now call spacy.load with the path as its first argument, "
|
|
|
|
"and the model's meta.json will be used to determine the language "
|
|
|
|
"to load. For example:\nnlp = spacy.load('{path}')")
|
|
|
|
W002 = ("Tokenizer.from_list is now deprecated. Create a new Doc object "
|
|
|
|
"instead and pass in the strings as the `words` keyword argument, "
|
|
|
|
"for example:\nfrom spacy.tokens import Doc\n"
|
|
|
|
"doc = Doc(nlp.vocab, words=[...])")
|
|
|
|
W003 = ("Positional arguments to Doc.merge are deprecated. Instead, use "
|
|
|
|
"the keyword arguments, for example tag=, lemma= or ent_type=.")
|
|
|
|
W004 = ("No text fixing enabled. Run `pip install ftfy` to enable fixing "
|
|
|
|
"using ftfy.fix_text if necessary.")
|
|
|
|
W005 = ("Doc object not parsed. This means displaCy won't be able to "
|
|
|
|
"generate a dependency visualization for it. Make sure the Doc "
|
|
|
|
"was processed with a model that supports dependency parsing, and "
|
|
|
|
"not just a language class like `English()`. For more info, see "
|
|
|
|
"the docs:\nhttps://spacy.io/usage/models")
|
|
|
|
W006 = ("No entities to visualize found in Doc object. If this is "
|
|
|
|
"surprising to you, make sure the Doc was processed using a model "
|
|
|
|
"that supports named entity recognition, and check the `doc.ents` "
|
|
|
|
"property manually if necessary.")
|
2018-05-20 23:22:38 +00:00
|
|
|
W007 = ("The model you're using has no word vectors loaded, so the result "
|
|
|
|
"of the {obj}.similarity method will be based on the tagger, "
|
|
|
|
"parser and NER, which may not give useful similarity judgements. "
|
|
|
|
"This may happen if you're using one of the small models, e.g. "
|
|
|
|
"`en_core_web_sm`, which don't ship with word vectors and only "
|
|
|
|
"use context-sensitive tensors. You can always add your own word "
|
|
|
|
"vectors, or use one of the larger models instead if available.")
|
|
|
|
W008 = ("Evaluating {obj}.similarity based on empty vectors.")
|
2018-05-22 16:29:45 +00:00
|
|
|
W009 = ("Custom factory '{name}' provided by entry points of another "
|
|
|
|
"package overwrites built-in factory.")
|
2018-11-14 18:10:46 +00:00
|
|
|
W010 = ("As of v2.1.0, the PhraseMatcher doesn't have a phrase length "
|
|
|
|
"limit anymore, so the max_length argument is now deprecated.")
|
2018-12-20 16:32:04 +00:00
|
|
|
W011 = ("It looks like you're calling displacy.serve from within a "
|
|
|
|
"Jupyter notebook or a similar environment. This likely means "
|
|
|
|
"you're already running a local web server, so there's no need to "
|
|
|
|
"make displaCy start another one. Instead, you should be able to "
|
|
|
|
"replace displacy.serve with displacy.render to show the "
|
|
|
|
"visualization.")
|
2019-02-12 14:45:31 +00:00
|
|
|
W012 = ("A Doc object you're adding to the PhraseMatcher for pattern "
|
|
|
|
"'{key}' is parsed and/or tagged, but to match on '{attr}', you "
|
|
|
|
"don't actually need this information. This means that creating "
|
|
|
|
"the patterns is potentially much slower, because all pipeline "
|
|
|
|
"components are applied. To only create tokenized Doc objects, "
|
|
|
|
"try using `nlp.make_doc(text)` or process all texts as a stream "
|
|
|
|
"using `list(nlp.tokenizer.pipe(all_texts))`.")
|
2019-02-15 09:29:44 +00:00
|
|
|
W013 = ("As of v2.1.0, {obj}.merge is deprecated. Please use the more "
|
|
|
|
"efficient and less error-prone Doc.retokenize context manager "
|
|
|
|
"instead.")
|
2019-03-10 18:16:45 +00:00
|
|
|
W014 = ("As of v2.1.0, the `disable` keyword argument on the serialization "
|
|
|
|
"methods is and should be replaced with `exclude`. This makes it "
|
|
|
|
"consistent with the other objects serializable.")
|
|
|
|
W015 = ("As of v2.1.0, the use of keyword arguments to exclude fields from "
|
|
|
|
"being serialized or deserialized is deprecated. Please use the "
|
|
|
|
"`exclude` argument instead. For example: exclude=['{arg}'].")
|
2019-03-15 15:38:44 +00:00
|
|
|
W016 = ("The keyword argument `n_threads` on the is now deprecated, as "
|
|
|
|
"the v2.x models cannot release the global interpreter lock. "
|
|
|
|
"Future versions may introduce a `n_process` argument for "
|
|
|
|
"parallel inference via multiprocessing.")
|
2019-10-14 10:28:53 +00:00
|
|
|
W017 = ("Alias '{alias}' already exists in the Knowledge Base.")
|
|
|
|
W018 = ("Entity '{entity}' already exists in the Knowledge Base.")
|
2019-07-11 12:44:32 +00:00
|
|
|
W019 = ("Changing vectors name from {old} to {new}, to avoid clash with "
|
|
|
|
"previously loaded vectors. See Issue #3853.")
|
2019-09-16 13:16:12 +00:00
|
|
|
W020 = ("Unnamed vectors. This won't allow multiple vectors models to be "
|
|
|
|
"loaded. (Shape: {shape})")
|
2019-09-27 14:22:34 +00:00
|
|
|
W021 = ("Unexpected hash collision in PhraseMatcher. Matches may be "
|
|
|
|
"incorrect. Modify PhraseMatcher._terminal_hash to fix.")
|
2019-10-01 13:13:55 +00:00
|
|
|
W022 = ("Training a new part-of-speech tagger using a model with no "
|
|
|
|
"lemmatization rules or data. This means that the trained model "
|
|
|
|
"may not be able to lemmatize correctly. If this is intentional "
|
|
|
|
"or the language you're using doesn't have lemmatization data, "
|
|
|
|
"you can ignore this warning by setting SPACY_WARNING_IGNORE=W022. "
|
|
|
|
"If this is surprising, make sure you have the spacy-lookups-data "
|
|
|
|
"package installed.")
|
2019-10-18 09:33:38 +00:00
|
|
|
W023 = ("Multiprocessing of Language.pipe is not supported in Python 2. "
|
|
|
|
"'n_process' will be set to 1.")
|
2019-10-14 10:28:53 +00:00
|
|
|
W024 = ("Entity '{entity}' - Alias '{alias}' combination already exists in "
|
|
|
|
"the Knowledge Base.")
|
2019-10-27 12:35:49 +00:00
|
|
|
W025 = ("'{name}' requires '{attr}' to be assigned, but none of the "
|
|
|
|
"previous components in the pipeline declare that they assign it.")
|
2018-04-03 13:50:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
@add_codes
|
|
|
|
class Errors(object):
|
|
|
|
E001 = ("No component '{name}' found in pipeline. Available names: {opts}")
|
|
|
|
E002 = ("Can't find factory for '{name}'. This usually happens when spaCy "
|
|
|
|
"calls `nlp.create_pipe` with a component name that's not built "
|
|
|
|
"in - for example, when constructing the pipeline from a model's "
|
|
|
|
"meta.json. If you're using a custom component, you can write to "
|
|
|
|
"`Language.factories['{name}']` or remove it from the model meta "
|
|
|
|
"and add it via `nlp.add_pipe` instead.")
|
|
|
|
E003 = ("Not a valid pipeline component. Expected callable, but "
|
|
|
|
"got {component} (name: '{name}').")
|
|
|
|
E004 = ("If you meant to add a built-in component, use `create_pipe`: "
|
|
|
|
"`nlp.add_pipe(nlp.create_pipe('{component}'))`")
|
|
|
|
E005 = ("Pipeline component '{name}' returned None. If you're using a "
|
|
|
|
"custom component, maybe you forgot to return the processed Doc?")
|
|
|
|
E006 = ("Invalid constraints. You can only set one of the following: "
|
|
|
|
"before, after, first, last.")
|
|
|
|
E007 = ("'{name}' already exists in pipeline. Existing names: {opts}")
|
|
|
|
E008 = ("Some current components would be lost when restoring previous "
|
|
|
|
"pipeline state. If you added components after calling "
|
|
|
|
"`nlp.disable_pipes()`, you should remove them explicitly with "
|
|
|
|
"`nlp.remove_pipe()` before the pipeline is restored. Names of "
|
|
|
|
"the new components: {names}")
|
|
|
|
E009 = ("The `update` method expects same number of docs and golds, but "
|
|
|
|
"got: {n_docs} docs, {n_golds} golds.")
|
|
|
|
E010 = ("Word vectors set to length 0. This may be because you don't have "
|
|
|
|
"a model installed or loaded, or because your model doesn't "
|
|
|
|
"include word vectors. For more info, see the docs:\n"
|
|
|
|
"https://spacy.io/usage/models")
|
|
|
|
E011 = ("Unknown operator: '{op}'. Options: {opts}")
|
|
|
|
E012 = ("Cannot add pattern for zero tokens to matcher.\nKey: {key}")
|
|
|
|
E013 = ("Error selecting action in matcher")
|
2019-09-18 19:37:17 +00:00
|
|
|
E014 = ("Unknown tag ID: {tag}")
|
2018-04-03 13:50:31 +00:00
|
|
|
E015 = ("Conflicting morphology exception for ({tag}, {orth}). Use "
|
|
|
|
"`force=True` to overwrite.")
|
|
|
|
E016 = ("MultitaskObjective target should be function or one of: dep, "
|
|
|
|
"tag, ent, dep_tag_offset, ent_tag.")
|
|
|
|
E017 = ("Can only add unicode or bytes. Got type: {value_type}")
|
2019-08-20 14:03:45 +00:00
|
|
|
E018 = ("Can't retrieve string for hash '{hash_value}'. This usually "
|
|
|
|
"refers to an issue with the `Vocab` or `StringStore`.")
|
2018-04-03 13:50:31 +00:00
|
|
|
E019 = ("Can't create transition with unknown action ID: {action}. Action "
|
|
|
|
"IDs are enumerated in spacy/syntax/{src}.pyx.")
|
|
|
|
E020 = ("Could not find a gold-standard action to supervise the "
|
|
|
|
"dependency parser. The tree is non-projective (i.e. it has "
|
|
|
|
"crossing arcs - see spacy/syntax/nonproj.pyx for definitions). "
|
|
|
|
"The ArcEager transition system only supports projective trees. "
|
|
|
|
"To learn non-projective representations, transform the data "
|
|
|
|
"before training and after parsing. Either pass "
|
|
|
|
"`make_projective=True` to the GoldParse class, or use "
|
|
|
|
"spacy.syntax.nonproj.preprocess_training_data.")
|
|
|
|
E021 = ("Could not find a gold-standard action to supervise the "
|
|
|
|
"dependency parser. The GoldParse was projective. The transition "
|
|
|
|
"system has {n_actions} actions. State at failure: {state}")
|
|
|
|
E022 = ("Could not find a transition with the name '{name}' in the NER "
|
|
|
|
"model.")
|
|
|
|
E023 = ("Error cleaning up beam: The same state occurred twice at "
|
|
|
|
"memory address {addr} and position {i}.")
|
|
|
|
E024 = ("Could not find an optimal move to supervise the parser. Usually, "
|
2019-06-01 12:37:27 +00:00
|
|
|
"this means that the model can't be updated in a way that's valid "
|
|
|
|
"and satisfies the correct annotations specified in the GoldParse. "
|
|
|
|
"For example, are all labels added to the model? If you're "
|
|
|
|
"training a named entity recognizer, also make sure that none of "
|
|
|
|
"your annotated entity spans have leading or trailing whitespace. "
|
|
|
|
"You can also use the experimental `debug-data` command to "
|
|
|
|
"validate your JSON-formatted training data. For details, run:\n"
|
|
|
|
"python -m spacy debug-data --help")
|
2018-04-03 13:50:31 +00:00
|
|
|
E025 = ("String is too long: {length} characters. Max is 2**30.")
|
|
|
|
E026 = ("Error accessing token at position {i}: out of bounds in Doc of "
|
|
|
|
"length {length}.")
|
|
|
|
E027 = ("Arguments 'words' and 'spaces' should be sequences of the same "
|
|
|
|
"length, or 'spaces' should be left default at None. spaces "
|
|
|
|
"should be a sequence of booleans, with True meaning that the "
|
|
|
|
"word owns a ' ' character following it.")
|
|
|
|
E028 = ("orths_and_spaces expects either a list of unicode string or a "
|
|
|
|
"list of (unicode, bool) tuples. Got bytes instance: {value}")
|
|
|
|
E029 = ("noun_chunks requires the dependency parse, which requires a "
|
|
|
|
"statistical model to be installed and loaded. For more info, see "
|
|
|
|
"the documentation:\nhttps://spacy.io/usage/models")
|
|
|
|
E030 = ("Sentence boundaries unset. You can add the 'sentencizer' "
|
|
|
|
"component to the pipeline with: "
|
|
|
|
"nlp.add_pipe(nlp.create_pipe('sentencizer')) "
|
|
|
|
"Alternatively, add the dependency parser, or set sentence "
|
|
|
|
"boundaries by setting doc[i].is_sent_start.")
|
|
|
|
E031 = ("Invalid token: empty string ('') at position {i}.")
|
|
|
|
E032 = ("Conflicting attributes specified in doc.from_array(): "
|
|
|
|
"(HEAD, SENT_START). The HEAD attribute currently sets sentence "
|
|
|
|
"boundaries implicitly, based on the tree structure. This means "
|
|
|
|
"the HEAD attribute would potentially override the sentence "
|
|
|
|
"boundaries set by SENT_START.")
|
|
|
|
E033 = ("Cannot load into non-empty Doc of length {length}.")
|
|
|
|
E034 = ("Doc.merge received {n_args} non-keyword arguments. Expected "
|
|
|
|
"either 3 arguments (deprecated), or 0 (use keyword arguments).\n"
|
|
|
|
"Arguments supplied:\n{args}\nKeyword arguments:{kwargs}")
|
|
|
|
E035 = ("Error creating span with start {start} and end {end} for Doc of "
|
|
|
|
"length {length}.")
|
|
|
|
E036 = ("Error calculating span: Can't find a token starting at character "
|
|
|
|
"offset {start}.")
|
|
|
|
E037 = ("Error calculating span: Can't find a token ending at character "
|
|
|
|
"offset {end}.")
|
|
|
|
E038 = ("Error finding sentence for span. Infinite loop detected.")
|
|
|
|
E039 = ("Array bounds exceeded while searching for root word. This likely "
|
|
|
|
"means the parse tree is in an invalid state. Please report this "
|
|
|
|
"issue here: http://github.com/explosion/spaCy/issues")
|
|
|
|
E040 = ("Attempt to access token at {i}, max length {max_length}.")
|
|
|
|
E041 = ("Invalid comparison operator: {op}. Likely a Cython bug?")
|
|
|
|
E042 = ("Error accessing doc[{i}].nbor({j}), for doc of length {length}.")
|
|
|
|
E043 = ("Refusing to write to token.sent_start if its document is parsed, "
|
|
|
|
"because this may cause inconsistent state.")
|
|
|
|
E044 = ("Invalid value for token.sent_start: {value}. Must be one of: "
|
|
|
|
"None, True, False")
|
|
|
|
E045 = ("Possibly infinite loop encountered while looking for {attr}.")
|
|
|
|
E046 = ("Can't retrieve unregistered extension attribute '{name}'. Did "
|
|
|
|
"you forget to call the `set_extension` method?")
|
|
|
|
E047 = ("Can't assign a value to unregistered extension attribute "
|
|
|
|
"'{name}'. Did you forget to call the `set_extension` method?")
|
2019-02-13 15:52:25 +00:00
|
|
|
E048 = ("Can't import language {lang} from spacy.lang: {err}")
|
2018-04-03 13:50:31 +00:00
|
|
|
E049 = ("Can't find spaCy data directory: '{path}'. Check your "
|
|
|
|
"installation and permissions, or use spacy.util.set_data_path "
|
|
|
|
"to customise the location if necessary.")
|
|
|
|
E050 = ("Can't find model '{name}'. It doesn't seem to be a shortcut "
|
|
|
|
"link, a Python package or a valid path to a data directory.")
|
|
|
|
E051 = ("Cant' load '{name}'. If you're using a shortcut link, make sure "
|
|
|
|
"it points to a valid package (not just a data directory).")
|
|
|
|
E052 = ("Can't find model directory: {path}")
|
|
|
|
E053 = ("Could not read meta.json from {path}")
|
|
|
|
E054 = ("No valid '{setting}' setting found in model meta.json.")
|
|
|
|
E055 = ("Invalid ORTH value in exception:\nKey: {key}\nOrths: {orths}")
|
|
|
|
E056 = ("Invalid tokenizer exception: ORTH values combined don't match "
|
|
|
|
"original string.\nKey: {key}\nOrths: {orths}")
|
|
|
|
E057 = ("Stepped slices not supported in Span objects. Try: "
|
|
|
|
"list(tokens)[start:stop:step] instead.")
|
|
|
|
E058 = ("Could not retrieve vector for key {key}.")
|
|
|
|
E059 = ("One (and only one) keyword arg must be set. Got: {kwargs}")
|
|
|
|
E060 = ("Cannot add new key to vectors: the table is full. Current shape: "
|
|
|
|
"({rows}, {cols}).")
|
|
|
|
E061 = ("Bad file name: {filename}. Example of a valid file name: "
|
|
|
|
"'vectors.128.f.bin'")
|
|
|
|
E062 = ("Cannot find empty bit for new lexical flag. All bits between 0 "
|
|
|
|
"and 63 are occupied. You can replace one by specifying the "
|
|
|
|
"`flag_id` explicitly, e.g. "
|
|
|
|
"`nlp.vocab.add_flag(your_func, flag_id=IS_ALPHA`.")
|
|
|
|
E063 = ("Invalid value for flag_id: {value}. Flag IDs must be between 1 "
|
|
|
|
"and 63 (inclusive).")
|
|
|
|
E064 = ("Error fetching a Lexeme from the Vocab. When looking up a "
|
|
|
|
"string, the lexeme returned had an orth ID that did not match "
|
|
|
|
"the query string. This means that the cached lexeme structs are "
|
|
|
|
"mismatched to the string encoding table. The mismatched:\n"
|
|
|
|
"Query string: {string}\nOrth cached: {orth}\nOrth ID: {orth_id}")
|
|
|
|
E065 = ("Only one of the vector table's width and shape can be specified. "
|
|
|
|
"Got width {width} and shape {shape}.")
|
|
|
|
E066 = ("Error creating model helper for extracting columns. Can only "
|
|
|
|
"extract columns by positive integer. Got: {value}.")
|
|
|
|
E067 = ("Invalid BILUO tag sequence: Got a tag starting with 'I' (inside "
|
|
|
|
"an entity) without a preceding 'B' (beginning of an entity). "
|
|
|
|
"Tag sequence:\n{tags}")
|
|
|
|
E068 = ("Invalid BILUO tag: '{tag}'.")
|
|
|
|
E069 = ("Invalid gold-standard parse tree. Found cycle between word "
|
2019-08-15 16:08:28 +00:00
|
|
|
"IDs: {cycle} (tokens: {cycle_tokens}) in the document starting "
|
|
|
|
"with tokens: {doc_tokens}.")
|
2018-04-03 13:50:31 +00:00
|
|
|
E070 = ("Invalid gold-standard data. Number of documents ({n_docs}) "
|
|
|
|
"does not align with number of annotations ({n_annots}).")
|
|
|
|
E071 = ("Error creating lexeme: specified orth ID ({orth}) does not "
|
|
|
|
"match the one in the vocab ({vocab_orth}).")
|
|
|
|
E072 = ("Error serializing lexeme: expected data length {length}, "
|
|
|
|
"got {bad_length}.")
|
|
|
|
E073 = ("Cannot assign vector of length {new_length}. Existing vectors "
|
|
|
|
"are of length {length}. You can use `vocab.reset_vectors` to "
|
|
|
|
"clear the existing vectors and resize the table.")
|
|
|
|
E074 = ("Error interpreting compiled match pattern: patterns are expected "
|
|
|
|
"to end with the attribute {attr}. Got: {bad_attr}.")
|
|
|
|
E075 = ("Error accepting match: length ({length}) > maximum length "
|
|
|
|
"({max_len}).")
|
|
|
|
E076 = ("Error setting tensor on Doc: tensor has {rows} rows, while Doc "
|
|
|
|
"has {words} words.")
|
|
|
|
E077 = ("Error computing {value}: number of Docs ({n_docs}) does not "
|
|
|
|
"equal number of GoldParse objects ({n_golds}) in batch.")
|
|
|
|
E078 = ("Error computing score: number of words in Doc ({words_doc}) does "
|
|
|
|
"not equal number of words in GoldParse ({words_gold}).")
|
|
|
|
E079 = ("Error computing states in beam: number of predicted beams "
|
|
|
|
"({pbeams}) does not equal number of gold beams ({gbeams}).")
|
|
|
|
E080 = ("Duplicate state found in beam: {key}.")
|
|
|
|
E081 = ("Error getting gradient in beam: number of histories ({n_hist}) "
|
|
|
|
"does not equal number of losses ({losses}).")
|
|
|
|
E082 = ("Error deprojectivizing parse: number of heads ({n_heads}), "
|
|
|
|
"projective heads ({n_proj_heads}) and labels ({n_labels}) do not "
|
|
|
|
"match.")
|
2018-04-03 16:30:17 +00:00
|
|
|
E083 = ("Error setting extension: only one of `default`, `method`, or "
|
|
|
|
"`getter` (plus optional `setter`) is allowed. Got: {nr_defined}")
|
2018-04-03 13:50:31 +00:00
|
|
|
E084 = ("Error assigning label ID {label} to span: not in StringStore.")
|
|
|
|
E085 = ("Can't create lexeme for string '{string}'.")
|
|
|
|
E086 = ("Error deserializing lexeme '{string}': orth ID {orth_id} does "
|
|
|
|
"not match hash {hash_id} in StringStore.")
|
|
|
|
E087 = ("Unknown displaCy style: {style}.")
|
|
|
|
E088 = ("Text of length {length} exceeds maximum of {max_length}. The "
|
|
|
|
"v2.x parser and NER models require roughly 1GB of temporary "
|
|
|
|
"memory per 100,000 characters in the input. This means long "
|
|
|
|
"texts may cause memory allocation errors. If you're not using "
|
|
|
|
"the parser or NER, it's probably safe to increase the "
|
|
|
|
"`nlp.max_length` limit. The limit is in number of characters, so "
|
|
|
|
"you can check whether your inputs are too long by checking "
|
|
|
|
"`len(text)`.")
|
2018-04-03 16:30:17 +00:00
|
|
|
E089 = ("Extensions can't have a setter argument without a getter "
|
|
|
|
"argument. Check the keyword arguments on `set_extension`.")
|
|
|
|
E090 = ("Extension '{name}' already exists on {obj}. To overwrite the "
|
|
|
|
"existing extension, set `force=True` on `{obj}.set_extension`.")
|
|
|
|
E091 = ("Invalid extension attribute {name}: expected callable or None, "
|
|
|
|
"but got: {value}")
|
2018-04-03 19:40:29 +00:00
|
|
|
E092 = ("Could not find or assign name for word vectors. Ususally, the "
|
|
|
|
"name is read from the model's meta.json in vector.name. "
|
|
|
|
"Alternatively, it is built from the 'lang' and 'name' keys in "
|
|
|
|
"the meta.json. Vector names are required to avoid issue #1660.")
|
|
|
|
E093 = ("token.ent_iob values make invalid sequence: I without B\n{seq}")
|
2018-04-10 19:26:37 +00:00
|
|
|
E094 = ("Error reading line {line_num} in vectors file {loc}.")
|
2018-05-20 13:13:37 +00:00
|
|
|
E095 = ("Can't write to frozen dictionary. This is likely an internal "
|
|
|
|
"error. Are you writing to a default function argument?")
|
2018-06-25 12:55:16 +00:00
|
|
|
E096 = ("Invalid object passed to displaCy: Can only visualize Doc or "
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
"Span objects, or dicts if set to manual=True.")
|
2018-07-18 17:43:16 +00:00
|
|
|
E097 = ("Invalid pattern: expected token pattern (list of dicts) or "
|
|
|
|
"phrase pattern (string) but got:\n{pattern}")
|
2018-10-29 22:21:39 +00:00
|
|
|
E098 = ("Invalid pattern specified: expected both SPEC and PATTERN.")
|
|
|
|
E099 = ("First node of pattern should be a root node. The root should "
|
|
|
|
"only contain NODE_NAME.")
|
|
|
|
E100 = ("Nodes apart from the root should contain NODE_NAME, NBOR_NAME and "
|
|
|
|
"NBOR_RELOP.")
|
|
|
|
E101 = ("NODE_NAME should be a new node and NBOR_NAME should already have "
|
|
|
|
"have been declared in previous edges.")
|
2019-02-24 14:11:28 +00:00
|
|
|
E102 = ("Can't merge non-disjoint spans. '{token}' is already part of "
|
2019-10-01 19:59:50 +00:00
|
|
|
"tokens to merge. If you want to find the longest non-overlapping "
|
|
|
|
"spans, you can use the util.filter_spans helper:\n"
|
|
|
|
"https://spacy.io/api/top-level#util.filter_spans")
|
2019-08-20 14:03:45 +00:00
|
|
|
E103 = ("Trying to set conflicting doc.ents: '{span1}' and '{span2}'. A "
|
|
|
|
"token can only be part of one entity, so make sure the entities "
|
|
|
|
"you're setting don't overlap.")
|
2018-11-30 19:16:14 +00:00
|
|
|
E104 = ("Can't find JSON schema for '{name}'.")
|
|
|
|
E105 = ("The Doc.print_tree() method is now deprecated. Please use "
|
2019-02-08 17:09:23 +00:00
|
|
|
"Doc.to_json() instead or write your own function.")
|
2018-11-30 19:16:14 +00:00
|
|
|
E106 = ("Can't find doc._.{attr} attribute specified in the underscore "
|
|
|
|
"settings: {opts}")
|
|
|
|
E107 = ("Value of doc._.{attr} is not JSON-serializable: {value}")
|
2018-11-30 20:22:40 +00:00
|
|
|
E108 = ("As of spaCy v2.1, the pipe name `sbd` has been deprecated "
|
|
|
|
"in favor of the pipe name `sentencizer`, which does the same "
|
|
|
|
"thing. For example, use `nlp.create_pipeline('sentencizer')`")
|
2019-08-20 14:03:45 +00:00
|
|
|
E109 = ("Model for component '{name}' not initialized. Did you forget to "
|
|
|
|
"load a model, or forget to call begin_training()?")
|
2018-12-20 16:32:04 +00:00
|
|
|
E110 = ("Invalid displaCy render wrapper. Expected callable, got: {obj}")
|
2019-02-13 10:27:04 +00:00
|
|
|
E111 = ("Pickling a token is not supported, because tokens are only views "
|
|
|
|
"of the parent Doc and can't exist on their own. A pickled token "
|
|
|
|
"would always have to include its Doc and Vocab, which has "
|
|
|
|
"practically no advantage over pickling the parent Doc directly. "
|
|
|
|
"So instead of pickling the token, pickle the Doc it belongs to.")
|
2019-02-13 12:22:05 +00:00
|
|
|
E112 = ("Pickling a span is not supported, because spans are only views "
|
|
|
|
"of the parent Doc and can't exist on their own. A pickled span "
|
|
|
|
"would always have to include its Doc and Vocab, which has "
|
|
|
|
"practically no advantage over pickling the parent Doc directly. "
|
|
|
|
"So instead of pickling the span, pickle the Doc it belongs to or "
|
|
|
|
"use Span.as_doc to convert the span to a standalone Doc object.")
|
2019-02-14 14:35:20 +00:00
|
|
|
E113 = ("The newly split token can only have one root (head = 0).")
|
2019-02-24 14:11:28 +00:00
|
|
|
E114 = ("The newly split token needs to have a root (head = 0).")
|
|
|
|
E115 = ("All subtokens must have associated heads.")
|
2019-10-02 08:37:39 +00:00
|
|
|
E116 = ("Cannot currently add labels to pretrained text classifier. Add "
|
2019-02-14 19:03:19 +00:00
|
|
|
"labels before training begins. This functionality was available "
|
|
|
|
"in previous versions, but had significant bugs that led to poor "
|
2019-02-24 14:11:28 +00:00
|
|
|
"performance.")
|
2019-02-15 16:32:31 +00:00
|
|
|
E117 = ("The newly split tokens must match the text of the original token. "
|
2019-02-17 11:22:07 +00:00
|
|
|
"New orths: {new}. Old text: {old}.")
|
2019-02-24 17:38:47 +00:00
|
|
|
E118 = ("The custom extension attribute '{attr}' is not registered on the "
|
|
|
|
"Token object so it can't be set during retokenization. To "
|
|
|
|
"register an attribute, use the Token.set_extension classmethod.")
|
2019-08-20 14:03:45 +00:00
|
|
|
E119 = ("Can't set custom extension attribute '{attr}' during "
|
|
|
|
"retokenization because it's not writable. This usually means it "
|
|
|
|
"was registered with a getter function (and no setter) or as a "
|
|
|
|
"method extension, so the value is computed dynamically. To "
|
|
|
|
"overwrite a custom attribute manually, it should be registered "
|
|
|
|
"with a default value or with a getter AND setter.")
|
2019-02-24 17:38:47 +00:00
|
|
|
E120 = ("Can't set custom extension attributes during retokenization. "
|
|
|
|
"Expected dict mapping attribute names to values, but got: {value}")
|
2019-03-08 10:42:26 +00:00
|
|
|
E121 = ("Can't bulk merge spans. Attribute length {attr_len} should be "
|
|
|
|
"equal to span length ({span_len}).")
|
|
|
|
E122 = ("Cannot find token to be split. Did it get merged?")
|
|
|
|
E123 = ("Cannot find head of token to be split. Did it get merged?")
|
2019-03-08 22:15:23 +00:00
|
|
|
E124 = ("Cannot read from file: {path}. Supported formats: {formats}")
|
2019-03-08 10:42:26 +00:00
|
|
|
E125 = ("Unexpected value: {value}")
|
|
|
|
E126 = ("Unexpected matcher predicate: '{bad}'. Expected one of: {good}. "
|
|
|
|
"This is likely a bug in spaCy, so feel free to open an issue.")
|
|
|
|
E127 = ("Cannot create phrase pattern representation for length 0. This "
|
|
|
|
"is likely a bug in spaCy.")
|
2019-03-10 18:16:45 +00:00
|
|
|
E128 = ("Unsupported serialization argument: '{arg}'. The use of keyword "
|
|
|
|
"arguments to exclude fields from being serialized or deserialized "
|
|
|
|
"is now deprecated. Please use the `exclude` argument instead. "
|
|
|
|
"For example: exclude=['{arg}'].")
|
2019-03-14 23:46:45 +00:00
|
|
|
E129 = ("Cannot write the label of an existing Span object because a Span "
|
2019-08-20 14:03:45 +00:00
|
|
|
"is a read-only view of the underlying Token objects stored in the "
|
|
|
|
"Doc. Instead, create a new Span object and specify the `label` "
|
|
|
|
"keyword argument, for example:\nfrom spacy.tokens import Span\n"
|
2019-03-14 23:46:45 +00:00
|
|
|
"span = Span(doc, start={start}, end={end}, label='{label}')")
|
2019-03-20 08:55:45 +00:00
|
|
|
E130 = ("You are running a narrow unicode build, which is incompatible "
|
|
|
|
"with spacy >= 2.1.0. To fix this, reinstall Python and use a wide "
|
|
|
|
"unicode build instead. You can also rebuild Python and set the "
|
|
|
|
"--enable-unicode=ucs4 flag.")
|
2019-03-22 11:05:35 +00:00
|
|
|
E131 = ("Cannot write the kb_id of an existing Span object because a Span "
|
2019-08-20 14:03:45 +00:00
|
|
|
"is a read-only view of the underlying Token objects stored in "
|
|
|
|
"the Doc. Instead, create a new Span object and specify the "
|
|
|
|
"`kb_id` keyword argument, for example:\nfrom spacy.tokens "
|
|
|
|
"import Span\nspan = Span(doc, start={start}, end={end}, "
|
|
|
|
"label='{label}', kb_id='{kb_id}')")
|
|
|
|
E132 = ("The vectors for entities and probabilities for alias '{alias}' "
|
|
|
|
"should have equal length, but found {entities_length} and "
|
|
|
|
"{probabilities_length} respectively.")
|
|
|
|
E133 = ("The sum of prior probabilities for alias '{alias}' should not "
|
|
|
|
"exceed 1, but found {sum}.")
|
2019-10-14 10:28:53 +00:00
|
|
|
E134 = ("Entity '{entity}' is not defined in the Knowledge Base.")
|
2019-05-14 14:59:31 +00:00
|
|
|
E135 = ("If you meant to replace a built-in component, use `create_pipe`: "
|
|
|
|
"`nlp.replace_pipe('{name}', nlp.create_pipe('{name}'))`")
|
2019-05-30 12:34:58 +00:00
|
|
|
E136 = ("This additional feature requires the jsonschema library to be "
|
|
|
|
"installed:\npip install jsonschema")
|
2019-08-20 14:03:45 +00:00
|
|
|
E137 = ("Expected 'dict' type, but got '{type}' from '{line}'. Make sure "
|
|
|
|
"to provide a valid JSON object as input with either the `text` "
|
|
|
|
"or `tokens` key. For more info, see the docs:\n"
|
2019-06-16 11:22:57 +00:00
|
|
|
"https://spacy.io/api/cli#pretrain-jsonl")
|
2019-08-20 14:03:45 +00:00
|
|
|
E138 = ("Invalid JSONL format for raw text '{text}'. Make sure the input "
|
|
|
|
"includes either the `text` or `tokens` key. For more info, see "
|
|
|
|
"the docs:\nhttps://spacy.io/api/cli#pretrain-jsonl")
|
2019-10-14 10:28:53 +00:00
|
|
|
E139 = ("Knowledge Base for component '{name}' not initialized. Did you "
|
2019-08-20 14:03:45 +00:00
|
|
|
"forget to call set_kb()?")
|
|
|
|
E140 = ("The list of entities, prior probabilities and entity vectors "
|
|
|
|
"should be of equal length.")
|
|
|
|
E141 = ("Entity vectors should be of length {required} instead of the "
|
|
|
|
"provided {found}.")
|
|
|
|
E142 = ("Unsupported loss_function '{loss_func}'. Use either 'L2' or "
|
|
|
|
"'cosine'.")
|
|
|
|
E143 = ("Labels for component '{name}' not initialized. Did you forget to "
|
|
|
|
"call add_label()?")
|
|
|
|
E144 = ("Could not find parameter `{param}` when building the entity "
|
|
|
|
"linker model.")
|
2019-07-22 12:36:07 +00:00
|
|
|
E145 = ("Error reading `{param}` from input file.")
|
2019-07-22 12:56:13 +00:00
|
|
|
E146 = ("Could not access `{path}`.")
|
2019-08-20 14:03:45 +00:00
|
|
|
E147 = ("Unexpected error in the {method} functionality of the "
|
|
|
|
"EntityLinker: {msg}. This is likely a bug in spaCy, so feel free "
|
|
|
|
"to open an issue.")
|
|
|
|
E148 = ("Expected {ents} KB identifiers but got {ids}. Make sure that "
|
|
|
|
"each entity in `doc.ents` is assigned to a KB identifier.")
|
|
|
|
E149 = ("Error deserializing model. Check that the config used to create "
|
|
|
|
"the component matches the model being loaded.")
|
|
|
|
E150 = ("The language of the `nlp` object and the `vocab` should be the "
|
|
|
|
"same, but found '{nlp}' and '{vocab}' respectively.")
|
2019-08-06 09:01:25 +00:00
|
|
|
E151 = ("Trying to call nlp.update without required annotation types. "
|
2019-08-20 15:36:34 +00:00
|
|
|
"Expected top-level keys: {exp}. Got: {unexp}.")
|
2019-08-21 12:00:37 +00:00
|
|
|
E152 = ("The attribute {attr} is not supported for token patterns. "
|
|
|
|
"Please use the option validate=True with Matcher, PhraseMatcher, "
|
|
|
|
"or EntityRuler for more details.")
|
|
|
|
E153 = ("The value type {vtype} is not supported for token patterns. "
|
|
|
|
"Please use the option validate=True with Matcher, PhraseMatcher, "
|
|
|
|
"or EntityRuler for more details.")
|
|
|
|
E154 = ("One of the attributes or values is not supported for token "
|
|
|
|
"patterns. Please use the option validate=True with Matcher, "
|
|
|
|
"PhraseMatcher, or EntityRuler for more details.")
|
|
|
|
E155 = ("The pipeline needs to include a tagger in order to use "
|
2019-08-21 18:52:36 +00:00
|
|
|
"Matcher or PhraseMatcher with the attributes POS, TAG, or LEMMA. "
|
|
|
|
"Try using nlp() instead of nlp.make_doc() or list(nlp.pipe()) "
|
|
|
|
"instead of list(nlp.tokenizer.pipe()).")
|
2019-08-21 12:00:37 +00:00
|
|
|
E156 = ("The pipeline needs to include a parser in order to use "
|
2019-08-21 18:52:36 +00:00
|
|
|
"Matcher or PhraseMatcher with the attribute DEP. Try using "
|
2019-08-21 12:00:37 +00:00
|
|
|
"nlp() instead of nlp.make_doc() or list(nlp.pipe()) instead of "
|
|
|
|
"list(nlp.tokenizer.pipe()).")
|
|
|
|
E157 = ("Can't render negative values for dependency arc start or end. "
|
2019-08-20 13:51:37 +00:00
|
|
|
"Make sure that you're passing in absolute token indices, not "
|
|
|
|
"relative token offsets.\nstart: {start}, end: {end}, label: "
|
|
|
|
"{label}, direction: {dir}")
|
2019-09-09 17:17:55 +00:00
|
|
|
E158 = ("Can't add table '{name}' to lookups because it already exists.")
|
|
|
|
E159 = ("Can't find table '{name}' in lookups. Available tables: {tables}")
|
|
|
|
E160 = ("Can't find language data file: {path}")
|
2019-09-13 14:30:05 +00:00
|
|
|
E161 = ("Found an internal inconsistency when predicting entity links. "
|
|
|
|
"This is likely a bug in spaCy, so feel free to open an issue.")
|
2019-09-15 20:31:31 +00:00
|
|
|
E162 = ("Cannot evaluate textcat model on data with different labels.\n"
|
|
|
|
"Labels in model: {model_labels}\nLabels in evaluation "
|
|
|
|
"data: {eval_labels}")
|
|
|
|
E163 = ("cumsum was found to be unstable: its last element does not "
|
|
|
|
"correspond to sum")
|
|
|
|
E164 = ("x is neither increasing nor decreasing: {}.")
|
|
|
|
E165 = ("Only one class present in y_true. ROC AUC score is not defined in "
|
|
|
|
"that case.")
|
2019-09-18 18:23:21 +00:00
|
|
|
E166 = ("Can only merge DocBins with the same pre-defined attributes.\n"
|
|
|
|
"Current DocBin: {current}\nOther DocBin: {other}")
|
2019-09-21 12:37:06 +00:00
|
|
|
E167 = ("Unknown morphological feature: '{feat}' ({feat_id}). This can "
|
|
|
|
"happen if the tagger was trained with a different set of "
|
2019-10-02 08:37:39 +00:00
|
|
|
"morphological features. If you're using a pretrained model, make "
|
2019-09-21 12:37:06 +00:00
|
|
|
"sure that your models are up to date:\npython -m spacy validate")
|
|
|
|
E168 = ("Unknown field: {field}")
|
|
|
|
E169 = ("Can't find module: {module}")
|
|
|
|
E170 = ("Cannot apply transition {name}: invalid for the current state.")
|
2019-09-24 21:06:24 +00:00
|
|
|
E171 = ("Matcher.add received invalid on_match callback argument: expected "
|
|
|
|
"callable or None, but got: {arg_type}")
|
2019-10-01 19:36:04 +00:00
|
|
|
E172 = ("The Lemmatizer.load classmethod is deprecated. To create a "
|
|
|
|
"Lemmatizer, initialize the class directly. See the docs for "
|
|
|
|
"details: https://spacy.io/api/lemmatizer")
|
|
|
|
E173 = ("As of v2.2, the Lemmatizer is initialized with an instance of "
|
|
|
|
"Lookups containing the lemmatization tables. See the docs for "
|
|
|
|
"details: https://spacy.io/api/lemmatizer#init")
|
2019-10-08 10:25:23 +00:00
|
|
|
E174 = ("Architecture '{name}' not found in registry. Available "
|
|
|
|
"names: {names}")
|
2019-10-10 12:01:53 +00:00
|
|
|
E175 = ("Can't remove rule for unknown match pattern ID: {key}")
|
2019-10-14 10:28:53 +00:00
|
|
|
E176 = ("Alias '{alias}' is not defined in the Knowledge Base.")
|
2019-10-21 10:20:28 +00:00
|
|
|
E177 = ("Ill-formed IOB input detected: {tag}")
|
2019-10-25 20:21:08 +00:00
|
|
|
E178 = ("Invalid pattern. Expected list of dicts but got: {pat}. Maybe you "
|
|
|
|
"accidentally passed a single pattern to Matcher.add instead of a "
|
|
|
|
"list of patterns? If you only want to add one pattern, make sure "
|
|
|
|
"to wrap it in a list. For example: matcher.add('{key}', [pattern])")
|
|
|
|
E179 = ("Invalid pattern. Expected a list of Doc objects but got a single "
|
|
|
|
"Doc. If you only want to add one pattern, make sure to wrap it "
|
|
|
|
"in a list. For example: matcher.add('{key}', [doc])")
|
2019-10-27 12:35:49 +00:00
|
|
|
E180 = ("Span attributes can't be declared as required or assigned by "
|
|
|
|
"components, since spans are only views of the Doc. Use Doc and "
|
2019-10-30 16:19:36 +00:00
|
|
|
"Token attributes (or custom extension attributes) only and remove "
|
|
|
|
"the following: {attrs}")
|
2019-10-27 12:35:49 +00:00
|
|
|
E181 = ("Received invalid attributes for unkown object {obj}: {attrs}. "
|
|
|
|
"Only Doc and Token attributes are supported.")
|
|
|
|
E182 = ("Received invalid attribute declaration: {attr}\nDid you forget "
|
|
|
|
"to define the attribute? For example: {attr}.???")
|
|
|
|
E183 = ("Received invalid attribute declaration: {attr}\nOnly top-level "
|
|
|
|
"attributes are supported, for example: {solution}")
|
|
|
|
E184 = ("Only attributes without underscores are supported in component "
|
|
|
|
"attribute declarations (because underscore and non-underscore "
|
|
|
|
"attributes are connected anyways): {attr} -> {solution}")
|
|
|
|
E185 = ("Received invalid attribute in component attribute declaration: "
|
|
|
|
"{obj}.{attr}\nAttribute '{attr}' does not exist on {obj}.")
|
2019-10-28 11:36:23 +00:00
|
|
|
E186 = ("'{tok_a}' and '{tok_b}' are different texts.")
|
Generalize handling of tokenizer special cases (#4259)
* Generalize handling of tokenizer special cases
Handle tokenizer special cases more generally by using the Matcher
internally to match special cases after the affix/token_match
tokenization is complete.
Instead of only matching special cases while processing balanced or
nearly balanced prefixes and suffixes, this recognizes special cases in
a wider range of contexts:
* Allows arbitrary numbers of prefixes/affixes around special cases
* Allows special cases separated by infixes
Existing tests/settings that couldn't be preserved as before:
* The emoticon '")' is no longer a supported special case
* The emoticon ':)' in "example:)" is a false positive again
When merged with #4258 (or the relevant cache bugfix), the affix and
token_match properties should be modified to flush and reload all
special cases to use the updated internal tokenization with the Matcher.
* Remove accidentally added test case
* Really remove accidentally added test
* Reload special cases when necessary
Reload special cases when affixes or token_match are modified. Skip
reloading during initialization.
* Update error code number
* Fix offset and whitespace in Matcher special cases
* Fix offset bugs when merging and splitting tokens
* Set final whitespace on final token in inserted special case
* Improve cache flushing in tokenizer
* Separate cache and specials memory (temporarily)
* Flush cache when adding special cases
* Repeated `self._cache = PreshMap()` and `self._specials = PreshMap()`
are necessary due to this bug:
https://github.com/explosion/preshed/issues/21
* Remove reinitialized PreshMaps on cache flush
* Update UD bin scripts
* Update imports for `bin/`
* Add all currently supported languages
* Update subtok merger for new Matcher validation
* Modify blinded check to look at tokens instead of lemmas (for corpora
with tokens but not lemmas like Telugu)
* Use special Matcher only for cases with affixes
* Reinsert specials cache checks during normal tokenization for special
cases as much as possible
* Additionally include specials cache checks while splitting on infixes
* Since the special Matcher needs consistent affix-only tokenization
for the special cases themselves, introduce the argument
`with_special_cases` in order to do tokenization with or without
specials cache checks
* After normal tokenization, postprocess with special cases Matcher for
special cases containing affixes
* Replace PhraseMatcher with Aho-Corasick
Replace PhraseMatcher with the Aho-Corasick algorithm over numpy arrays
of the hash values for the relevant attribute. The implementation is
based on FlashText.
The speed should be similar to the previous PhraseMatcher. It is now
possible to easily remove match IDs and matches don't go missing with
large keyword lists / vocabularies.
Fixes #4308.
* Restore support for pickling
* Fix internal keyword add/remove for numpy arrays
* Add test for #4248, clean up test
* Improve efficiency of special cases handling
* Use PhraseMatcher instead of Matcher
* Improve efficiency of merging/splitting special cases in document
* Process merge/splits in one pass without repeated token shifting
* Merge in place if no splits
* Update error message number
* Remove UD script modifications
Only used for timing/testing, should be a separate PR
* Remove final traces of UD script modifications
* Update UD bin scripts
* Update imports for `bin/`
* Add all currently supported languages
* Update subtok merger for new Matcher validation
* Modify blinded check to look at tokens instead of lemmas (for corpora
with tokens but not lemmas like Telugu)
* Add missing loop for match ID set in search loop
* Remove cruft in matching loop for partial matches
There was a bit of unnecessary code left over from FlashText in the
matching loop to handle partial token matches, which we don't have with
PhraseMatcher.
* Replace dict trie with MapStruct trie
* Fix how match ID hash is stored/added
* Update fix for match ID vocab
* Switch from map_get_unless_missing to map_get
* Switch from numpy array to Token.get_struct_attr
Access token attributes directly in Doc instead of making a copy of the
relevant values in a numpy array.
Add unsatisfactory warning for hash collision with reserved terminal
hash key. (Ideally it would change the reserved terminal hash and redo
the whole trie, but for now, I'm hoping there won't be collisions.)
* Restructure imports to export find_matches
* Implement full remove()
Remove unnecessary trie paths and free unused maps.
Parallel to Matcher, raise KeyError when attempting to remove a match ID
that has not been added.
* Switch to PhraseMatcher.find_matches
* Switch to local cdef functions for span filtering
* Switch special case reload threshold to variable
Refer to variable instead of hard-coded threshold
* Move more of special case retokenize to cdef nogil
Move as much of the special case retokenization to nogil as possible.
* Rewrap sort as stdsort for OS X
* Rewrap stdsort with specific types
* Switch to qsort
* Fix merge
* Improve cmp functions
* Fix realloc
* Fix realloc again
* Initialize span struct while retokenizing
* Temporarily skip retokenizing
* Revert "Move more of special case retokenize to cdef nogil"
This reverts commit 0b7e52c797cd8ff1548f214bd4186ebb3a7ce8b1.
* Revert "Switch to qsort"
This reverts commit a98d71a942fc9bca531cf5eb05cf89fa88153b60.
* Fix specials check while caching
* Modify URL test with emoticons
The multiple suffix tests result in the emoticon `:>`, which is now
retokenized into one token as a special case after the suffixes are
split off.
* Refactor _apply_special_cases()
* Use cdef ints for span info used in multiple spots
* Modify _filter_special_spans() to prefer earlier
Parallel to #4414, modify _filter_special_spans() so that the earlier
span is preferred for overlapping spans of the same length.
* Replace MatchStruct with Entity
Replace MatchStruct with Entity since the existing Entity struct is
nearly identical.
* Replace Entity with more general SpanC
* Replace MatchStruct with SpanC
* Add error in debug-data if no dev docs are available (see #4575)
* Update azure-pipelines.yml
* Revert "Update azure-pipelines.yml"
This reverts commit ed1060cf59e5895b5fe92ad5b894fd1078ec4c49.
* Use latest wasabi
* Reorganise install_requires
* add dframcy to universe.json (#4580)
* Update universe.json [ci skip]
* Fix multiprocessing for as_tuples=True (#4582)
* Fix conllu script (#4579)
* force extensions to avoid clash between example scripts
* fix arg order and default file encoding
* add example config for conllu script
* newline
* move extension definitions to main function
* few more encodings fixes
* Add load_from_docbin example [ci skip]
TODO: upload the file somewhere
* Update README.md
* Add warnings about 3.8 (resolves #4593) [ci skip]
* Fixed typo: Added space between "recognize" and "various" (#4600)
* Fix DocBin.merge() example (#4599)
* Replace function registries with catalogue (#4584)
* Replace functions registries with catalogue
* Update __init__.py
* Fix test
* Revert unrelated flag [ci skip]
* Bugfix/dep matcher issue 4590 (#4601)
* add contributor agreement for prilopes
* add test for issue #4590
* fix on_match params for DependencyMacther (#4590)
* Minor updates to language example sentences (#4608)
* Add punctuation to Spanish example sentences
* Combine multilanguage examples for lang xx
* Add punctuation to nb examples
* Always realloc to a larger size
Avoid potential (unlikely) edge case and cymem error seen in #4604.
* Add error in debug-data if no dev docs are available (see #4575)
* Update debug-data for GoldCorpus / Example
* Ignore None label in misaligned NER data
2019-11-13 20:24:35 +00:00
|
|
|
E187 = ("Tokenizer special cases are not allowed to modify the text. "
|
|
|
|
"This would map '{chunk}' to '{orth}' given token attributes "
|
|
|
|
"'{token_attrs}'.")
|
2019-02-13 14:29:08 +00:00
|
|
|
|
2019-11-11 16:35:27 +00:00
|
|
|
# TODO: fix numbering after merging develop into master
|
|
|
|
E998 = ("Can only create GoldParse's from Example's without a Doc, "
|
|
|
|
"if get_gold_parses() is called with a Vocab object.")
|
|
|
|
E999 = ("Encountered an unexpected format for the dictionary holding "
|
|
|
|
"gold annotations: {gold_dict}")
|
|
|
|
|
2019-08-18 13:09:16 +00:00
|
|
|
|
2018-04-03 13:50:31 +00:00
|
|
|
@add_codes
|
|
|
|
class TempErrors(object):
|
2019-10-02 08:37:39 +00:00
|
|
|
T003 = ("Resizing pretrained Tagger models is not currently supported.")
|
2018-04-03 13:50:31 +00:00
|
|
|
T004 = ("Currently parser depth is hard-coded to 1. Received: {value}.")
|
|
|
|
T007 = ("Can't yet set {attr} from Span. Vote for this feature on the "
|
|
|
|
"issue tracker: http://github.com/explosion/spaCy/issues")
|
2018-04-03 19:40:29 +00:00
|
|
|
T008 = ("Bad configuration of Tagger. This is probably a bug within "
|
|
|
|
"spaCy. We changed the name of an internal attribute for loading "
|
2019-10-02 08:37:39 +00:00
|
|
|
"pretrained vectors, and the class has been passed the old name "
|
2018-04-03 19:40:29 +00:00
|
|
|
"(pretrained_dims) but not the new name (pretrained_vectors).")
|
2018-04-03 13:50:31 +00:00
|
|
|
|
|
|
|
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
# fmt: on
|
|
|
|
|
|
|
|
|
2019-02-12 14:47:26 +00:00
|
|
|
class MatchPatternError(ValueError):
|
|
|
|
def __init__(self, key, errors):
|
|
|
|
"""Custom error for validating match patterns.
|
|
|
|
|
|
|
|
key (unicode): The name of the matcher rule.
|
|
|
|
errors (dict): Validation errors (sequence of strings) mapped to pattern
|
|
|
|
ID, i.e. the index of the added pattern.
|
|
|
|
"""
|
|
|
|
msg = "Invalid token patterns for matcher rule '{}'\n".format(key)
|
|
|
|
for pattern_idx, error_msgs in errors.items():
|
|
|
|
pattern_errors = "\n".join(["- {}".format(e) for e in error_msgs])
|
|
|
|
msg += "\nPattern {}:\n{}\n".format(pattern_idx, pattern_errors)
|
|
|
|
ValueError.__init__(self, msg)
|
|
|
|
|
|
|
|
|
2019-10-28 11:36:23 +00:00
|
|
|
class AlignmentError(ValueError):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
2018-04-03 13:50:31 +00:00
|
|
|
class ModelsWarning(UserWarning):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
WARNINGS = {
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
"user": UserWarning,
|
|
|
|
"deprecation": DeprecationWarning,
|
|
|
|
"models": ModelsWarning,
|
2018-04-03 13:50:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
def _get_warn_types(arg):
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
if arg == "": # don't show any warnings
|
2018-04-03 13:50:31 +00:00
|
|
|
return []
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
if not arg or arg == "all": # show all available warnings
|
2018-04-03 13:50:31 +00:00
|
|
|
return WARNINGS.keys()
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
return [w_type.strip() for w_type in arg.split(",") if w_type.strip() in WARNINGS]
|
2018-04-03 13:50:31 +00:00
|
|
|
|
|
|
|
|
2018-05-20 23:22:38 +00:00
|
|
|
def _get_warn_excl(arg):
|
|
|
|
if not arg:
|
|
|
|
return []
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
return [w_id.strip() for w_id in arg.split(",")]
|
2018-05-20 23:22:38 +00:00
|
|
|
|
|
|
|
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
SPACY_WARNING_FILTER = os.environ.get("SPACY_WARNING_FILTER")
|
|
|
|
SPACY_WARNING_TYPES = _get_warn_types(os.environ.get("SPACY_WARNING_TYPES"))
|
|
|
|
SPACY_WARNING_IGNORE = _get_warn_excl(os.environ.get("SPACY_WARNING_IGNORE"))
|
2018-04-03 13:50:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
def user_warning(message):
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
_warn(message, "user")
|
2018-04-03 13:50:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
def deprecation_warning(message):
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
_warn(message, "deprecation")
|
2018-04-03 13:50:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
def models_warning(message):
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
_warn(message, "models")
|
2018-04-03 13:50:31 +00:00
|
|
|
|
|
|
|
|
💫 Tidy up and auto-format .py files (#2983)
<!--- Provide a general summary of your changes in the title. -->
## Description
- [x] Use [`black`](https://github.com/ambv/black) to auto-format all `.py` files.
- [x] Update flake8 config to exclude very large files (lemmatization tables etc.)
- [x] Update code to be compatible with flake8 rules
- [x] Fix various small bugs, inconsistencies and messy stuff in the language data
- [x] Update docs to explain new code style (`black`, `flake8`, when to use `# fmt: off` and `# fmt: on` and what `# noqa` means)
Once #2932 is merged, which auto-formats and tidies up the CLI, we'll be able to run `flake8 spacy` actually get meaningful results.
At the moment, the code style and linting isn't applied automatically, but I'm hoping that the new [GitHub Actions](https://github.com/features/actions) will let us auto-format pull requests and post comments with relevant linting information.
### Types of change
enhancement, code style
## Checklist
<!--- Before you submit the PR, go over this checklist and make sure you can
tick off all the boxes. [] -> [x] -->
- [x] I have submitted the spaCy Contributor Agreement.
- [x] I ran the tests, and all new and existing tests passed.
- [x] My changes don't require a change to the documentation, or if they do, I've added all required information.
2018-11-30 16:03:03 +00:00
|
|
|
def _warn(message, warn_type="user"):
|
2018-04-03 13:50:31 +00:00
|
|
|
"""
|
|
|
|
message (unicode): The message to display.
|
|
|
|
category (Warning): The Warning to show.
|
|
|
|
"""
|
2018-12-20 16:32:04 +00:00
|
|
|
if message.startswith("["):
|
|
|
|
w_id = message.split("[", 1)[1].split("]", 1)[0] # get ID from string
|
|
|
|
else:
|
|
|
|
w_id = None
|
|
|
|
ignore_warning = w_id and w_id in SPACY_WARNING_IGNORE
|
|
|
|
if warn_type in SPACY_WARNING_TYPES and not ignore_warning:
|
2018-04-03 13:50:31 +00:00
|
|
|
category = WARNINGS[warn_type]
|
|
|
|
stack = inspect.stack()[-1]
|
|
|
|
with warnings.catch_warnings():
|
2018-05-26 16:44:15 +00:00
|
|
|
if SPACY_WARNING_FILTER:
|
|
|
|
warnings.simplefilter(SPACY_WARNING_FILTER, category)
|
2018-04-03 13:50:31 +00:00
|
|
|
warnings.warn_explicit(message, category, stack[1], stack[2])
|