Merge KeysΒΆ

Smoke tests:
>>> from techminer2.thesaurus.user import InitializeThesaurus
>>> (
...     InitializeThesaurus()
...     .with_thesaurus_file("demo.the.txt")
...     .with_field("raw_descriptors")
...     .where_root_directory("examples/fintech/")
...     .using_colored_output(False)
...     .run()
... )
INFO: Thesaurus initialized successfully.
  Success : True
  File    : examples/fintech/data/thesaurus/demo.the.txt
  Status  : 1721 keys found
  Header  :
    A_A_THEORY
      A_A_THEORY
    A_BASIC_RANDOM_SAMPLING_STRATEGY
      A_BASIC_RANDOM_SAMPLING_STRATEGY
    A_BEHAVIOURAL_PERSPECTIVE
      A_BEHAVIOURAL_PERSPECTIVE
    A_BETTER_UNDERSTANDING
      A_BETTER_UNDERSTANDING
    A_BLOCKCHAIN_IMPLEMENTATION_STUDY
      A_BLOCKCHAIN_IMPLEMENTATION_STUDY
    A_CASE_STUDY
      A_CASE_STUDY
    A_CHALLENGE
      A_CHALLENGE
    A_CLUSTER_ANALYSIS
      A_CLUSTER_ANALYSIS
>>> from techminer2.thesaurus.user import MergeKeys
>>> (
...     MergeKeys()
...     .with_thesaurus_file("demo.the.txt")
...     .having_patterns_matching(["FINTECH", "FINANCIAL_TECHNOLOGIES"])
...     .where_root_directory("examples/fintech/")
...     .using_colored_output(False)
...     .run()
... )
INFO: Thesaurus keys merged successfully.
  Success : True
  File    : examples/fintech/data/thesaurus/demo.the.txt
  Status  : 1 changed keys
  Header  :
    FINTECH
      FINANCIAL_TECHNOLOGIES; FINANCIAL_TECHNOLOGY; FINTECH; FINTECHS
    A_A_THEORY
      A_A_THEORY
    A_BASIC_RANDOM_SAMPLING_STRATEGY
      A_BASIC_RANDOM_SAMPLING_STRATEGY
    A_BEHAVIOURAL_PERSPECTIVE
      A_BEHAVIOURAL_PERSPECTIVE
    A_BETTER_UNDERSTANDING
      A_BETTER_UNDERSTANDING
    A_BLOCKCHAIN_IMPLEMENTATION_STUDY
      A_BLOCKCHAIN_IMPLEMENTATION_STUDY
    A_CASE_STUDY
      A_CASE_STUDY
    A_CHALLENGE
      A_CHALLENGE