code: def get_change_point_candidates(
      self,
      embeddings: np.array,
      ordered_category_names: List[str],
  ) -> pd.DataFrame:
      category_index_df = (
          pd.DataFrame(
              {
                  "Category": self._get_string_categories(),
              }
          )
          .reset_index()
          .set_index("Category")
          .loc[[str(x) for x in ordered_category_names]]
          .assign(Order=lambda df: np.arange(len(df)))
      )
  
      mat = embeddings[:, category_index_df["index"].values]
  
      dists = []
      for i in range(mat.shape[1] - self.window_size):
          a = mat[
              :, list(range(max(0, i - self.window_size + 1), i + 1))
          ].mean(axis=1)
          b = mat[
              :,
              list(
                  range(
                      i + 1, max(i + 1 + self.window_size, mat.shape[1])
                  )
              ),
          ].mean(axis=1)
          distance = self.distance_measure(a, b)
          dists.append(distance)
  
      category_index_df = category_index_df.assign(
          Dist=dists + [0] * self.window_size,
      ).sort_values(by="Dist", ascending=True)
      return category_index_df
  
file_path: scattertext/scattertext/categorygrouping/characteristic_grouper.py
imports: from typing import List, Optional, Callable, Dict, Tuple
  import pandas
  import numpy
  from scipy.stats import spearmanr
  from tqdm.auto import tqdm
  from scattertext.TermDocMatrix import TermDocMatrix
  from scattertext.categorygrouping.characteristic_embedder_base import CategoryEmbedderABC
  from scattertext.categorygrouping.rank_embedder import RankEmbedder
label_desc: Use image node_id 7 for calling the CharacteristicGrouper obj's underlying member method code with example usage: obj.get_change_point_candidates(embeddings, ordered_category_names) and returns: category_index_df