<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="language_v1beta2.html">Cloud Natural Language API</a> . <a href="language_v1beta2.documents.html">documents</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#analyzeEntities">analyzeEntities(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Finds named entities (currently proper names and common nouns) in the text</p>
<p class="toc_element">
  <code><a href="#analyzeEntitySentiment">analyzeEntitySentiment(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Finds entities, similar to AnalyzeEntities in the text and analyzes</p>
<p class="toc_element">
  <code><a href="#analyzeSentiment">analyzeSentiment(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Analyzes the sentiment of the provided text.</p>
<p class="toc_element">
  <code><a href="#analyzeSyntax">analyzeSyntax(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Analyzes the syntax of the text and provides sentence boundaries and</p>
<p class="toc_element">
  <code><a href="#annotateText">annotateText(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">A convenience method that provides all syntax, sentiment, entity, and</p>
<p class="toc_element">
  <code><a href="#classifyText">classifyText(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Classifies a document into categories.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="analyzeEntities">analyzeEntities(body=None, x__xgafv=None)</code>
  <pre>Finds named entities (currently proper names and common nouns) in the text
along with entity types, salience, mentions for each entity, and
other properties.

Args:
  body: object, The request body.
    The object takes the form of:

{ # The entity analysis request message.
    &quot;document&quot;: { # ################################################################ # # Required. Input document.
        #
        # Represents the input to API methods.
      &quot;referenceWebUri&quot;: &quot;A String&quot;, # The web URI where the document comes from. This URI is not used for
          # fetching the content, but as a hint for analyzing the document.
      &quot;language&quot;: &quot;A String&quot;, # The language of the document (if not specified, the language is
          # automatically detected). Both ISO and BCP-47 language codes are
          # accepted.&lt;br&gt;
          # [Language
          # Support](https://cloud.google.com/natural-language/docs/languages) lists
          # currently supported languages for each API method. If the language (either
          # specified by the caller or automatically detected) is not supported by the
          # called API method, an `INVALID_ARGUMENT` error is returned.
      &quot;type&quot;: &quot;A String&quot;, # Required. If the type is not set or is `TYPE_UNSPECIFIED`,
          # returns an `INVALID_ARGUMENT` error.
      &quot;gcsContentUri&quot;: &quot;A String&quot;, # The Google Cloud Storage URI where the file content is located.
          # This URI must be of the form: gs://bucket_name/object_name. For more
          # details, see https://cloud.google.com/storage/docs/reference-uris.
          # NOTE: Cloud Storage object versioning is not supported.
      &quot;content&quot;: &quot;A String&quot;, # The content of the input in string format.
          # Cloud audit logging exempt since it is based on user data.
      &quot;boilerplateHandling&quot;: &quot;A String&quot;, # Indicates how detected boilerplate(e.g. advertisements, copyright
          # declarations, banners) should be handled for this document. If not
          # specified, boilerplate will be treated the same as content.
    },
    &quot;encodingType&quot;: &quot;A String&quot;, # The encoding type used by the API to calculate offsets.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The entity analysis response message.
    &quot;language&quot;: &quot;A String&quot;, # The language of the text, which will be the same as the language specified
        # in the request or, if not specified, the automatically-detected language.
        # See Document.language field for more details.
    &quot;entities&quot;: [ # The recognized entities in the input document.
      { # Represents a phrase in the text that is a known entity, such as
          # a person, an organization, or location. The API associates information, such
          # as salience and mentions, with entities.
        &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeEntitySentiment or if
            # AnnotateTextRequest.Features.extract_entity_sentiment is set to
            # true, this field will contain the aggregate sentiment expressed for this
            # entity in the provided document.
            # the text.
            # Next ID: 6
          &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
              # the absolute magnitude of sentiment regardless of score (positive or
              # negative).
          &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
              # (positive sentiment).
        },
        &quot;name&quot;: &quot;A String&quot;, # The representative name for the entity.
        &quot;mentions&quot;: [ # The mentions of this entity in the input document. The API currently
            # supports proper noun mentions.
          { # Represents a mention for an entity in the text. Currently, proper noun
              # mentions are supported.
            &quot;type&quot;: &quot;A String&quot;, # The type of the entity mention.
            &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeEntitySentiment or if
                # AnnotateTextRequest.Features.extract_entity_sentiment is set to
                # true, this field will contain the sentiment expressed for this mention of
                # the entity in the provided document.
                # the text.
                # Next ID: 6
              &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
                  # the absolute magnitude of sentiment regardless of score (positive or
                  # negative).
              &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
                  # (positive sentiment).
            },
            &quot;text&quot;: { # Represents an output piece of text. # The mention text.
              &quot;content&quot;: &quot;A String&quot;, # The content of the output text.
              &quot;beginOffset&quot;: 42, # The API calculates the beginning offset of the content in the original
                  # document according to the EncodingType specified in the API request.
            },
          },
        ],
        &quot;type&quot;: &quot;A String&quot;, # The entity type.
        &quot;metadata&quot;: { # Metadata associated with the entity.
            #
            # For most entity types, the metadata is a Wikipedia URL (`wikipedia_url`)
            # and Knowledge Graph MID (`mid`), if they are available. For the metadata
            # associated with other entity types, see the Type table below.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;salience&quot;: 3.14, # The salience score associated with the entity in the [0, 1.0] range.
            #
            # The salience score for an entity provides information about the
            # importance or centrality of that entity to the entire document text.
            # Scores closer to 0 are less salient, while scores closer to 1.0 are highly
            # salient.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="analyzeEntitySentiment">analyzeEntitySentiment(body=None, x__xgafv=None)</code>
  <pre>Finds entities, similar to AnalyzeEntities in the text and analyzes
sentiment associated with each entity and its mentions.

Args:
  body: object, The request body.
    The object takes the form of:

{ # The entity-level sentiment analysis request message.
    &quot;document&quot;: { # ################################################################ # # Required. Input document.
        #
        # Represents the input to API methods.
      &quot;referenceWebUri&quot;: &quot;A String&quot;, # The web URI where the document comes from. This URI is not used for
          # fetching the content, but as a hint for analyzing the document.
      &quot;language&quot;: &quot;A String&quot;, # The language of the document (if not specified, the language is
          # automatically detected). Both ISO and BCP-47 language codes are
          # accepted.&lt;br&gt;
          # [Language
          # Support](https://cloud.google.com/natural-language/docs/languages) lists
          # currently supported languages for each API method. If the language (either
          # specified by the caller or automatically detected) is not supported by the
          # called API method, an `INVALID_ARGUMENT` error is returned.
      &quot;type&quot;: &quot;A String&quot;, # Required. If the type is not set or is `TYPE_UNSPECIFIED`,
          # returns an `INVALID_ARGUMENT` error.
      &quot;gcsContentUri&quot;: &quot;A String&quot;, # The Google Cloud Storage URI where the file content is located.
          # This URI must be of the form: gs://bucket_name/object_name. For more
          # details, see https://cloud.google.com/storage/docs/reference-uris.
          # NOTE: Cloud Storage object versioning is not supported.
      &quot;content&quot;: &quot;A String&quot;, # The content of the input in string format.
          # Cloud audit logging exempt since it is based on user data.
      &quot;boilerplateHandling&quot;: &quot;A String&quot;, # Indicates how detected boilerplate(e.g. advertisements, copyright
          # declarations, banners) should be handled for this document. If not
          # specified, boilerplate will be treated the same as content.
    },
    &quot;encodingType&quot;: &quot;A String&quot;, # The encoding type used by the API to calculate offsets.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The entity-level sentiment analysis response message.
    &quot;entities&quot;: [ # The recognized entities in the input document with associated sentiments.
      { # Represents a phrase in the text that is a known entity, such as
          # a person, an organization, or location. The API associates information, such
          # as salience and mentions, with entities.
        &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeEntitySentiment or if
            # AnnotateTextRequest.Features.extract_entity_sentiment is set to
            # true, this field will contain the aggregate sentiment expressed for this
            # entity in the provided document.
            # the text.
            # Next ID: 6
          &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
              # the absolute magnitude of sentiment regardless of score (positive or
              # negative).
          &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
              # (positive sentiment).
        },
        &quot;name&quot;: &quot;A String&quot;, # The representative name for the entity.
        &quot;mentions&quot;: [ # The mentions of this entity in the input document. The API currently
            # supports proper noun mentions.
          { # Represents a mention for an entity in the text. Currently, proper noun
              # mentions are supported.
            &quot;type&quot;: &quot;A String&quot;, # The type of the entity mention.
            &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeEntitySentiment or if
                # AnnotateTextRequest.Features.extract_entity_sentiment is set to
                # true, this field will contain the sentiment expressed for this mention of
                # the entity in the provided document.
                # the text.
                # Next ID: 6
              &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
                  # the absolute magnitude of sentiment regardless of score (positive or
                  # negative).
              &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
                  # (positive sentiment).
            },
            &quot;text&quot;: { # Represents an output piece of text. # The mention text.
              &quot;content&quot;: &quot;A String&quot;, # The content of the output text.
              &quot;beginOffset&quot;: 42, # The API calculates the beginning offset of the content in the original
                  # document according to the EncodingType specified in the API request.
            },
          },
        ],
        &quot;type&quot;: &quot;A String&quot;, # The entity type.
        &quot;metadata&quot;: { # Metadata associated with the entity.
            #
            # For most entity types, the metadata is a Wikipedia URL (`wikipedia_url`)
            # and Knowledge Graph MID (`mid`), if they are available. For the metadata
            # associated with other entity types, see the Type table below.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;salience&quot;: 3.14, # The salience score associated with the entity in the [0, 1.0] range.
            #
            # The salience score for an entity provides information about the
            # importance or centrality of that entity to the entire document text.
            # Scores closer to 0 are less salient, while scores closer to 1.0 are highly
            # salient.
      },
    ],
    &quot;language&quot;: &quot;A String&quot;, # The language of the text, which will be the same as the language specified
        # in the request or, if not specified, the automatically-detected language.
        # See Document.language field for more details.
  }</pre>
</div>

<div class="method">
    <code class="details" id="analyzeSentiment">analyzeSentiment(body=None, x__xgafv=None)</code>
  <pre>Analyzes the sentiment of the provided text.

Args:
  body: object, The request body.
    The object takes the form of:

{ # The sentiment analysis request message.
    &quot;document&quot;: { # ################################################################ # # Required. Input document.
        #
        # Represents the input to API methods.
      &quot;referenceWebUri&quot;: &quot;A String&quot;, # The web URI where the document comes from. This URI is not used for
          # fetching the content, but as a hint for analyzing the document.
      &quot;language&quot;: &quot;A String&quot;, # The language of the document (if not specified, the language is
          # automatically detected). Both ISO and BCP-47 language codes are
          # accepted.&lt;br&gt;
          # [Language
          # Support](https://cloud.google.com/natural-language/docs/languages) lists
          # currently supported languages for each API method. If the language (either
          # specified by the caller or automatically detected) is not supported by the
          # called API method, an `INVALID_ARGUMENT` error is returned.
      &quot;type&quot;: &quot;A String&quot;, # Required. If the type is not set or is `TYPE_UNSPECIFIED`,
          # returns an `INVALID_ARGUMENT` error.
      &quot;gcsContentUri&quot;: &quot;A String&quot;, # The Google Cloud Storage URI where the file content is located.
          # This URI must be of the form: gs://bucket_name/object_name. For more
          # details, see https://cloud.google.com/storage/docs/reference-uris.
          # NOTE: Cloud Storage object versioning is not supported.
      &quot;content&quot;: &quot;A String&quot;, # The content of the input in string format.
          # Cloud audit logging exempt since it is based on user data.
      &quot;boilerplateHandling&quot;: &quot;A String&quot;, # Indicates how detected boilerplate(e.g. advertisements, copyright
          # declarations, banners) should be handled for this document. If not
          # specified, boilerplate will be treated the same as content.
    },
    &quot;encodingType&quot;: &quot;A String&quot;, # The encoding type used by the API to calculate sentence offsets for the
        # sentence sentiment.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The sentiment analysis response message.
    &quot;language&quot;: &quot;A String&quot;, # The language of the text, which will be the same as the language specified
        # in the request or, if not specified, the automatically-detected language.
        # See Document.language field for more details.
    &quot;sentences&quot;: [ # The sentiment for all the sentences in the document.
      { # Represents a sentence in the input document.
        &quot;text&quot;: { # Represents an output piece of text. # The sentence text.
          &quot;content&quot;: &quot;A String&quot;, # The content of the output text.
          &quot;beginOffset&quot;: 42, # The API calculates the beginning offset of the content in the original
              # document according to the EncodingType specified in the API request.
        },
        &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeSentiment or if
            # AnnotateTextRequest.Features.extract_document_sentiment is set to
            # true, this field will contain the sentiment for the sentence.
            # the text.
            # Next ID: 6
          &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
              # the absolute magnitude of sentiment regardless of score (positive or
              # negative).
          &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
              # (positive sentiment).
        },
      },
    ],
    &quot;documentSentiment&quot;: { # Represents the feeling associated with the entire text or entities in # The overall sentiment of the input document.
        # the text.
        # Next ID: 6
      &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
          # the absolute magnitude of sentiment regardless of score (positive or
          # negative).
      &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
          # (positive sentiment).
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="analyzeSyntax">analyzeSyntax(body=None, x__xgafv=None)</code>
  <pre>Analyzes the syntax of the text and provides sentence boundaries and
tokenization along with part of speech tags, dependency trees, and other
properties.

Args:
  body: object, The request body.
    The object takes the form of:

{ # The syntax analysis request message.
    &quot;encodingType&quot;: &quot;A String&quot;, # The encoding type used by the API to calculate offsets.
    &quot;document&quot;: { # ################################################################ # # Required. Input document.
        #
        # Represents the input to API methods.
      &quot;referenceWebUri&quot;: &quot;A String&quot;, # The web URI where the document comes from. This URI is not used for
          # fetching the content, but as a hint for analyzing the document.
      &quot;language&quot;: &quot;A String&quot;, # The language of the document (if not specified, the language is
          # automatically detected). Both ISO and BCP-47 language codes are
          # accepted.&lt;br&gt;
          # [Language
          # Support](https://cloud.google.com/natural-language/docs/languages) lists
          # currently supported languages for each API method. If the language (either
          # specified by the caller or automatically detected) is not supported by the
          # called API method, an `INVALID_ARGUMENT` error is returned.
      &quot;type&quot;: &quot;A String&quot;, # Required. If the type is not set or is `TYPE_UNSPECIFIED`,
          # returns an `INVALID_ARGUMENT` error.
      &quot;gcsContentUri&quot;: &quot;A String&quot;, # The Google Cloud Storage URI where the file content is located.
          # This URI must be of the form: gs://bucket_name/object_name. For more
          # details, see https://cloud.google.com/storage/docs/reference-uris.
          # NOTE: Cloud Storage object versioning is not supported.
      &quot;content&quot;: &quot;A String&quot;, # The content of the input in string format.
          # Cloud audit logging exempt since it is based on user data.
      &quot;boilerplateHandling&quot;: &quot;A String&quot;, # Indicates how detected boilerplate(e.g. advertisements, copyright
          # declarations, banners) should be handled for this document. If not
          # specified, boilerplate will be treated the same as content.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The syntax analysis response message.
    &quot;sentences&quot;: [ # Sentences in the input document.
      { # Represents a sentence in the input document.
        &quot;text&quot;: { # Represents an output piece of text. # The sentence text.
          &quot;content&quot;: &quot;A String&quot;, # The content of the output text.
          &quot;beginOffset&quot;: 42, # The API calculates the beginning offset of the content in the original
              # document according to the EncodingType specified in the API request.
        },
        &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeSentiment or if
            # AnnotateTextRequest.Features.extract_document_sentiment is set to
            # true, this field will contain the sentiment for the sentence.
            # the text.
            # Next ID: 6
          &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
              # the absolute magnitude of sentiment regardless of score (positive or
              # negative).
          &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
              # (positive sentiment).
        },
      },
    ],
    &quot;tokens&quot;: [ # Tokens, along with their syntactic information, in the input document.
      { # Represents the smallest syntactic building block of the text.
        &quot;text&quot;: { # Represents an output piece of text. # The token text.
          &quot;content&quot;: &quot;A String&quot;, # The content of the output text.
          &quot;beginOffset&quot;: 42, # The API calculates the beginning offset of the content in the original
              # document according to the EncodingType specified in the API request.
        },
        &quot;lemma&quot;: &quot;A String&quot;, # [Lemma](https://en.wikipedia.org/wiki/Lemma_%28morphology%29) of the token.
        &quot;partOfSpeech&quot;: { # Represents part of speech information for a token. # Parts of speech tag for this token.
          &quot;voice&quot;: &quot;A String&quot;, # The grammatical voice.
          &quot;tag&quot;: &quot;A String&quot;, # The part of speech tag.
          &quot;aspect&quot;: &quot;A String&quot;, # The grammatical aspect.
          &quot;form&quot;: &quot;A String&quot;, # The grammatical form.
          &quot;person&quot;: &quot;A String&quot;, # The grammatical person.
          &quot;mood&quot;: &quot;A String&quot;, # The grammatical mood.
          &quot;gender&quot;: &quot;A String&quot;, # The grammatical gender.
          &quot;tense&quot;: &quot;A String&quot;, # The grammatical tense.
          &quot;reciprocity&quot;: &quot;A String&quot;, # The grammatical reciprocity.
          &quot;proper&quot;: &quot;A String&quot;, # The grammatical properness.
          &quot;number&quot;: &quot;A String&quot;, # The grammatical number.
          &quot;case&quot;: &quot;A String&quot;, # The grammatical case.
        },
        &quot;dependencyEdge&quot;: { # Represents dependency parse tree information for a token. # Dependency tree parse for this token.
          &quot;label&quot;: &quot;A String&quot;, # The parse label for the token.
          &quot;headTokenIndex&quot;: 42, # Represents the head of this token in the dependency tree.
              # This is the index of the token which has an arc going to this token.
              # The index is the position of the token in the array of tokens returned
              # by the API method. If this token is a root token, then the
              # `head_token_index` is its own index.
        },
      },
    ],
    &quot;language&quot;: &quot;A String&quot;, # The language of the text, which will be the same as the language specified
        # in the request or, if not specified, the automatically-detected language.
        # See Document.language field for more details.
  }</pre>
</div>

<div class="method">
    <code class="details" id="annotateText">annotateText(body=None, x__xgafv=None)</code>
  <pre>A convenience method that provides all syntax, sentiment, entity, and
classification features in one call.

Args:
  body: object, The request body.
    The object takes the form of:

{ # The request message for the text annotation API, which can perform multiple
      # analysis types (sentiment, entities, and syntax) in one call.
    &quot;document&quot;: { # ################################################################ # # Required. Input document.
        #
        # Represents the input to API methods.
      &quot;referenceWebUri&quot;: &quot;A String&quot;, # The web URI where the document comes from. This URI is not used for
          # fetching the content, but as a hint for analyzing the document.
      &quot;language&quot;: &quot;A String&quot;, # The language of the document (if not specified, the language is
          # automatically detected). Both ISO and BCP-47 language codes are
          # accepted.&lt;br&gt;
          # [Language
          # Support](https://cloud.google.com/natural-language/docs/languages) lists
          # currently supported languages for each API method. If the language (either
          # specified by the caller or automatically detected) is not supported by the
          # called API method, an `INVALID_ARGUMENT` error is returned.
      &quot;type&quot;: &quot;A String&quot;, # Required. If the type is not set or is `TYPE_UNSPECIFIED`,
          # returns an `INVALID_ARGUMENT` error.
      &quot;gcsContentUri&quot;: &quot;A String&quot;, # The Google Cloud Storage URI where the file content is located.
          # This URI must be of the form: gs://bucket_name/object_name. For more
          # details, see https://cloud.google.com/storage/docs/reference-uris.
          # NOTE: Cloud Storage object versioning is not supported.
      &quot;content&quot;: &quot;A String&quot;, # The content of the input in string format.
          # Cloud audit logging exempt since it is based on user data.
      &quot;boilerplateHandling&quot;: &quot;A String&quot;, # Indicates how detected boilerplate(e.g. advertisements, copyright
          # declarations, banners) should be handled for this document. If not
          # specified, boilerplate will be treated the same as content.
    },
    &quot;encodingType&quot;: &quot;A String&quot;, # The encoding type used by the API to calculate offsets.
    &quot;features&quot;: { # All available features for sentiment, syntax, and semantic analysis. # Required. The enabled features.
        # Setting each one to true will enable that specific analysis for the input.
        # Next ID: 10
      &quot;extractEntities&quot;: True or False, # Extract entities.
      &quot;extractDocumentSentiment&quot;: True or False, # Extract document-level sentiment.
      &quot;extractSyntax&quot;: True or False, # Extract syntax information.
      &quot;classifyText&quot;: True or False, # Classify the full document into categories. If this is true,
          # the API will use the default model which classifies into a
          # [predefined
          # taxonomy](https://cloud.google.com/natural-language/docs/categories).
      &quot;extractEntitySentiment&quot;: True or False, # Extract entities and their associated sentiment.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The text annotations response message.
    &quot;entities&quot;: [ # Entities, along with their semantic information, in the input document.
        # Populated if the user enables
        # AnnotateTextRequest.Features.extract_entities.
      { # Represents a phrase in the text that is a known entity, such as
          # a person, an organization, or location. The API associates information, such
          # as salience and mentions, with entities.
        &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeEntitySentiment or if
            # AnnotateTextRequest.Features.extract_entity_sentiment is set to
            # true, this field will contain the aggregate sentiment expressed for this
            # entity in the provided document.
            # the text.
            # Next ID: 6
          &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
              # the absolute magnitude of sentiment regardless of score (positive or
              # negative).
          &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
              # (positive sentiment).
        },
        &quot;name&quot;: &quot;A String&quot;, # The representative name for the entity.
        &quot;mentions&quot;: [ # The mentions of this entity in the input document. The API currently
            # supports proper noun mentions.
          { # Represents a mention for an entity in the text. Currently, proper noun
              # mentions are supported.
            &quot;type&quot;: &quot;A String&quot;, # The type of the entity mention.
            &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeEntitySentiment or if
                # AnnotateTextRequest.Features.extract_entity_sentiment is set to
                # true, this field will contain the sentiment expressed for this mention of
                # the entity in the provided document.
                # the text.
                # Next ID: 6
              &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
                  # the absolute magnitude of sentiment regardless of score (positive or
                  # negative).
              &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
                  # (positive sentiment).
            },
            &quot;text&quot;: { # Represents an output piece of text. # The mention text.
              &quot;content&quot;: &quot;A String&quot;, # The content of the output text.
              &quot;beginOffset&quot;: 42, # The API calculates the beginning offset of the content in the original
                  # document according to the EncodingType specified in the API request.
            },
          },
        ],
        &quot;type&quot;: &quot;A String&quot;, # The entity type.
        &quot;metadata&quot;: { # Metadata associated with the entity.
            #
            # For most entity types, the metadata is a Wikipedia URL (`wikipedia_url`)
            # and Knowledge Graph MID (`mid`), if they are available. For the metadata
            # associated with other entity types, see the Type table below.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;salience&quot;: 3.14, # The salience score associated with the entity in the [0, 1.0] range.
            #
            # The salience score for an entity provides information about the
            # importance or centrality of that entity to the entire document text.
            # Scores closer to 0 are less salient, while scores closer to 1.0 are highly
            # salient.
      },
    ],
    &quot;documentSentiment&quot;: { # Represents the feeling associated with the entire text or entities in # The overall sentiment for the document. Populated if the user enables
        # AnnotateTextRequest.Features.extract_document_sentiment.
        # the text.
        # Next ID: 6
      &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
          # the absolute magnitude of sentiment regardless of score (positive or
          # negative).
      &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
          # (positive sentiment).
    },
    &quot;sentences&quot;: [ # Sentences in the input document. Populated if the user enables
        # AnnotateTextRequest.Features.extract_syntax.
      { # Represents a sentence in the input document.
        &quot;text&quot;: { # Represents an output piece of text. # The sentence text.
          &quot;content&quot;: &quot;A String&quot;, # The content of the output text.
          &quot;beginOffset&quot;: 42, # The API calculates the beginning offset of the content in the original
              # document according to the EncodingType specified in the API request.
        },
        &quot;sentiment&quot;: { # Represents the feeling associated with the entire text or entities in # For calls to AnalyzeSentiment or if
            # AnnotateTextRequest.Features.extract_document_sentiment is set to
            # true, this field will contain the sentiment for the sentence.
            # the text.
            # Next ID: 6
          &quot;magnitude&quot;: 3.14, # A non-negative number in the [0, +inf) range, which represents
              # the absolute magnitude of sentiment regardless of score (positive or
              # negative).
          &quot;score&quot;: 3.14, # Sentiment score between -1.0 (negative sentiment) and 1.0
              # (positive sentiment).
        },
      },
    ],
    &quot;tokens&quot;: [ # Tokens, along with their syntactic information, in the input document.
        # Populated if the user enables
        # AnnotateTextRequest.Features.extract_syntax.
      { # Represents the smallest syntactic building block of the text.
        &quot;text&quot;: { # Represents an output piece of text. # The token text.
          &quot;content&quot;: &quot;A String&quot;, # The content of the output text.
          &quot;beginOffset&quot;: 42, # The API calculates the beginning offset of the content in the original
              # document according to the EncodingType specified in the API request.
        },
        &quot;lemma&quot;: &quot;A String&quot;, # [Lemma](https://en.wikipedia.org/wiki/Lemma_%28morphology%29) of the token.
        &quot;partOfSpeech&quot;: { # Represents part of speech information for a token. # Parts of speech tag for this token.
          &quot;voice&quot;: &quot;A String&quot;, # The grammatical voice.
          &quot;tag&quot;: &quot;A String&quot;, # The part of speech tag.
          &quot;aspect&quot;: &quot;A String&quot;, # The grammatical aspect.
          &quot;form&quot;: &quot;A String&quot;, # The grammatical form.
          &quot;person&quot;: &quot;A String&quot;, # The grammatical person.
          &quot;mood&quot;: &quot;A String&quot;, # The grammatical mood.
          &quot;gender&quot;: &quot;A String&quot;, # The grammatical gender.
          &quot;tense&quot;: &quot;A String&quot;, # The grammatical tense.
          &quot;reciprocity&quot;: &quot;A String&quot;, # The grammatical reciprocity.
          &quot;proper&quot;: &quot;A String&quot;, # The grammatical properness.
          &quot;number&quot;: &quot;A String&quot;, # The grammatical number.
          &quot;case&quot;: &quot;A String&quot;, # The grammatical case.
        },
        &quot;dependencyEdge&quot;: { # Represents dependency parse tree information for a token. # Dependency tree parse for this token.
          &quot;label&quot;: &quot;A String&quot;, # The parse label for the token.
          &quot;headTokenIndex&quot;: 42, # Represents the head of this token in the dependency tree.
              # This is the index of the token which has an arc going to this token.
              # The index is the position of the token in the array of tokens returned
              # by the API method. If this token is a root token, then the
              # `head_token_index` is its own index.
        },
      },
    ],
    &quot;categories&quot;: [ # Categories identified in the input document.
      { # Represents a category returned from the text classifier.
        &quot;name&quot;: &quot;A String&quot;, # The name of the category representing the document, from the [predefined
            # taxonomy](https://cloud.google.com/natural-language/docs/categories).
        &quot;confidence&quot;: 3.14, # The classifier&#x27;s confidence of the category. Number represents how certain
            # the classifier is that this category represents the given text.
      },
    ],
    &quot;language&quot;: &quot;A String&quot;, # The language of the text, which will be the same as the language specified
        # in the request or, if not specified, the automatically-detected language.
        # See Document.language field for more details.
  }</pre>
</div>

<div class="method">
    <code class="details" id="classifyText">classifyText(body=None, x__xgafv=None)</code>
  <pre>Classifies a document into categories.

Args:
  body: object, The request body.
    The object takes the form of:

{ # The document classification request message.
    &quot;document&quot;: { # ################################################################ # # Required. Input document.
        #
        # Represents the input to API methods.
      &quot;referenceWebUri&quot;: &quot;A String&quot;, # The web URI where the document comes from. This URI is not used for
          # fetching the content, but as a hint for analyzing the document.
      &quot;language&quot;: &quot;A String&quot;, # The language of the document (if not specified, the language is
          # automatically detected). Both ISO and BCP-47 language codes are
          # accepted.&lt;br&gt;
          # [Language
          # Support](https://cloud.google.com/natural-language/docs/languages) lists
          # currently supported languages for each API method. If the language (either
          # specified by the caller or automatically detected) is not supported by the
          # called API method, an `INVALID_ARGUMENT` error is returned.
      &quot;type&quot;: &quot;A String&quot;, # Required. If the type is not set or is `TYPE_UNSPECIFIED`,
          # returns an `INVALID_ARGUMENT` error.
      &quot;gcsContentUri&quot;: &quot;A String&quot;, # The Google Cloud Storage URI where the file content is located.
          # This URI must be of the form: gs://bucket_name/object_name. For more
          # details, see https://cloud.google.com/storage/docs/reference-uris.
          # NOTE: Cloud Storage object versioning is not supported.
      &quot;content&quot;: &quot;A String&quot;, # The content of the input in string format.
          # Cloud audit logging exempt since it is based on user data.
      &quot;boilerplateHandling&quot;: &quot;A String&quot;, # Indicates how detected boilerplate(e.g. advertisements, copyright
          # declarations, banners) should be handled for this document. If not
          # specified, boilerplate will be treated the same as content.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The document classification response message.
    &quot;categories&quot;: [ # Categories representing the input document.
      { # Represents a category returned from the text classifier.
        &quot;name&quot;: &quot;A String&quot;, # The name of the category representing the document, from the [predefined
            # taxonomy](https://cloud.google.com/natural-language/docs/categories).
        &quot;confidence&quot;: 3.14, # The classifier&#x27;s confidence of the category. Number represents how certain
            # the classifier is that this category represents the given text.
      },
    ],
  }</pre>
</div>

</body></html>