text: from typing import List, Optional
  
  import tldextract
  
  from ..pattern import Pattern
  from ..pattern_recognizer import PatternRecognizer
  
  class EmailRecognizer(PatternRecognizer):
      """
      Recognize email addresses using regex.
  
      :param patterns: List of patterns to be used by this recognizer
      :param context: List of context words to increase confidence in detection
      :param supported_language: Language this recognizer supports
      :param supported_entity: The entity this recognizer can detect
      """
  
      PATTERNS = [
          Pattern(
              "Email (Medium)",
              r"\b((([!#$%&'*+\-/=?^_`{|}~\w])|([!#$%&'*+\-/=?^_`{|}~\w][!#$%&'*+\-/=?^_`{|}~\.\w]{0,}[!#$%&'*+\-/=?^_`{|}~\w]))[@]\w+([-.]\w+)*\.\w+([-.]\w+)*)\b",  # noqa: E501
              0.5,
          ),
      ]
  
      CONTEXT = ["email"]
  
      def __init__(
          self,
          patterns: Optional[List[Pattern]] = None,
          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,
              context=context,
              supported_language=supported_language,
          )
  
      def validate_result(self, pattern_text: str):  # noqa D102
          result = tldextract.extract(pattern_text)
          return result.fqdn != ""
  