class_docstr: Intent parser using pattern matching in a deterministic manner
  
  This intent parser is very strict by nature, and tends to have a very good
  precision but a low recall. For this reason, it is interesting to use it
  first before potentially falling back to another parser.
class_docstr_tok: ["Intent","parser","using","pattern","matching","in","a","deterministic","manner","This","intent","parser","is","very","strict","by","nature",",","and","tends","to","have","a","very","good","precision","but","a","low","recall",".","For","this","reason",",","it","is","interesting","to","use","it","first","before","potentially","falling","back","to","another","parser","."]
code: def _get_matching_result(
      self,
      text,
      processed_text,
      regex,
      intent,
      entities_ranges_mapping=None,
  ):
      found_result = regex.match(processed_text)
      if found_result is None:
          return None
      parsed_intent = intent_classification_result(
          intent_name=intent, probability=1.0
      )
      slots = []
      for group_name in found_result.groupdict():
          ref_group_name = group_name
          if "_" in group_name:
              ref_group_name = group_name.split("_")[0]
          slot_name = self.group_names_to_slot_names[ref_group_name]
          entity = self.slot_names_to_entities[intent][slot_name]
          rng = (
              found_result.start(group_name),
              found_result.end(group_name),
          )
          if entities_ranges_mapping is not None:
              if rng in entities_ranges_mapping:
                  rng = entities_ranges_mapping[rng]
              else:
                  shift = _get_range_shift(rng, entities_ranges_mapping)
                  rng = {START: rng[0] + shift, END: rng[1] + shift}
          else:
              rng = {START: rng[0], END: rng[1]}
          value = text[rng[START] : rng[END]]
          parsed_slot = unresolved_slot(
              match_range=rng,
              value=value,
              entity=entity,
              slot_name=slot_name,
          )
          slots.append(parsed_slot)
      parsed_slots = _deduplicate_overlapping_slots(
          slots, self.language
      )
      parsed_slots = sorted(
          parsed_slots, key=lambda s: s[RES_MATCH_RANGE][START]
      )
      return extraction_result(parsed_intent, parsed_slots)
  
imports: from __future__ import unicode_literals
  import json
  import logging
  import re
  from builtins import str
  from collections import defaultdict
  from pathlib import Path
  from future.utils import iteritems, itervalues
  from snips_nlu.common.dataset_utils import get_slot_name_mappings
  from snips_nlu.common.log_utils import log_elapsed_time, log_result
  from snips_nlu.common.utils import check_persisted_path, deduplicate_overlapping_items, fitted_required, json_string, ranges_overlap, regex_escape, replace_entities_with_placeholders
  from snips_nlu.constants import DATA, END, ENTITIES, ENTITY, INTENTS, LANGUAGE, RES_INTENT, RES_INTENT_NAME, RES_MATCH_RANGE, RES_SLOTS, RES_VALUE, SLOT_NAME, START, TEXT, UTTERANCES, RES_PROBA
  from snips_nlu.dataset import validate_and_format_dataset
  from snips_nlu.dataset.utils import get_stop_words_whitelist
  from snips_nlu.entity_parser.builtin_entity_parser import is_builtin_entity
  from snips_nlu.exceptions import IntentNotFoundError, LoadingError
  from snips_nlu.intent_parser.intent_parser import IntentParser
  from snips_nlu.pipeline.configs import DeterministicIntentParserConfig
  from snips_nlu.preprocessing import normalize_token, tokenize, tokenize_light
  from snips_nlu.resources import get_stop_words
  from snips_nlu.result import empty_result, extraction_result, intent_classification_result, parsing_result, unresolved_slot
label_desc: Use image node_id 18 for calling the DeterministicIntentParser obj's underlying member method code with example usage: obj._get_matching_result(text, processed_text, regex, intent, entities_ranges_mapping) and returns: extraction_result, None