class_docstr: Detect different variants of string categories (e.g. "mislabeled" vs "mis-labeled") in a categorical column.
  
  This check tests all the categorical columns within a dataset and search for variants of similar strings.
  Specifically, we define similarity between strings if they are equal when ignoring case and non-letter
  characters.
  Example:
  We have a column with similar strings 'OK' and 'ok.' which are variants of the same category. Knowing they both
  exist we can fix our data so it will have only one category.
  
  Parameters
  ----------
  columns : Union[Hashable, List[Hashable]] , default: None
      Columns to check, if none are given checks all columns except ignored ones.
  ignore_columns : Union[Hashable, List[Hashable]] , default: None
      Columns to ignore, if none given checks based on columns variable
  n_top_columns : int , optional
      amount of columns to show ordered by feature importance (date, index, label are first)
  aggregation_method: t.Optional[str], default: 'max'
      {feature_aggregation_method_argument:2*indent}
  n_samples : int , default: 1_000_000
      number of samples to use for this check.
  random_state : int, default: 42
      random seed for all check internals.
code: def __init__(
      self,
      columns: Union[Hashable, List[Hashable], None] = None,
      ignore_columns: Union[Hashable, List[Hashable], None] = None,
      n_top_columns: int = 10,
      aggregation_method: Optional[str] = "max",
      n_samples: int = 1_000_000,
      random_state: int = 42,
      **kwargs,
  ):
      super().__init__(**kwargs)
      self.columns = columns
      self.ignore_columns = ignore_columns
      self.n_top_columns = n_top_columns
      self.aggregation_method = aggregation_method
      self.n_samples = n_samples
      self.random_state = random_state
  
imports: import itertools
  from collections import defaultdict
  from typing import Dict, List, Optional, Union
  import pandas
  from deepchecks.core import CheckResult, ConditionCategory, ConditionResult
  from deepchecks.core.reduce_classes import ReduceFeatureMixin
  from deepchecks.tabular import Context, SingleDatasetCheck
  from deepchecks.tabular._shared_docs import docstrings
  from deepchecks.tabular.utils.feature_importance import N_TOP_MESSAGE, column_importance_sorter_df
  from deepchecks.tabular.utils.messages import get_condition_passed_message
  from deepchecks.utils.dataframes import select_from_dataframe
  from deepchecks.utils.strings import format_percent, get_base_form_to_variants_dict, is_string_column
  from deepchecks.utils.typing import Hashable
label_desc: Use image node_id 1 to create a new StringMismatch object from inherited base classes: SingleDatasetCheck, ReduceFeatureMixin with example: obj = StringMismatch(columns, ignore_columns, n_top_columns, aggregation_method, n_samples, random_state)