class_docstr: Predictor for the :class:`~allennlp.models.bidaf.SemanticRoleLabeler` model.
docstr: Expects JSON that looks like ``[{"sentence": "..."}, {"sentence": "..."}, ...]``
  and returns JSON that looks like
  
  .. code-block:: js
  
      [
          {"words": [...],
           "verbs": [
              {"verb": "...", "description": "...", "tags": [...]},
              ...
              {"verb": "...", "description": "...", "tags": [...]},
          ]},
          {"words": [...],
           "verbs": [
              {"verb": "...", "description": "...", "tags": [...]},
              ...
              {"verb": "...", "description": "...", "tags": [...]},
          ]}
      ]
docstr_tok: ["Expects","JSON","that","looks","like","``","[","{","``","sentence","''",":","``","...","''","}",",","{","``","sentence","''",":","``","...","''","}",",","...","]","``","and","returns","JSON","that","looks","like","..","code-block",":",":","js","[","{","``","words","''",":","[","...","]",",","``","verbs","''",":","[","{","``","verb","''",":","``","...","''",",","``","description","''",":","``","...","''",",","``","tags","''",":","[","...","]","}",",","...","{","``","verb","''",":","``","...","''",",","``","description","''",":","``","...","''",",","``","tags","''",":","[","...","]","}",",","]","}",",","{","``","words","''",":","[","...","]",",","``","verbs","''",":","[","{","``","verb","''",":","``","...","''",",","``","description","''",":","``","...","''",",","``","tags","''",":","[","...","]","}",",","...","{","``","verb","''",":","``","...","''",",","``","description","''",":","``","...","''",",","``","tags","''",":","[","...","]","}",",","]","}","]"]
code: def predict_batch_json(self, inputs):
      """
      Expects JSON that looks like ``[{"sentence": "..."}, {"sentence": "..."}, ...]``
      and returns JSON that looks like
  
      .. code-block:: js
  
          [
              {"words": [...],
               "verbs": [
                  {"verb": "...", "description": "...", "tags": [...]},
                  ...
                  {"verb": "...", "description": "...", "tags": [...]},
              ]},
              {"words": [...],
               "verbs": [
                  {"verb": "...", "description": "...", "tags": [...]},
                  ...
                  {"verb": "...", "description": "...", "tags": [...]},
              ]}
          ]
      """
      # For SRL, we have more instances than sentences, but the user specified
      # a batch size with respect to the number of sentences passed, so we respect
      # that here by taking the batch size which we use to be the number of sentences
      # we are given.
      batch_size = len(inputs)
      instances_per_sentence = [
          self._sentence_to_srl_instances(json) for json in inputs
      ]
  
      flattened_instances = [
          instance
          for sentence_instances in instances_per_sentence
          for instance in sentence_instances
      ]
  
      if not flattened_instances:
          return sanitize(
              [
                  {
                      "verbs": [],
                      "words": self._tokenizer.split_words(
                          x["sentence"]
                      ),
                  }
                  for x in inputs
              ]
          )
  
      # Make the instances into batches and check the last batch for
      # padded elements as the number of instances might not be perfectly
      # divisible by the batch size.
      batched_instances = group_by_count(
          flattened_instances, batch_size, None
      )
      batched_instances[-1] = [
          instance
          for instance in batched_instances[-1]
          if instance is not None
      ]
      # Run the model on the batches.
      outputs = []
      for batch in batched_instances:
          outputs.extend(self._model.forward_on_instances(batch))
  
      verbs_per_sentence = [
          len(sent) for sent in instances_per_sentence
      ]
      return_dicts = [{"verbs": []} for x in inputs]
  
      output_index = 0
      for sentence_index, verb_count in enumerate(verbs_per_sentence):
          if verb_count == 0:
              # We didn't run any predictions for sentences with no verbs,
              # so we don't have a way to extract the original sentence.
              # Here we just tokenize the input again.
              original_text = self._tokenizer.split_words(
                  inputs[sentence_index]["sentence"]
              )
              return_dicts[sentence_index]["words"] = original_text
              continue
  
          for _ in range(verb_count):
              output = outputs[output_index]
              words = output["words"]
              tags = output["tags"]
              description = self.make_srl_string(words, tags)
              return_dicts[sentence_index]["words"] = words
              return_dicts[sentence_index]["verbs"].append(
                  {
                      "verb": output["verb"],
                      "description": description,
                      "tags": tags,
                  }
              )
              output_index += 1
  
      return sanitize(return_dicts)
  
file_path: magnitude/pymagnitude/third_party/allennlp/predictors/semantic_role_labeler.py
imports: from __future__ import absolute_import
  from allennlp.common.util import JsonDict, sanitize, group_by_count
  from allennlp.data import DatasetReader, Instance
  from allennlp.data.tokenizers.word_splitter import SpacyWordSplitter
  from allennlp.models import Model
  from allennlp.predictors.predictor import Predictor
label_desc: Use image node_id 6 for calling the SemanticRoleLabelerPredictor obj's underlying member method code with example usage: obj.predict_batch_json(inputs) and returns: sanitize, sanitize