docstr: Args:
      cluster_i:
      cluster_j:
  
  Returns:
      bool -> indicating whether to merge clusters (True) or not (False)
code: def run_sieve(self, cluster_i: Cluster, cluster_j: Cluster) -> bool:
      """
      Args:
          cluster_i:
          cluster_j:
  
      Returns:
          bool -> indicating whether to merge clusters (True) or not (False)
      """
      matches = 0
      for mention_i in cluster_i.mentions:
          for mention_j in cluster_j.mentions:
              match_result = (
                  self.relation_extractor.extract_sub_relations(
                      mention_i, mention_j, self.excepted_relation
                  )
              )
              if match_result == self.excepted_relation:
                  matches += 1
  
      possible_pairs_len = float(
          len(cluster_i.mentions) * len(cluster_j.mentions)
      )
      matches_rate = matches / possible_pairs_len
  
      result = False
      if matches_rate >= self.threshold:
          result = True
  
      return result
  
file_path: nlp-architect/nlp_architect/models/cross_doc_coref/system/sieves/sieves.py
imports: import logging
  from typing import Tuple
  from nlp_architect.common.cdc.cluster import Cluster
  from nlp_architect.data.cdc_resources.relations.relation_extraction import RelationExtraction
  from nlp_architect.data.cdc_resources.relations.relation_types_enums import RelationType
label_desc: Use image node_id 2 for calling the SieveClusterMerger obj's underlying member method code with example usage: obj.run_sieve(cluster_i, cluster_j) and returns: result