code: def without_extra_phrases(self):
          
          # the last parenthesis is optional, because sometimes they are truncated
          name = re.sub(r'\s*\([^)]*\)?\s*$', '', self.name)
          name = re.sub(r'(?i)\s* formerly.*$', '', name)
          name = re.sub(r'(?i)\s*and its affiliates$', '', name)
          name = re.sub(r'\bet al\b', '', name)
          
          # in some datasets, the name of an organization is followed by a hyphen and an abbreviated name, or a specific
          # department or geographic subdivision; we want to remove this extraneous stuff without breaking names like
          # Wal-Mart or Williams-Sonoma
  
          # if there's a hyphen at least four characters in, proceed
          if "-" in name:
              hyphen_parts = name.rsplit("-", 1)
              # if the part after the hyphen is shorter than the part before,
              # AND isn't either a number (often occurs in Union names) or a single letter (e.g., Tech-X),
              # AND the hyphen is preceded by either whitespace or at least four characters,
              # discard the hyphen and whatever follows
              if len(hyphen_parts[1]) < len(hyphen_parts[0]) and re.search(r'(\w{4,}|\s+)$', hyphen_parts[0]) and not re.match(r'^([a-zA-Z]|[0-9]+)$', hyphen_parts[1]):
                  name = hyphen_parts[0].strip()
  
          return name
docs: Removes parenthethical and dashed phrases