class_docstr: Create a visualization of a semiotic square.  Requires Corpus to have
  at least three categories.
  >>> newsgroups_train = fetch_20newsgroups(subset='train',
  ...   remove=('headers', 'footers', 'quotes'))
  >>> vectorizer = CountVectorizer()
  >>> X = vectorizer.fit_transform(newsgroups_train.data)
  >>> corpus = st.CorpusFromScikit(
  ...         X=X,
  ...         y=newsgroups_train.target,
  ...         feature_vocabulary=vectorizer.vocabulary_,
  ...         category_names=newsgroups_train.target_names,
  ...         raw_texts=newsgroups_train.data
  ...         ).build()
  >>> semseq = SemioticSquare(corpus,
  ...         category_a = 'alt.atheism',
  ...         category_b = 'soc.religion.christian',
  ...         neutral_categories = ['talk.religion.misc']
  ... )
  >>> # A simple HTML table
  >>> html = SemioticSquareViz(semseq).to_html()
  >>> # The table with an interactive scatterplot below it
  >>> html = st.produce_semiotic_square_explorer(semiotic_square,
  ...                                            x_label='More Atheism, Less Xtnity',
  ...                                            y_label='General Religious Talk')
class_docstr_tok: ["Create","a","visualization","of","a","semiotic","square",".","Requires","Corpus","to","have","at","least","three","categories",".",">",">",">","newsgroups_train","=","fetch_20newsgroups","(","subset='train","'",",","...","remove=","(","'headers","'",",","'footers","'",",","'quotes","'",")",")",">",">",">","vectorizer","=","CountVectorizer","(",")",">",">",">","X","=","vectorizer.fit_transform","(","newsgroups_train.data",")",">",">",">","corpus","=","st.CorpusFromScikit","(","...","X=X",",","...","y=newsgroups_train.target",",","...","feature_vocabulary=vectorizer.vocabulary_",",","...","category_names=newsgroups_train.target_names",",","...","raw_texts=newsgroups_train.data","...",")",".build","(",")",">",">",">","semseq","=","SemioticSquare","(","corpus",",","...","category_a","=","'alt.atheism","'",",","...","category_b","=","'soc.religion.christian","'",",","...","neutral_categories","=","[","'talk.religion.misc","'","]","...",")",">",">",">","#","A","simple","HTML","table",">",">",">","html","=","SemioticSquareViz","(","semseq",")",".to_html","(",")",">",">",">","#","The","table","with","an","interactive","scatterplot","below","it",">",">",">","html","=","st.produce_semiotic_square_explorer","(","semiotic_square",",","...","x_label='More","Atheism",",","Less","Xtnity","'",",","...","y_label='General","Religious","Talk","'",")"]
code: def get_labels(self):
      a = self._get_default_a_label()
      b = self._get_default_b_label()
      default_labels = {
          "a": a,
          "not_a": "Not " + a,
          "b": b,
          "not_b": "Not " + b,
          "a_and_b": a + " + " + b,
          "not_a_and_not_b": "Not " + a + " + Not " + b,
          "a_and_not_b": a + " + Not " + b,
          "b_and_not_a": "Not " + a + " + " + b,
      }
      labels = self._labels
      if labels is None:
          labels = {}
      return {
          name + "_label": labels.get(name, default_labels[name])
          for name in default_labels
      }
  
imports: import numpy
  import pandas
  from scattertext.termranking import AbsoluteFrequencyRanker
  from scattertext.termscoring.RankDifference import RankDifference
label_desc: Use image node_id 5 for calling the SemioticSquare obj's underlying member method code with example usage: obj.get_labels() and returns: unknown