code: def _Soundex(self):
          
          t_word = remove_umlaut(self.word[0].lower()).upper() + remove_umlaut(self.word[1:]).lower()
  
          for w, val in zip(dict_dipth_SE.keys(), dict_dipth_SE.values()):
              t_word = t_word.replace(w, val)
  
          for w, val in zip(dict_SE.keys(), dict_SE.values()):
              t_word = t_word.replace(w, val)
  
          # Remove adjacent duplicate numbers
          t_word = re.sub(r"(\d)\1+", r"\1", t_word)
  
          # Strip remaining letters
          t_word = re.sub(r"[a-zæœ]+", "", t_word)
  
          return (t_word + "0" * 3)[:4]
docs: Soundex variant was based on the original American Soundex  developed by Russel
          and King, altered to better fit Middle High German morphology. The replacement
          rules were based on matching places and manners of articulation between the
          two languages (AE and MHG).
  
          Algorithm:
  
          -Normalize word and convert the first letter to uppercase
          -Remove other vowels
  
          Replacement Rules:
          - f,v,b,p,w -> 1 Labiodental fricatives [f,v] and bilabial plosives [p,b], approximant [w]
          - m,n,ng -> 2 Nasals
          - t,d,r,l,k,c,g,ch,s -> 3 [non-nasal velars/alveolars]
          - pf, ts, z, s -> 4  Affricates and alveolar fricatives
          - r,l -> 5 Liquids
          - j -> 6 Palatal Approximant
  
          -Remove double numbers
          -Remove remaining letters
          -Retain first 3 numbers (add 0 if less than 3)