Skip to content

Commit

Permalink
warn when an unsupported/unknown key is given to the dependency matcher
Browse files Browse the repository at this point in the history
  • Loading branch information
svlandeg committed Aug 21, 2023
1 parent 198488e commit 1d0248d
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 0 deletions.
1 change: 1 addition & 0 deletions spacy/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ class Warnings(metaclass=ErrorsWithCodes):
W125 = ("The StaticVectors key_attr is no longer used. To set a custom "
"key attribute for vectors, configure it through Vectors(attr=) or "
"'spacy init vectors --attr'")
W126 = ("These keys are unsupported: {unsupported}")


class Errors(metaclass=ErrorsWithCodes):
Expand Down
8 changes: 8 additions & 0 deletions spacy/matcher/dependencymatcher.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,21 @@ cdef class DependencyMatcher:
else:
required_keys = {"RIGHT_ID", "RIGHT_ATTRS", "REL_OP", "LEFT_ID"}
relation_keys = set(relation.keys())
# Identify required keys that have not been specified
missing = required_keys - relation_keys
if missing:
missing_txt = ", ".join(list(missing))
raise ValueError(Errors.E100.format(
required=required_keys,
missing=missing_txt
))
# Identify additional, unsupported keys
unsupported = relation_keys - required_keys
if unsupported:
unsupported_txt = ", ".join(list(unsupported))
warnings.warn(Warnings.W126.format(
unsupported=unsupported_txt
))
if (
relation["RIGHT_ID"] in visited_nodes
or relation["LEFT_ID"] not in visited_nodes
Expand Down
5 changes: 5 additions & 0 deletions spacy/tests/matcher/test_dependency_matcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,11 @@ def test_dependency_matcher_pattern_validation(en_vocab):
pattern2 = copy.deepcopy(pattern)
pattern2[1]["RIGHT_ID"] = "fox"
matcher.add("FOUNDED", [pattern2])
# invalid key
with pytest.warns(UserWarning):
pattern2 = copy.deepcopy(pattern)
pattern2[1]["FOO"] = "BAR"
matcher.add("FOUNDED", [pattern2])


def test_dependency_matcher_callback(en_vocab, doc):
Expand Down

0 comments on commit 1d0248d

Please sign in to comment.