:mod:`airflow.contrib.hooks.gcp_natural_language_hook`
======================================================

.. py:module:: airflow.contrib.hooks.gcp_natural_language_hook


Module Contents
---------------

.. py:class:: CloudNaturalLanguageHook(gcp_conn_id='google_cloud_default', delegate_to=None)

   Bases: :class:`airflow.contrib.hooks.gcp_api_base_hook.GoogleCloudBaseHook`

   Hook for Google Cloud Natural Language Service.

   :param gcp_conn_id: The connection ID to use when fetching connection info.
   :type gcp_conn_id: str
   :param delegate_to: The account to impersonate, if any.
       For this to work, the service account making the request must have
       domain-wide delegation enabled.
   :type delegate_to: str

   .. attribute:: _conn
      

      

   
   .. method:: get_conn(self)

      Retrieves connection to Cloud Natural Language service.

      :return: Cloud Natural Language service object
      :rtype: google.cloud.language_v1.LanguageServiceClient



   
   .. method:: analyze_entities(self, document, encoding_type=None, retry=None, timeout=None, metadata=None)

      Finds named entities in the text along with entity types,
      salience, mentions for each entity, and other properties.

      :param document: Input document.
          If a dict is provided, it must be of the same form as the protobuf message Document
      :type document: dict or class google.cloud.language_v1.types.Document
      :param encoding_type: The encoding type used by the API to calculate offsets.
      :type encoding_type: google.cloud.language_v1.types.EncodingType
      :param retry: A retry object used to retry requests. If None is specified, requests will not be
          retried.
      :type retry: google.api_core.retry.Retry
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          retry is specified, the timeout applies to each individual attempt.
      :type timeout: float
      :param metadata: Additional metadata that is provided to the method.
      :type metadata: sequence[tuple[str, str]]]
      :rtype: google.cloud.language_v1.types.AnalyzeEntitiesResponse



   
   .. method:: analyze_entity_sentiment(self, document, encoding_type=None, retry=None, timeout=None, metadata=None)

      Finds entities, similar to AnalyzeEntities in the text and analyzes sentiment associated with each
      entity and its mentions.

      :param document: Input document.
          If a dict is provided, it must be of the same form as the protobuf message Document
      :type document: dict or class google.cloud.language_v1.types.Document
      :param encoding_type: The encoding type used by the API to calculate offsets.
      :type encoding_type: google.cloud.language_v1.types.EncodingType
      :param retry: A retry object used to retry requests. If None is specified, requests will not be
          retried.
      :type retry: google.api_core.retry.Retry
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          retry is specified, the timeout applies to each individual attempt.
      :type timeout: float
      :param metadata: Additional metadata that is provided to the method.
      :type metadata: sequence[tuple[str, str]]]
      :rtype: google.cloud.language_v1.types.AnalyzeEntitiesResponse



   
   .. method:: analyze_sentiment(self, document, encoding_type=None, retry=None, timeout=None, metadata=None)

      Analyzes the sentiment of the provided text.

      :param document: Input document.
          If a dict is provided, it must be of the same form as the protobuf message Document
      :type document: dict or class google.cloud.language_v1.types.Document
      :param encoding_type: The encoding type used by the API to calculate offsets.
      :type encoding_type: google.cloud.language_v1.types.EncodingType
      :param retry: A retry object used to retry requests. If None is specified, requests will not be
          retried.
      :type retry: google.api_core.retry.Retry
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          retry is specified, the timeout applies to each individual attempt.
      :type timeout: float
      :param metadata: Additional metadata that is provided to the method.
      :type metadata: sequence[tuple[str, str]]]
      :rtype: google.cloud.language_v1.types.AnalyzeEntitiesResponse



   
   .. method:: analyze_syntax(self, document, encoding_type=None, retry=None, timeout=None, metadata=None)

      Analyzes the syntax of the text and provides sentence boundaries and tokenization along with part
      of speech tags, dependency trees, and other properties.

      :param document: Input document.
          If a dict is provided, it must be of the same form as the protobuf message Document
      :type document: dict or class google.cloud.language_v1.types.Document#
      :param encoding_type: The encoding type used by the API to calculate offsets.
      :type encoding_type: google.cloud.language_v1.types.EncodingType
      :param retry: A retry object used to retry requests. If None is specified, requests will not be
          retried.
      :type retry: google.api_core.retry.Retry
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          retry is specified, the timeout applies to each individual attempt.
      :type timeout: float
      :param metadata: Additional metadata that is provided to the method.
      :type metadata: sequence[tuple[str, str]]]
      :rtype: google.cloud.language_v1.types.AnalyzeSyntaxResponse



   
   .. method:: annotate_text(self, document, features, encoding_type=None, retry=None, timeout=None, metadata=None)

      A convenience method that provides all the features that analyzeSentiment,
      analyzeEntities, and analyzeSyntax provide in one call.

      :param document: Input document.
          If a dict is provided, it must be of the same form as the protobuf message Document
      :type document: dict or google.cloud.language_v1.types.Document
      :param features: The enabled features.
          If a dict is provided, it must be of the same form as the protobuf message Features
      :type features: dict or google.cloud.language_v1.enums.Features
      :param encoding_type: The encoding type used by the API to calculate offsets.
      :type encoding_type: google.cloud.language_v1.types.EncodingType
      :param retry: A retry object used to retry requests. If None is specified, requests will not be
          retried.
      :type retry: google.api_core.retry.Retry
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          retry is specified, the timeout applies to each individual attempt.
      :type timeout: float
      :param metadata: Additional metadata that is provided to the method.
      :type metadata: sequence[tuple[str, str]]]
      :rtype: google.cloud.language_v1.types.AnnotateTextResponse



   
   .. method:: classify_text(self, document, retry=None, timeout=None, metadata=None)

      Classifies a document into categories.

      :param document: Input document.
          If a dict is provided, it must be of the same form as the protobuf message Document
      :type document: dict or class google.cloud.language_v1.types.Document
      :param retry: A retry object used to retry requests. If None is specified, requests will not be
          retried.
      :type retry: google.api_core.retry.Retry
      :param timeout: The amount of time, in seconds, to wait for the request to complete. Note that if
          retry is specified, the timeout applies to each individual attempt.
      :type timeout: float
      :param metadata: Additional metadata that is provided to the method.
      :type metadata: sequence[tuple[str, str]]]
      :rtype: google.cloud.language_v1.types.AnalyzeEntitiesResponse




