class_docstr: Implements the *TextRank* algorithm defined by
  [[mihalcea04textrank]](https://derwen.ai/docs/ptr/biblio/#mihalcea04textrank),
  deployed as a `spaCy` pipeline component.
  
  This class does not get called directly; instantiate its factory
  instead.
      
class_docstr_tok: ["Implements","the","*","TextRank","*","algorithm","defined","by","[","[","mihalcea04textrank","]","]","(","https",":","\/\/derwen.ai\/docs\/ptr\/biblio\/","#","mihalcea04textrank",")",",","deployed","as","a","`","spaCy","`","pipeline","component",".","This","class","does","not","get","called","directly",";","instantiate","its","factory","instead","."]
docstr: Group the phrases by their text content, selecting the span with the
  maximum rank within each group, then collect the ranked phrases into
  an ordered list.
  
  Throws a `FutureWarning` warning if the configuration uses a
  deprecated approach for a scrubber function
  
      all_phrases:
  the raw phrase list
  
      returns:
  an ordered list of ranked phrases
  
          
code: def _get_min_phrases(
      self, all_phrases: typing.Dict[Span, float]
  ) -> typing.List[Phrase]:
      """
      Group the phrases by their text content, selecting the span with the
      maximum rank within each group, then collect the ranked phrases into
      an ordered list.
  
      Throws a `FutureWarning` warning if the configuration uses a
      deprecated approach for a scrubber function
  
          all_phrases:
      the raw phrase list
  
          returns:
      an ordered list of ranked phrases
  
      """
      try:
          data: typing.List[typing.Tuple[Span, float, Span]] = [
              (self.scrubber(span), rank, span)
              for span, rank in all_phrases.items()
          ]
      except AttributeError:
          raise FutureWarning(
              "Text-based scrubbers are deprecated. Use a `Span` instead."
          )
  
      keyfunc = lambda x: x[0]
      applyfunc = lambda g: list(
          (rank, spans) for text, rank, spans in g
      )
  
      phrases: typing.List[
          typing.Tuple[str, typing.List[typing.Tuple[float, Span]]]
      ] = groupby_apply(
          data,
          keyfunc,
          applyfunc,
      )
  
      phrase_list: typing.List[Phrase] = [
          Phrase(
              text=p[0],
              rank=max(rank for rank, span in p[1]),
              count=len(p[1]),
              chunks=list(span for rank, span in p[1]),
          )
          for p in phrases
      ]
  
      return phrase_list
  
imports: from collections import Counter, defaultdict, OrderedDict
  from dataclasses import dataclass
  import json
  import math
  import pathlib
  import time
  import typing
  from icecream import ic
  from spacy.tokens import Doc, Span, Token
  import graphviz
  import networkx
  from .util import groupby_apply, default_scrubber
label_desc: Use image node_id 12 for calling the BaseTextRank obj's underlying member method code with example usage: obj._get_min_phrases(all_phrases) and returns: phrase_list