Fixed exception on context support in 2.2.25 (#837)

This commit is contained in:
Omri Mendels
2022-02-24 12:49:55 +02:00
committed by GitHub
parent 751641226b
commit 9e4b879c12
28 changed files with 96 additions and 29 deletions

View File

@@ -4,6 +4,7 @@ repos:
hooks:
- id: black
language_version: python3
exclude: **/tests/**
- repo: https://gitlab.com/pycqa/flake8
rev: 3.9.0
hooks:

View File

@@ -1,2 +1,2 @@
2.2.25
2.2.26

View File

@@ -81,16 +81,29 @@ class LemmaContextAwareEnhancer(ContextAwareEnhancer):
# Sanity
if nlp_artifacts is None:
logger.warning("[%s]. NLP artifacts were not provided", self.name)
logger.warning("NLP artifacts were not provided")
return results
for result in results:
# get recognizer matching the result
recognizer = recognizers_dict[
result.recognition_metadata[RecognizerResult.RECOGNIZER_NAME_KEY]
]
recognizer = None
# get recognizer matching the result, if found.
if (
result.recognition_metadata
and RecognizerResult.RECOGNIZER_NAME_KEY
in result.recognition_metadata.keys()
):
recognizer = recognizers_dict.get(
result.recognition_metadata[RecognizerResult.RECOGNIZER_NAME_KEY]
)
# skip recognizer result if the recognizer doen't support
if not recognizer:
logger.debug(
"Recognizer name not found as part of the "
"recognition_metadata dict in the RecognizerResult. "
)
continue
# skip recognizer result if the recognizer doesn't support
# context enhancement
if not recognizer.context:
logger.debug(

View File

@@ -43,13 +43,14 @@ class AbaRoutingRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "ABA_ROUTING_NUMBER",
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
):
self.replacement_pairs = replacement_pairs or [("-", "")]
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -46,7 +46,7 @@ class AuAbnRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "AU_ABN",
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
@@ -55,6 +55,7 @@ class AuAbnRecognizer(PatternRecognizer):
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
)
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -52,6 +52,7 @@ class AuAcnRecognizer(PatternRecognizer):
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
)
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -43,7 +43,7 @@ class AuMedicareRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "AU_MEDICARE",
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
@@ -52,6 +52,7 @@ class AuMedicareRecognizer(PatternRecognizer):
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
)
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -49,7 +49,7 @@ class AuTfnRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "AU_TFN",
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
@@ -58,6 +58,7 @@ class AuTfnRecognizer(PatternRecognizer):
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
)
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -51,6 +51,7 @@ class CreditCardRecognizer(PatternRecognizer):
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
)
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -25,11 +25,12 @@ class CryptoRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "CRYPTO",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -84,11 +84,12 @@ class DateRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "DATE_TIME",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -28,11 +28,12 @@ class EmailRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "EMAIL_ADDRESS",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -29,7 +29,7 @@ class EsNifRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "es",
supported_entity: str = "ES_NIF",
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
@@ -38,6 +38,7 @@ class EsNifRecognizer(PatternRecognizer):
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
)
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -56,7 +56,7 @@ class IbanRecognizer(PatternRecognizer):
def __init__(
self,
patterns: List[str] = None,
context: List[str] = CONTEXT,
context: List[str] = None,
supported_language: str = "en",
supported_entity: str = "IBAN_CODE",
exact_match: bool = False,
@@ -69,6 +69,7 @@ class IbanRecognizer(PatternRecognizer):
self.BOSEOS = bos_eos if exact_match else ()
self.flags = regex_flags
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -31,11 +31,12 @@ class IpRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "IP_ADDRESS",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -31,7 +31,7 @@ class MedicalLicenseRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "MEDICAL_LICENSE",
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
@@ -41,6 +41,7 @@ class MedicalLicenseRecognizer(PatternRecognizer):
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
)
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -26,12 +26,12 @@ class PhoneRecognizer(LocalRecognizer):
def __init__(
self,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
# For all regions, use phonenumbers.SUPPORTED_REGIONS
supported_regions=DEFAULT_SUPPORTED_REGIONS,
):
self.context = context
context = context if context else self.CONTEXT
self.supported_regions = supported_regions
super().__init__(
supported_entities=self.get_supported_entities(),

View File

@@ -27,11 +27,12 @@ class SgFinRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "SG_NRIC_FIN",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -34,7 +34,7 @@ class NhsRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "UK_NHS",
replacement_pairs: Optional[List[Tuple[str, str]]] = None,
@@ -43,6 +43,7 @@ class NhsRecognizer(PatternRecognizer):
replacement_pairs if replacement_pairs else [("-", ""), (" ", "")]
)
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -30,11 +30,12 @@ class UrlRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "URL",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -36,11 +36,12 @@ class UsBankRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "US_BANK_NUMBER",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -57,11 +57,12 @@ class UsLicenseRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "US_DRIVER_LICENSE",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
supported_language=supported_language,

View File

@@ -36,11 +36,12 @@ class UsItinRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "US_ITIN",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -22,11 +22,12 @@ class UsPassportRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "US_PASSPORT",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -37,11 +37,12 @@ class UsSsnRecognizer(PatternRecognizer):
def __init__(
self,
patterns: Optional[List[Pattern]] = None,
context: Optional[List[str]] = CONTEXT,
context: Optional[List[str]] = None,
supported_language: str = "en",
supported_entity: str = "US_SSN",
):
patterns = patterns if patterns else self.PATTERNS
context = context if context else self.CONTEXT
super().__init__(
supported_entity=supported_entity,
patterns=patterns,

View File

@@ -41,6 +41,13 @@ class RecognizerResult:
self.end = end
self.score = score
self.analysis_explanation = analysis_explanation
if not recognition_metadata:
self.logger.debug(
"recognition_metadata should be passed, "
"containing a recognizer_name value"
)
self.recognition_metadata = recognition_metadata
def append_analysis_explanation_text(self, text: str) -> None:

View File

@@ -2,7 +2,7 @@ from presidio_analyzer import RecognizerRegistry
from presidio_analyzer.predefined_recognizers import (
CreditCardRecognizer,
PhoneRecognizer,
UrlRecognizer
UrlRecognizer,
)

View File

@@ -1,3 +1,5 @@
from typing import List
import pytest
from presidio_analyzer import (
@@ -5,6 +7,8 @@ from presidio_analyzer import (
PatternRecognizer,
Pattern,
RecognizerRegistry,
EntityRecognizer,
RecognizerResult,
)
from presidio_analyzer.nlp_engine import (
NlpArtifacts,
@@ -633,3 +637,24 @@ def test_ad_hoc_when_no_other_recognizers_are_requested_returns_only_ad_hoc_resu
)
assert "ZIP" in [resp.entity_type for resp in responses]
def test_when_recognizer_doesnt_return_recognizer_name_no_exception(nlp_engine):
class MockRecognizer(EntityRecognizer):
def analyze(self, text: str, entities: List[str], nlp_artifacts: NlpArtifacts):
return [RecognizerResult("TEST", 50, 60, 0.5)]
mock_recognizer = MockRecognizer(supported_entities=["TEST"])
registry = RecognizerRegistry()
registry.add_recognizer(mock_recognizer)
analyzer_engine = AnalyzerEngine(nlp_engine=nlp_engine, registry=registry)
results = analyzer_engine.analyze("ABC", language="en")
assert len(results) == 1
assert results[0].entity_type == "TEST"
assert results[0].start == 50
assert results[0].end == 60
assert results[0].score == 0.5