From ed4fe8687f65e531476565422c13ea6106c4f4ad Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Fri, 15 Sep 2017 08:40:28 -0700 Subject: [PATCH 1/4] Natural Language: Auto-gen update. (#3963) --- language/google/cloud/gapic/__init__.py | 1 - .../google/cloud/gapic/language/__init__.py | 1 - .../language/v1/language_service_client.py | 284 ------------- .../v1/language_service_client_config.json | 46 -- .../v1beta2/language_service_client.py | 320 -------------- .../language_service_client_config.json | 51 --- language/google/cloud/language_v1/__init__.py | 12 +- .../v1 => language_v1/gapic}/__init__.py | 0 .../v1beta2 => language_v1/gapic}/enums.py | 32 +- .../gapic/language_service_client.py | 289 +++++++++++++ .../gapic/language_service_client_config.py | 43 ++ .../v1beta2 => language_v1/proto}/__init__.py | 0 .../proto}/language_service_pb2.py | 402 ++++++++++++++---- .../proto/language_service_pb2_grpc.py | 122 ++++++ language/google/cloud/language_v1/types.py | 18 +- .../google/cloud/language_v1beta2/__init__.py | 12 +- .../cloud/language_v1beta2/gapic/__init__.py | 0 .../v1 => language_v1beta2/gapic}/enums.py | 32 +- .../gapic/language_service_client.py | 362 ++++++++++++++++ .../gapic/language_service_client_config.py | 53 +++ .../cloud/language_v1beta2/proto/__init__.py | 0 .../proto}/language_service_pb2.py | 365 +++++++++++++--- .../proto/language_service_pb2_grpc.py | 139 ++++++ .../google/cloud/language_v1beta2/types.py | 28 +- language/google/cloud/proto/__init__.py | 1 - .../google/cloud/proto/language/__init__.py | 1 - .../cloud/proto/language/v1/__init__.py | 1 - .../language/v1/language_service_pb2_grpc.py | 104 ----- .../cloud/proto/language/v1beta2/__init__.py | 1 - .../v1beta2/language_service_pb2_grpc.py | 122 ------ language/setup.py | 4 - .../v1}/test_language_service_client_v1.py | 52 +-- .../test_language_service_client_v1beta2.py | 111 +++-- 33 files changed, 1812 insertions(+), 1197 deletions(-) delete mode 100644 language/google/cloud/gapic/__init__.py delete mode 100644 language/google/cloud/gapic/language/__init__.py delete mode 100644 language/google/cloud/gapic/language/v1/language_service_client.py delete mode 100644 language/google/cloud/gapic/language/v1/language_service_client_config.json delete mode 100644 language/google/cloud/gapic/language/v1beta2/language_service_client.py delete mode 100644 language/google/cloud/gapic/language/v1beta2/language_service_client_config.json rename language/google/cloud/{gapic/language/v1 => language_v1/gapic}/__init__.py (100%) rename language/google/cloud/{gapic/language/v1beta2 => language_v1/gapic}/enums.py (94%) create mode 100644 language/google/cloud/language_v1/gapic/language_service_client.py create mode 100644 language/google/cloud/language_v1/gapic/language_service_client_config.py rename language/google/cloud/{gapic/language/v1beta2 => language_v1/proto}/__init__.py (100%) rename language/google/cloud/{proto/language/v1 => language_v1/proto}/language_service_pb2.py (78%) create mode 100644 language/google/cloud/language_v1/proto/language_service_pb2_grpc.py create mode 100644 language/google/cloud/language_v1beta2/gapic/__init__.py rename language/google/cloud/{gapic/language/v1 => language_v1beta2/gapic}/enums.py (94%) create mode 100644 language/google/cloud/language_v1beta2/gapic/language_service_client.py create mode 100644 language/google/cloud/language_v1beta2/gapic/language_service_client_config.py create mode 100644 language/google/cloud/language_v1beta2/proto/__init__.py rename language/google/cloud/{proto/language/v1beta2 => language_v1beta2/proto}/language_service_pb2.py (86%) create mode 100644 language/google/cloud/language_v1beta2/proto/language_service_pb2_grpc.py delete mode 100644 language/google/cloud/proto/__init__.py delete mode 100644 language/google/cloud/proto/language/__init__.py delete mode 100644 language/google/cloud/proto/language/v1/__init__.py delete mode 100644 language/google/cloud/proto/language/v1/language_service_pb2_grpc.py delete mode 100644 language/google/cloud/proto/language/v1beta2/__init__.py delete mode 100644 language/google/cloud/proto/language/v1beta2/language_service_pb2_grpc.py rename language/tests/{gapic => unit/gapic/v1}/test_language_service_client_v1.py (83%) rename language/tests/{gapic => unit/gapic/v1beta2}/test_language_service_client_v1beta2.py (73%) diff --git a/language/google/cloud/gapic/__init__.py b/language/google/cloud/gapic/__init__.py deleted file mode 100644 index de40ea7ca058..000000000000 --- a/language/google/cloud/gapic/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__import__('pkg_resources').declare_namespace(__name__) diff --git a/language/google/cloud/gapic/language/__init__.py b/language/google/cloud/gapic/language/__init__.py deleted file mode 100644 index de40ea7ca058..000000000000 --- a/language/google/cloud/gapic/language/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__import__('pkg_resources').declare_namespace(__name__) diff --git a/language/google/cloud/gapic/language/v1/language_service_client.py b/language/google/cloud/gapic/language/v1/language_service_client.py deleted file mode 100644 index b413de49fa83..000000000000 --- a/language/google/cloud/gapic/language/v1/language_service_client.py +++ /dev/null @@ -1,284 +0,0 @@ -# Copyright 2017, Google Inc. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# EDITING INSTRUCTIONS -# This file was generated from the file -# https://github.com/google/googleapis/blob/master/google/cloud/language/v1/language_service.proto, -# and updates to that file get reflected here through a refresh process. -# For the short term, the refresh process will only be runnable by Google engineers. -# -# The only allowed edits are to method and file documentation. A 3-way -# merge preserves those additions if the generated source changes. -"""Accesses the google.cloud.language.v1 LanguageService API.""" - -import collections -import json -import os -import pkg_resources -import platform - -from google.gax import api_callable -from google.gax import config -from google.gax import path_template -import google.gax - -from google.cloud.gapic.language.v1 import enums -from google.cloud.proto.language.v1 import language_service_pb2 - - -class LanguageServiceClient(object): - """ - Provides text analysis operations such as sentiment analysis and entity - recognition. - """ - - SERVICE_ADDRESS = 'language.googleapis.com' - """The default address of the service.""" - - DEFAULT_SERVICE_PORT = 443 - """The default port of the service.""" - - # The scopes needed to make gRPC calls to all of the methods defined in - # this service - _ALL_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) - - def __init__(self, - service_path=SERVICE_ADDRESS, - port=DEFAULT_SERVICE_PORT, - channel=None, - credentials=None, - ssl_credentials=None, - scopes=None, - client_config=None, - app_name=None, - app_version='', - lib_name=None, - lib_version='', - metrics_headers=()): - """Constructor. - - Args: - service_path (string): The domain name of the API remote host. - port (int): The port on which to connect to the remote host. - channel (:class:`grpc.Channel`): A ``Channel`` instance through - which to make calls. - credentials (object): The authorization credentials to attach to - requests. These credentials identify this application to the - service. - ssl_credentials (:class:`grpc.ChannelCredentials`): A - ``ChannelCredentials`` instance for use with an SSL-enabled - channel. - scopes (list[string]): A list of OAuth2 scopes to attach to requests. - client_config (dict): - A dictionary for call options for each method. See - :func:`google.gax.construct_settings` for the structure of - this data. Falls back to the default config if not specified - or the specified config is missing data points. - app_name (string): The name of the application calling - the service. Recommended for analytics purposes. - app_version (string): The version of the application calling - the service. Recommended for analytics purposes. - lib_name (string): The API library software used for calling - the service. (Unless you are writing an API client itself, - leave this as default.) - lib_version (string): The API library software version used - for calling the service. (Unless you are writing an API client - itself, leave this as default.) - metrics_headers (dict): A dictionary of values for tracking - client library metrics. Ultimately serializes to a string - (e.g. 'foo/1.2.3 bar/3.14.1'). This argument should be - considered private. - - Returns: - A LanguageServiceClient object. - """ - # Unless the calling application specifically requested - # OAuth scopes, request everything. - if scopes is None: - scopes = self._ALL_SCOPES - - # Initialize an empty client config, if none is set. - if client_config is None: - client_config = {} - - # Initialize metrics_headers as an ordered dictionary - # (cuts down on cardinality of the resulting string slightly). - metrics_headers = collections.OrderedDict(metrics_headers) - metrics_headers['gl-python'] = platform.python_version() - - # The library may or may not be set, depending on what is - # calling this client. Newer client libraries set the library name - # and version. - if lib_name: - metrics_headers[lib_name] = lib_version - - # Finally, track the GAPIC package version. - metrics_headers['gapic'] = pkg_resources.get_distribution( - 'google-cloud-language', ).version - - # Load the configuration defaults. - default_client_config = json.loads( - pkg_resources.resource_string( - __name__, 'language_service_client_config.json').decode()) - defaults = api_callable.construct_settings( - 'google.cloud.language.v1.LanguageService', - default_client_config, - client_config, - config.STATUS_CODE_NAMES, - metrics_headers=metrics_headers, ) - self.language_service_stub = config.create_stub( - language_service_pb2.LanguageServiceStub, - channel=channel, - service_path=service_path, - service_port=port, - credentials=credentials, - scopes=scopes, - ssl_credentials=ssl_credentials) - - self._analyze_sentiment = api_callable.create_api_call( - self.language_service_stub.AnalyzeSentiment, - settings=defaults['analyze_sentiment']) - self._analyze_entities = api_callable.create_api_call( - self.language_service_stub.AnalyzeEntities, - settings=defaults['analyze_entities']) - self._analyze_syntax = api_callable.create_api_call( - self.language_service_stub.AnalyzeSyntax, - settings=defaults['analyze_syntax']) - self._annotate_text = api_callable.create_api_call( - self.language_service_stub.AnnotateText, - settings=defaults['annotate_text']) - - # Service calls - def analyze_sentiment(self, document, encoding_type=None, options=None): - """ - Analyzes the sentiment of the provided text. - - Example: - >>> from google.cloud.gapic.language.v1 import language_service_client - >>> from google.cloud.proto.language.v1 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> response = client.analyze_sentiment(document) - - Args: - document (:class:`google.cloud.proto.language.v1.language_service_pb2.Document`): Input document. - encoding_type (enum :class:`google.cloud.gapic.language.v1.enums.EncodingType`): The encoding type used by the API to calculate sentence offsets. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1.language_service_pb2.AnalyzeSentimentResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnalyzeSentimentRequest( - document=document, encoding_type=encoding_type) - return self._analyze_sentiment(request, options) - - def analyze_entities(self, document, encoding_type=None, options=None): - """ - Finds named entities (currently proper names and common nouns) in the text - along with entity types, salience, mentions for each entity, and - other properties. - - Example: - >>> from google.cloud.gapic.language.v1 import language_service_client - >>> from google.cloud.proto.language.v1 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> response = client.analyze_entities(document) - - Args: - document (:class:`google.cloud.proto.language.v1.language_service_pb2.Document`): Input document. - encoding_type (enum :class:`google.cloud.gapic.language.v1.enums.EncodingType`): The encoding type used by the API to calculate offsets. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1.language_service_pb2.AnalyzeEntitiesResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnalyzeEntitiesRequest( - document=document, encoding_type=encoding_type) - return self._analyze_entities(request, options) - - def analyze_syntax(self, document, encoding_type=None, options=None): - """ - Analyzes the syntax of the text and provides sentence boundaries and - tokenization along with part of speech tags, dependency trees, and other - properties. - - Example: - >>> from google.cloud.gapic.language.v1 import language_service_client - >>> from google.cloud.proto.language.v1 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> response = client.analyze_syntax(document) - - Args: - document (:class:`google.cloud.proto.language.v1.language_service_pb2.Document`): Input document. - encoding_type (enum :class:`google.cloud.gapic.language.v1.enums.EncodingType`): The encoding type used by the API to calculate offsets. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1.language_service_pb2.AnalyzeSyntaxResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnalyzeSyntaxRequest( - document=document, encoding_type=encoding_type) - return self._analyze_syntax(request, options) - - def annotate_text(self, - document, - features, - encoding_type=None, - options=None): - """ - A convenience method that provides all the features that analyzeSentiment, - analyzeEntities, and analyzeSyntax provide in one call. - - Example: - >>> from google.cloud.gapic.language.v1 import language_service_client - >>> from google.cloud.proto.language.v1 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> features = language_service_pb2.AnnotateTextRequest.Features() - >>> response = client.annotate_text(document, features) - - Args: - document (:class:`google.cloud.proto.language.v1.language_service_pb2.Document`): Input document. - features (:class:`google.cloud.proto.language.v1.language_service_pb2.AnnotateTextRequest.Features`): The enabled features. - encoding_type (enum :class:`google.cloud.gapic.language.v1.enums.EncodingType`): The encoding type used by the API to calculate offsets. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1.language_service_pb2.AnnotateTextResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnnotateTextRequest( - document=document, features=features, encoding_type=encoding_type) - return self._annotate_text(request, options) diff --git a/language/google/cloud/gapic/language/v1/language_service_client_config.json b/language/google/cloud/gapic/language/v1/language_service_client_config.json deleted file mode 100644 index 202d5b0d427b..000000000000 --- a/language/google/cloud/gapic/language/v1/language_service_client_config.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "interfaces": { - "google.cloud.language.v1.LanguageService": { - "retry_codes": { - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ], - "non_idempotent": [] - }, - "retry_params": { - "default": { - "initial_retry_delay_millis": 100, - "retry_delay_multiplier": 1.3, - "max_retry_delay_millis": 60000, - "initial_rpc_timeout_millis": 60000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 60000, - "total_timeout_millis": 600000 - } - }, - "methods": { - "AnalyzeSentiment": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - }, - "AnalyzeEntities": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - }, - "AnalyzeSyntax": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - }, - "AnnotateText": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - } - } - } - } -} diff --git a/language/google/cloud/gapic/language/v1beta2/language_service_client.py b/language/google/cloud/gapic/language/v1beta2/language_service_client.py deleted file mode 100644 index 0150ca4f4b83..000000000000 --- a/language/google/cloud/gapic/language/v1beta2/language_service_client.py +++ /dev/null @@ -1,320 +0,0 @@ -# Copyright 2017, Google Inc. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# EDITING INSTRUCTIONS -# This file was generated from the file -# https://github.com/google/googleapis/blob/master/google/cloud/language/v1beta2/language_service.proto, -# and updates to that file get reflected here through a refresh process. -# For the short term, the refresh process will only be runnable by Google engineers. -# -# The only allowed edits are to method and file documentation. A 3-way -# merge preserves those additions if the generated source changes. -"""Accesses the google.cloud.language.v1beta2 LanguageService API.""" - -import collections -import json -import os -import pkg_resources -import platform - -from google.gax import api_callable -from google.gax import config -from google.gax import path_template -import google.gax - -from google.cloud.gapic.language.v1beta2 import enums -from google.cloud.proto.language.v1beta2 import language_service_pb2 - - -class LanguageServiceClient(object): - """ - Provides text analysis operations such as sentiment analysis and entity - recognition. - """ - - SERVICE_ADDRESS = 'language.googleapis.com' - """The default address of the service.""" - - DEFAULT_SERVICE_PORT = 443 - """The default port of the service.""" - - # The scopes needed to make gRPC calls to all of the methods defined in - # this service - _ALL_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) - - def __init__(self, - service_path=SERVICE_ADDRESS, - port=DEFAULT_SERVICE_PORT, - channel=None, - credentials=None, - ssl_credentials=None, - scopes=None, - client_config=None, - app_name=None, - app_version='', - lib_name=None, - lib_version='', - metrics_headers=()): - """Constructor. - - Args: - service_path (string): The domain name of the API remote host. - port (int): The port on which to connect to the remote host. - channel (:class:`grpc.Channel`): A ``Channel`` instance through - which to make calls. - credentials (object): The authorization credentials to attach to - requests. These credentials identify this application to the - service. - ssl_credentials (:class:`grpc.ChannelCredentials`): A - ``ChannelCredentials`` instance for use with an SSL-enabled - channel. - scopes (list[string]): A list of OAuth2 scopes to attach to requests. - client_config (dict): - A dictionary for call options for each method. See - :func:`google.gax.construct_settings` for the structure of - this data. Falls back to the default config if not specified - or the specified config is missing data points. - app_name (string): The name of the application calling - the service. Recommended for analytics purposes. - app_version (string): The version of the application calling - the service. Recommended for analytics purposes. - lib_name (string): The API library software used for calling - the service. (Unless you are writing an API client itself, - leave this as default.) - lib_version (string): The API library software version used - for calling the service. (Unless you are writing an API client - itself, leave this as default.) - metrics_headers (dict): A dictionary of values for tracking - client library metrics. Ultimately serializes to a string - (e.g. 'foo/1.2.3 bar/3.14.1'). This argument should be - considered private. - - Returns: - A LanguageServiceClient object. - """ - # Unless the calling application specifically requested - # OAuth scopes, request everything. - if scopes is None: - scopes = self._ALL_SCOPES - - # Initialize an empty client config, if none is set. - if client_config is None: - client_config = {} - - # Initialize metrics_headers as an ordered dictionary - # (cuts down on cardinality of the resulting string slightly). - metrics_headers = collections.OrderedDict(metrics_headers) - metrics_headers['gl-python'] = platform.python_version() - - # The library may or may not be set, depending on what is - # calling this client. Newer client libraries set the library name - # and version. - if lib_name: - metrics_headers[lib_name] = lib_version - - # Finally, track the GAPIC package version. - metrics_headers['gapic'] = pkg_resources.get_distribution( - 'google-cloud-language', ).version - - # Load the configuration defaults. - default_client_config = json.loads( - pkg_resources.resource_string( - __name__, 'language_service_client_config.json').decode()) - defaults = api_callable.construct_settings( - 'google.cloud.language.v1beta2.LanguageService', - default_client_config, - client_config, - config.STATUS_CODE_NAMES, - metrics_headers=metrics_headers, ) - self.language_service_stub = config.create_stub( - language_service_pb2.LanguageServiceStub, - channel=channel, - service_path=service_path, - service_port=port, - credentials=credentials, - scopes=scopes, - ssl_credentials=ssl_credentials) - - self._analyze_sentiment = api_callable.create_api_call( - self.language_service_stub.AnalyzeSentiment, - settings=defaults['analyze_sentiment']) - self._analyze_entities = api_callable.create_api_call( - self.language_service_stub.AnalyzeEntities, - settings=defaults['analyze_entities']) - self._analyze_entity_sentiment = api_callable.create_api_call( - self.language_service_stub.AnalyzeEntitySentiment, - settings=defaults['analyze_entity_sentiment']) - self._analyze_syntax = api_callable.create_api_call( - self.language_service_stub.AnalyzeSyntax, - settings=defaults['analyze_syntax']) - self._annotate_text = api_callable.create_api_call( - self.language_service_stub.AnnotateText, - settings=defaults['annotate_text']) - - # Service calls - def analyze_sentiment(self, document, encoding_type=None, options=None): - """ - Analyzes the sentiment of the provided text. - - Example: - >>> from google.cloud.gapic.language.v1beta2 import language_service_client - >>> from google.cloud.proto.language.v1beta2 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> response = client.analyze_sentiment(document) - - Args: - document (:class:`google.cloud.proto.language.v1beta2.language_service_pb2.Document`): Input document. - encoding_type (enum :class:`google.cloud.gapic.language.v1beta2.enums.EncodingType`): The encoding type used by the API to calculate sentence offsets for the - sentence sentiment. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1beta2.language_service_pb2.AnalyzeSentimentResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnalyzeSentimentRequest( - document=document, encoding_type=encoding_type) - return self._analyze_sentiment(request, options) - - def analyze_entities(self, document, encoding_type=None, options=None): - """ - Finds named entities (currently proper names and common nouns) in the text - along with entity types, salience, mentions for each entity, and - other properties. - - Example: - >>> from google.cloud.gapic.language.v1beta2 import language_service_client - >>> from google.cloud.proto.language.v1beta2 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> response = client.analyze_entities(document) - - Args: - document (:class:`google.cloud.proto.language.v1beta2.language_service_pb2.Document`): Input document. - encoding_type (enum :class:`google.cloud.gapic.language.v1beta2.enums.EncodingType`): The encoding type used by the API to calculate offsets. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1beta2.language_service_pb2.AnalyzeEntitiesResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnalyzeEntitiesRequest( - document=document, encoding_type=encoding_type) - return self._analyze_entities(request, options) - - def analyze_entity_sentiment(self, - document, - encoding_type=None, - options=None): - """ - Finds entities, similar to ``AnalyzeEntities`` in the text and analyzes - sentiment associated with each entity and its mentions. - - Example: - >>> from google.cloud.gapic.language.v1beta2 import language_service_client - >>> from google.cloud.proto.language.v1beta2 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> response = client.analyze_entity_sentiment(document) - - Args: - document (:class:`google.cloud.proto.language.v1beta2.language_service_pb2.Document`): Input document. - encoding_type (enum :class:`google.cloud.gapic.language.v1beta2.enums.EncodingType`): The encoding type used by the API to calculate offsets. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1beta2.language_service_pb2.AnalyzeEntitySentimentResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnalyzeEntitySentimentRequest( - document=document, encoding_type=encoding_type) - return self._analyze_entity_sentiment(request, options) - - def analyze_syntax(self, document, encoding_type=None, options=None): - """ - Analyzes the syntax of the text and provides sentence boundaries and - tokenization along with part of speech tags, dependency trees, and other - properties. - - Example: - >>> from google.cloud.gapic.language.v1beta2 import language_service_client - >>> from google.cloud.proto.language.v1beta2 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> response = client.analyze_syntax(document) - - Args: - document (:class:`google.cloud.proto.language.v1beta2.language_service_pb2.Document`): Input document. - encoding_type (enum :class:`google.cloud.gapic.language.v1beta2.enums.EncodingType`): The encoding type used by the API to calculate offsets. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1beta2.language_service_pb2.AnalyzeSyntaxResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnalyzeSyntaxRequest( - document=document, encoding_type=encoding_type) - return self._analyze_syntax(request, options) - - def annotate_text(self, - document, - features, - encoding_type=None, - options=None): - """ - A convenience method that provides all syntax, sentiment, and entity - features in one call. - - Example: - >>> from google.cloud.gapic.language.v1beta2 import language_service_client - >>> from google.cloud.proto.language.v1beta2 import language_service_pb2 - >>> client = language_service_client.LanguageServiceClient() - >>> document = language_service_pb2.Document() - >>> features = language_service_pb2.AnnotateTextRequest.Features() - >>> response = client.annotate_text(document, features) - - Args: - document (:class:`google.cloud.proto.language.v1beta2.language_service_pb2.Document`): Input document. - features (:class:`google.cloud.proto.language.v1beta2.language_service_pb2.AnnotateTextRequest.Features`): The enabled features. - encoding_type (enum :class:`google.cloud.gapic.language.v1beta2.enums.EncodingType`): The encoding type used by the API to calculate offsets. - options (:class:`google.gax.CallOptions`): Overrides the default - settings for this call, e.g, timeout, retries etc. - - Returns: - A :class:`google.cloud.proto.language.v1beta2.language_service_pb2.AnnotateTextResponse` instance. - - Raises: - :exc:`google.gax.errors.GaxError` if the RPC is aborted. - :exc:`ValueError` if the parameters are invalid. - """ - request = language_service_pb2.AnnotateTextRequest( - document=document, features=features, encoding_type=encoding_type) - return self._annotate_text(request, options) diff --git a/language/google/cloud/gapic/language/v1beta2/language_service_client_config.json b/language/google/cloud/gapic/language/v1beta2/language_service_client_config.json deleted file mode 100644 index 8018f8a7bbf5..000000000000 --- a/language/google/cloud/gapic/language/v1beta2/language_service_client_config.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "interfaces": { - "google.cloud.language.v1beta2.LanguageService": { - "retry_codes": { - "idempotent": [ - "DEADLINE_EXCEEDED", - "UNAVAILABLE" - ], - "non_idempotent": [] - }, - "retry_params": { - "default": { - "initial_retry_delay_millis": 100, - "retry_delay_multiplier": 1.3, - "max_retry_delay_millis": 60000, - "initial_rpc_timeout_millis": 60000, - "rpc_timeout_multiplier": 1.0, - "max_rpc_timeout_millis": 60000, - "total_timeout_millis": 600000 - } - }, - "methods": { - "AnalyzeSentiment": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - }, - "AnalyzeEntities": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - }, - "AnalyzeEntitySentiment": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - }, - "AnalyzeSyntax": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - }, - "AnnotateText": { - "timeout_millis": 30000, - "retry_codes_name": "idempotent", - "retry_params_name": "default" - } - } - } - } -} diff --git a/language/google/cloud/language_v1/__init__.py b/language/google/cloud/language_v1/__init__.py index a5666eadb5c7..15519e67f4fc 100644 --- a/language/google/cloud/language_v1/__init__.py +++ b/language/google/cloud/language_v1/__init__.py @@ -14,17 +14,17 @@ from __future__ import absolute_import -from google.cloud.gapic.language.v1 import language_service_client as lsc -from google.cloud.gapic.language.v1 import enums - from google.cloud.language_v1 import types +from google.cloud.language_v1.gapic import enums +from google.cloud.language_v1.gapic import language_service_client -LanguageServiceClient = lsc.LanguageServiceClient +class LanguageServiceClient(language_service_client.LanguageServiceClient): + __doc__ = language_service_client.LanguageServiceClient.__doc__ + enums = enums __all__ = ( 'enums', - 'LanguageServiceClient', 'types', -) + 'LanguageServiceClient', ) diff --git a/language/google/cloud/gapic/language/v1/__init__.py b/language/google/cloud/language_v1/gapic/__init__.py similarity index 100% rename from language/google/cloud/gapic/language/v1/__init__.py rename to language/google/cloud/language_v1/gapic/__init__.py diff --git a/language/google/cloud/gapic/language/v1beta2/enums.py b/language/google/cloud/language_v1/gapic/enums.py similarity index 94% rename from language/google/cloud/gapic/language/v1beta2/enums.py rename to language/google/cloud/language_v1/gapic/enums.py index 2b53e4d913bb..689033aa4db2 100644 --- a/language/google/cloud/gapic/language/v1beta2/enums.py +++ b/language/google/cloud/language_v1/gapic/enums.py @@ -1,10 +1,10 @@ -# Copyright 2016 Google Inc. All rights reserved. +# Copyright 2017, Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -24,16 +24,16 @@ class EncodingType(object): Attributes: NONE (int): If ``EncodingType`` is not specified, encoding-dependent information (such as - ``begin_offset``) will be set at ``-1``. + ``begin_offset``) will be set at ``-1``. UTF8 (int): Encoding-dependent information (such as ``begin_offset``) is calculated based - on the UTF-8 encoding of the input. C++ and Go are examples of languages - that use this encoding natively. + on the UTF-8 encoding of the input. C++ and Go are examples of languages + that use this encoding natively. UTF16 (int): Encoding-dependent information (such as ``begin_offset``) is calculated based - on the UTF-16 encoding of the input. Java and Javascript are examples of - languages that use this encoding natively. + on the UTF-16 encoding of the input. Java and Javascript are examples of + languages that use this encoding natively. UTF32 (int): Encoding-dependent information (such as ``begin_offset``) is calculated based - on the UTF-32 encoding of the input. Python is an example of a language - that uses this encoding natively. + on the UTF-32 encoding of the input. Python is an example of a language + that uses this encoding natively. """ NONE = 0 UTF8 = 1 @@ -292,7 +292,7 @@ class Reciprocity(object): Attributes: RECIPROCITY_UNKNOWN (int): Reciprocity is not applicable in the analyzed language or is not - predicted. + predicted. RECIPROCAL (int): Reciprocal NON_RECIPROCAL (int): Non-reciprocal """ @@ -421,6 +421,12 @@ class Label(object): NUMC (int): Compound of numeric modifier COP (int): Copula DISLOCATED (int): Dislocated relation (for fronted/topicalized elements) + ASP (int): Aspect marker + GMOD (int): Genitive modifier + GOBJ (int): Genitive object + INFMOD (int): Infinitival modifier + MES (int): Measure + NCOMP (int): Nominal complement of a noun """ UNKNOWN = 0 ABBREV = 1 @@ -499,6 +505,12 @@ class Label(object): NUMC = 74 COP = 75 DISLOCATED = 76 + ASP = 77 + GMOD = 78 + GOBJ = 79 + INFMOD = 80 + MES = 81 + NCOMP = 82 class EntityMention(object): diff --git a/language/google/cloud/language_v1/gapic/language_service_client.py b/language/google/cloud/language_v1/gapic/language_service_client.py new file mode 100644 index 000000000000..f3bd9f6069cf --- /dev/null +++ b/language/google/cloud/language_v1/gapic/language_service_client.py @@ -0,0 +1,289 @@ +# Copyright 2017, Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# EDITING INSTRUCTIONS +# This file was generated from the file +# https://github.com/google/googleapis/blob/master/google/cloud/language/v1/language_service.proto, +# and updates to that file get reflected here through a refresh process. +# For the short term, the refresh process will only be runnable by Google engineers. +# +# The only allowed edits are to method and file documentation. A 3-way +# merge preserves those additions if the generated source changes. +"""Accesses the google.cloud.language.v1 LanguageService API.""" + +import collections +import json +import os +import pkg_resources +import platform + +from google.gax import api_callable +from google.gax import config +from google.gax import path_template +import google.gax + +from google.cloud.language_v1.gapic import enums +from google.cloud.language_v1.gapic import language_service_client_config +from google.cloud.language_v1.proto import language_service_pb2 + + +class LanguageServiceClient(object): + """ + Provides text analysis operations such as sentiment analysis and entity + recognition. + """ + + SERVICE_ADDRESS = 'language.googleapis.com' + """The default address of the service.""" + + DEFAULT_SERVICE_PORT = 443 + """The default port of the service.""" + + # The scopes needed to make gRPC calls to all of the methods defined in + # this service + _ALL_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) + + def __init__(self, + channel=None, + credentials=None, + ssl_credentials=None, + scopes=None, + client_config=None, + lib_name=None, + lib_version='', + metrics_headers=()): + """Constructor. + + Args: + channel (~grpc.Channel): A ``Channel`` instance through + which to make calls. + credentials (~google.auth.credentials.Credentials): The authorization + credentials to attach to requests. These credentials identify this + application to the service. + ssl_credentials (~grpc.ChannelCredentials): A + ``ChannelCredentials`` instance for use with an SSL-enabled + channel. + scopes (Sequence[str]): A list of OAuth2 scopes to attach to requests. + client_config (dict): + A dictionary for call options for each method. See + :func:`google.gax.construct_settings` for the structure of + this data. Falls back to the default config if not specified + or the specified config is missing data points. + lib_name (str): The API library software used for calling + the service. (Unless you are writing an API client itself, + leave this as default.) + lib_version (str): The API library software version used + for calling the service. (Unless you are writing an API client + itself, leave this as default.) + metrics_headers (dict): A dictionary of values for tracking + client library metrics. Ultimately serializes to a string + (e.g. 'foo/1.2.3 bar/3.14.1'). This argument should be + considered private. + + Returns: LanguageServiceClient + """ + # Unless the calling application specifically requested + # OAuth scopes, request everything. + if scopes is None: + scopes = self._ALL_SCOPES + + # Initialize an empty client config, if none is set. + if client_config is None: + client_config = {} + + # Initialize metrics_headers as an ordered dictionary + # (cuts down on cardinality of the resulting string slightly). + metrics_headers = collections.OrderedDict(metrics_headers) + metrics_headers['gl-python'] = platform.python_version() + + # The library may or may not be set, depending on what is + # calling this client. Newer client libraries set the library name + # and version. + if lib_name: + metrics_headers[lib_name] = lib_version + + # Finally, track the GAPIC package version. + metrics_headers['gapic'] = pkg_resources.get_distribution( + 'google-cloud-language', ).version + + # Load the configuration defaults. + defaults = api_callable.construct_settings( + 'google.cloud.language.v1.LanguageService', + language_service_client_config.config, + client_config, + config.STATUS_CODE_NAMES, + metrics_headers=metrics_headers, ) + self.language_service_stub = config.create_stub( + language_service_pb2.LanguageServiceStub, + channel=channel, + service_path=self.SERVICE_ADDRESS, + service_port=self.DEFAULT_SERVICE_PORT, + credentials=credentials, + scopes=scopes, + ssl_credentials=ssl_credentials) + + self._analyze_sentiment = api_callable.create_api_call( + self.language_service_stub.AnalyzeSentiment, + settings=defaults['analyze_sentiment']) + self._analyze_entities = api_callable.create_api_call( + self.language_service_stub.AnalyzeEntities, + settings=defaults['analyze_entities']) + self._analyze_syntax = api_callable.create_api_call( + self.language_service_stub.AnalyzeSyntax, + settings=defaults['analyze_syntax']) + self._annotate_text = api_callable.create_api_call( + self.language_service_stub.AnnotateText, + settings=defaults['annotate_text']) + + # Service calls + def analyze_sentiment(self, document, encoding_type=None, options=None): + """ + Analyzes the sentiment of the provided text. + + Example: + >>> from google.cloud import language_v1 + >>> + >>> client = language_v1.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.analyze_sentiment(document) + + Args: + document (Union[dict, ~google.cloud.language_v1.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1.types.Document` + encoding_type (~google.cloud.language_v1.types.EncodingType): The encoding type used by the API to calculate sentence offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1.types.AnalyzeSentimentResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnalyzeSentimentRequest( + document=document, encoding_type=encoding_type) + return self._analyze_sentiment(request, options) + + def analyze_entities(self, document, encoding_type=None, options=None): + """ + Finds named entities (currently proper names and common nouns) in the text + along with entity types, salience, mentions for each entity, and + other properties. + + Example: + >>> from google.cloud import language_v1 + >>> + >>> client = language_v1.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.analyze_entities(document) + + Args: + document (Union[dict, ~google.cloud.language_v1.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1.types.Document` + encoding_type (~google.cloud.language_v1.types.EncodingType): The encoding type used by the API to calculate offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1.types.AnalyzeEntitiesResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnalyzeEntitiesRequest( + document=document, encoding_type=encoding_type) + return self._analyze_entities(request, options) + + def analyze_syntax(self, document, encoding_type=None, options=None): + """ + Analyzes the syntax of the text and provides sentence boundaries and + tokenization along with part of speech tags, dependency trees, and other + properties. + + Example: + >>> from google.cloud import language_v1 + >>> + >>> client = language_v1.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.analyze_syntax(document) + + Args: + document (Union[dict, ~google.cloud.language_v1.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1.types.Document` + encoding_type (~google.cloud.language_v1.types.EncodingType): The encoding type used by the API to calculate offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1.types.AnalyzeSyntaxResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnalyzeSyntaxRequest( + document=document, encoding_type=encoding_type) + return self._analyze_syntax(request, options) + + def annotate_text(self, + document, + features, + encoding_type=None, + options=None): + """ + A convenience method that provides all the features that analyzeSentiment, + analyzeEntities, and analyzeSyntax provide in one call. + + Example: + >>> from google.cloud import language_v1 + >>> + >>> client = language_v1.LanguageServiceClient() + >>> + >>> document = {} + >>> features = {} + >>> + >>> response = client.annotate_text(document, features) + + Args: + document (Union[dict, ~google.cloud.language_v1.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1.types.Document` + features (Union[dict, ~google.cloud.language_v1.types.Features]): The enabled features. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1.types.Features` + encoding_type (~google.cloud.language_v1.types.EncodingType): The encoding type used by the API to calculate offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1.types.AnnotateTextResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnnotateTextRequest( + document=document, features=features, encoding_type=encoding_type) + return self._annotate_text(request, options) diff --git a/language/google/cloud/language_v1/gapic/language_service_client_config.py b/language/google/cloud/language_v1/gapic/language_service_client_config.py new file mode 100644 index 000000000000..3c5406c33132 --- /dev/null +++ b/language/google/cloud/language_v1/gapic/language_service_client_config.py @@ -0,0 +1,43 @@ +config = { + "interfaces": { + "google.cloud.language.v1.LanguageService": { + "retry_codes": { + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], + "non_idempotent": [] + }, + "retry_params": { + "default": { + "initial_retry_delay_millis": 100, + "retry_delay_multiplier": 1.3, + "max_retry_delay_millis": 60000, + "initial_rpc_timeout_millis": 60000, + "rpc_timeout_multiplier": 1.0, + "max_rpc_timeout_millis": 60000, + "total_timeout_millis": 600000 + } + }, + "methods": { + "AnalyzeSentiment": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "AnalyzeEntities": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "AnalyzeSyntax": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "AnnotateText": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + } + } + } + } +} diff --git a/language/google/cloud/gapic/language/v1beta2/__init__.py b/language/google/cloud/language_v1/proto/__init__.py similarity index 100% rename from language/google/cloud/gapic/language/v1beta2/__init__.py rename to language/google/cloud/language_v1/proto/__init__.py diff --git a/language/google/cloud/proto/language/v1/language_service_pb2.py b/language/google/cloud/language_v1/proto/language_service_pb2.py similarity index 78% rename from language/google/cloud/proto/language/v1/language_service_pb2.py rename to language/google/cloud/language_v1/proto/language_service_pb2.py index 98d59f56272c..8c2525bc0439 100644 --- a/language/google/cloud/proto/language/v1/language_service_pb2.py +++ b/language/google/cloud/language_v1/proto/language_service_pb2.py @@ -1,5 +1,5 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/proto/language/v1/language_service.proto +# source: google/cloud/language_v1/proto/language_service.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) @@ -18,10 +18,10 @@ DESCRIPTOR = _descriptor.FileDescriptor( - name='google/cloud/proto/language/v1/language_service.proto', + name='google/cloud/language_v1/proto/language_service.proto', package='google.cloud.language.v1', syntax='proto3', - serialized_pb=_b('\n5google/cloud/proto/language/v1/language_service.proto\x12\x18google.cloud.language.v1\x1a\x1cgoogle/api/annotations.proto\"\xc3\x01\n\x08\x44ocument\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.google.cloud.language.v1.Document.Type\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x19\n\x0fgcs_content_uri\x18\x03 \x01(\tH\x00\x12\x10\n\x08language\x18\x04 \x01(\t\"6\n\x04Type\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nPLAIN_TEXT\x10\x01\x12\x08\n\x04HTML\x10\x02\x42\x08\n\x06source\"t\n\x08Sentence\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12\x36\n\tsentiment\x18\x02 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\"\x86\x03\n\x06\x45ntity\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x33\n\x04type\x18\x02 \x01(\x0e\x32%.google.cloud.language.v1.Entity.Type\x12@\n\x08metadata\x18\x03 \x03(\x0b\x32..google.cloud.language.v1.Entity.MetadataEntry\x12\x10\n\x08salience\x18\x04 \x01(\x02\x12\x39\n\x08mentions\x18\x05 \x03(\x0b\x32\'.google.cloud.language.v1.EntityMention\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"y\n\x04Type\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06PERSON\x10\x01\x12\x0c\n\x08LOCATION\x10\x02\x12\x10\n\x0cORGANIZATION\x10\x03\x12\t\n\x05\x45VENT\x10\x04\x12\x0f\n\x0bWORK_OF_ART\x10\x05\x12\x11\n\rCONSUMER_GOOD\x10\x06\x12\t\n\x05OTHER\x10\x07\"\xcb\x01\n\x05Token\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12>\n\x0epart_of_speech\x18\x02 \x01(\x0b\x32&.google.cloud.language.v1.PartOfSpeech\x12\x41\n\x0f\x64\x65pendency_edge\x18\x03 \x01(\x0b\x32(.google.cloud.language.v1.DependencyEdge\x12\r\n\x05lemma\x18\x04 \x01(\t\"-\n\tSentiment\x12\x11\n\tmagnitude\x18\x02 \x01(\x02\x12\r\n\x05score\x18\x03 \x01(\x02\"\xa3\x10\n\x0cPartOfSpeech\x12\x37\n\x03tag\x18\x01 \x01(\x0e\x32*.google.cloud.language.v1.PartOfSpeech.Tag\x12=\n\x06\x61spect\x18\x02 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Aspect\x12\x39\n\x04\x63\x61se\x18\x03 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Case\x12\x39\n\x04\x66orm\x18\x04 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Form\x12=\n\x06gender\x18\x05 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Gender\x12\x39\n\x04mood\x18\x06 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Mood\x12=\n\x06number\x18\x07 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Number\x12=\n\x06person\x18\x08 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Person\x12=\n\x06proper\x18\t \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Proper\x12G\n\x0breciprocity\x18\n \x01(\x0e\x32\x32.google.cloud.language.v1.PartOfSpeech.Reciprocity\x12;\n\x05tense\x18\x0b \x01(\x0e\x32,.google.cloud.language.v1.PartOfSpeech.Tense\x12;\n\x05voice\x18\x0c \x01(\x0e\x32,.google.cloud.language.v1.PartOfSpeech.Voice\"\x8d\x01\n\x03Tag\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x41\x44J\x10\x01\x12\x07\n\x03\x41\x44P\x10\x02\x12\x07\n\x03\x41\x44V\x10\x03\x12\x08\n\x04\x43ONJ\x10\x04\x12\x07\n\x03\x44\x45T\x10\x05\x12\x08\n\x04NOUN\x10\x06\x12\x07\n\x03NUM\x10\x07\x12\x08\n\x04PRON\x10\x08\x12\x07\n\x03PRT\x10\t\x12\t\n\x05PUNCT\x10\n\x12\x08\n\x04VERB\x10\x0b\x12\x05\n\x01X\x10\x0c\x12\t\n\x05\x41\x46\x46IX\x10\r\"O\n\x06\x41spect\x12\x12\n\x0e\x41SPECT_UNKNOWN\x10\x00\x12\x0e\n\nPERFECTIVE\x10\x01\x12\x10\n\x0cIMPERFECTIVE\x10\x02\x12\x0f\n\x0bPROGRESSIVE\x10\x03\"\xf8\x01\n\x04\x43\x61se\x12\x10\n\x0c\x43\x41SE_UNKNOWN\x10\x00\x12\x0e\n\nACCUSATIVE\x10\x01\x12\r\n\tADVERBIAL\x10\x02\x12\x11\n\rCOMPLEMENTIVE\x10\x03\x12\n\n\x06\x44\x41TIVE\x10\x04\x12\x0c\n\x08GENITIVE\x10\x05\x12\x10\n\x0cINSTRUMENTAL\x10\x06\x12\x0c\n\x08LOCATIVE\x10\x07\x12\x0e\n\nNOMINATIVE\x10\x08\x12\x0b\n\x07OBLIQUE\x10\t\x12\r\n\tPARTITIVE\x10\n\x12\x11\n\rPREPOSITIONAL\x10\x0b\x12\x12\n\x0eREFLEXIVE_CASE\x10\x0c\x12\x11\n\rRELATIVE_CASE\x10\r\x12\x0c\n\x08VOCATIVE\x10\x0e\"\xaf\x01\n\x04\x46orm\x12\x10\n\x0c\x46ORM_UNKNOWN\x10\x00\x12\x0c\n\x08\x41\x44NOMIAL\x10\x01\x12\r\n\tAUXILIARY\x10\x02\x12\x12\n\x0e\x43OMPLEMENTIZER\x10\x03\x12\x10\n\x0c\x46INAL_ENDING\x10\x04\x12\n\n\x06GERUND\x10\x05\x12\n\n\x06REALIS\x10\x06\x12\x0c\n\x08IRREALIS\x10\x07\x12\t\n\x05SHORT\x10\x08\x12\x08\n\x04LONG\x10\t\x12\t\n\x05ORDER\x10\n\x12\x0c\n\x08SPECIFIC\x10\x0b\"E\n\x06Gender\x12\x12\n\x0eGENDER_UNKNOWN\x10\x00\x12\x0c\n\x08\x46\x45MININE\x10\x01\x12\r\n\tMASCULINE\x10\x02\x12\n\n\x06NEUTER\x10\x03\"\x7f\n\x04Mood\x12\x10\n\x0cMOOD_UNKNOWN\x10\x00\x12\x14\n\x10\x43ONDITIONAL_MOOD\x10\x01\x12\x0e\n\nIMPERATIVE\x10\x02\x12\x0e\n\nINDICATIVE\x10\x03\x12\x11\n\rINTERROGATIVE\x10\x04\x12\x0b\n\x07JUSSIVE\x10\x05\x12\x0f\n\x0bSUBJUNCTIVE\x10\x06\"@\n\x06Number\x12\x12\n\x0eNUMBER_UNKNOWN\x10\x00\x12\x0c\n\x08SINGULAR\x10\x01\x12\n\n\x06PLURAL\x10\x02\x12\x08\n\x04\x44UAL\x10\x03\"T\n\x06Person\x12\x12\n\x0ePERSON_UNKNOWN\x10\x00\x12\t\n\x05\x46IRST\x10\x01\x12\n\n\x06SECOND\x10\x02\x12\t\n\x05THIRD\x10\x03\x12\x14\n\x10REFLEXIVE_PERSON\x10\x04\"8\n\x06Proper\x12\x12\n\x0ePROPER_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\x0e\n\nNOT_PROPER\x10\x02\"J\n\x0bReciprocity\x12\x17\n\x13RECIPROCITY_UNKNOWN\x10\x00\x12\x0e\n\nRECIPROCAL\x10\x01\x12\x12\n\x0eNON_RECIPROCAL\x10\x02\"s\n\x05Tense\x12\x11\n\rTENSE_UNKNOWN\x10\x00\x12\x15\n\x11\x43ONDITIONAL_TENSE\x10\x01\x12\n\n\x06\x46UTURE\x10\x02\x12\x08\n\x04PAST\x10\x03\x12\x0b\n\x07PRESENT\x10\x04\x12\r\n\tIMPERFECT\x10\x05\x12\x0e\n\nPLUPERFECT\x10\x06\"B\n\x05Voice\x12\x11\n\rVOICE_UNKNOWN\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\r\n\tCAUSATIVE\x10\x02\x12\x0b\n\x07PASSIVE\x10\x03\"\xd8\x07\n\x0e\x44\x65pendencyEdge\x12\x18\n\x10head_token_index\x18\x01 \x01(\x05\x12=\n\x05label\x18\x02 \x01(\x0e\x32..google.cloud.language.v1.DependencyEdge.Label\"\xec\x06\n\x05Label\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x41\x42\x42REV\x10\x01\x12\t\n\x05\x41\x43OMP\x10\x02\x12\t\n\x05\x41\x44VCL\x10\x03\x12\n\n\x06\x41\x44VMOD\x10\x04\x12\x08\n\x04\x41MOD\x10\x05\x12\t\n\x05\x41PPOS\x10\x06\x12\x08\n\x04\x41TTR\x10\x07\x12\x07\n\x03\x41UX\x10\x08\x12\x0b\n\x07\x41UXPASS\x10\t\x12\x06\n\x02\x43\x43\x10\n\x12\t\n\x05\x43\x43OMP\x10\x0b\x12\x08\n\x04\x43ONJ\x10\x0c\x12\t\n\x05\x43SUBJ\x10\r\x12\r\n\tCSUBJPASS\x10\x0e\x12\x07\n\x03\x44\x45P\x10\x0f\x12\x07\n\x03\x44\x45T\x10\x10\x12\r\n\tDISCOURSE\x10\x11\x12\x08\n\x04\x44OBJ\x10\x12\x12\x08\n\x04\x45XPL\x10\x13\x12\x0c\n\x08GOESWITH\x10\x14\x12\x08\n\x04IOBJ\x10\x15\x12\x08\n\x04MARK\x10\x16\x12\x07\n\x03MWE\x10\x17\x12\x07\n\x03MWV\x10\x18\x12\x07\n\x03NEG\x10\x19\x12\x06\n\x02NN\x10\x1a\x12\x0c\n\x08NPADVMOD\x10\x1b\x12\t\n\x05NSUBJ\x10\x1c\x12\r\n\tNSUBJPASS\x10\x1d\x12\x07\n\x03NUM\x10\x1e\x12\n\n\x06NUMBER\x10\x1f\x12\x05\n\x01P\x10 \x12\r\n\tPARATAXIS\x10!\x12\x0b\n\x07PARTMOD\x10\"\x12\t\n\x05PCOMP\x10#\x12\x08\n\x04POBJ\x10$\x12\x08\n\x04POSS\x10%\x12\x0b\n\x07POSTNEG\x10&\x12\x0b\n\x07PRECOMP\x10\'\x12\x0b\n\x07PRECONJ\x10(\x12\n\n\x06PREDET\x10)\x12\x08\n\x04PREF\x10*\x12\x08\n\x04PREP\x10+\x12\t\n\x05PRONL\x10,\x12\x07\n\x03PRT\x10-\x12\x06\n\x02PS\x10.\x12\x0c\n\x08QUANTMOD\x10/\x12\t\n\x05RCMOD\x10\x30\x12\x0c\n\x08RCMODREL\x10\x31\x12\t\n\x05RDROP\x10\x32\x12\x07\n\x03REF\x10\x33\x12\x0b\n\x07REMNANT\x10\x34\x12\x0e\n\nREPARANDUM\x10\x35\x12\x08\n\x04ROOT\x10\x36\x12\x08\n\x04SNUM\x10\x37\x12\x08\n\x04SUFF\x10\x38\x12\x08\n\x04TMOD\x10\x39\x12\t\n\x05TOPIC\x10:\x12\x08\n\x04VMOD\x10;\x12\x0c\n\x08VOCATIVE\x10<\x12\t\n\x05XCOMP\x10=\x12\n\n\x06SUFFIX\x10>\x12\t\n\x05TITLE\x10?\x12\x0c\n\x08\x41\x44VPHMOD\x10@\x12\x0b\n\x07\x41UXCAUS\x10\x41\x12\t\n\x05\x41UXVV\x10\x42\x12\t\n\x05\x44TMOD\x10\x43\x12\x0b\n\x07\x46OREIGN\x10\x44\x12\x06\n\x02KW\x10\x45\x12\x08\n\x04LIST\x10\x46\x12\x08\n\x04NOMC\x10G\x12\x0c\n\x08NOMCSUBJ\x10H\x12\x10\n\x0cNOMCSUBJPASS\x10I\x12\x08\n\x04NUMC\x10J\x12\x07\n\x03\x43OP\x10K\x12\x0e\n\nDISLOCATED\x10L\"\xaf\x01\n\rEntityMention\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12:\n\x04type\x18\x02 \x01(\x0e\x32,.google.cloud.language.v1.EntityMention.Type\"0\n\x04Type\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\n\n\x06\x43OMMON\x10\x02\"1\n\x08TextSpan\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x14\n\x0c\x62\x65gin_offset\x18\x02 \x01(\x05\"\x8e\x01\n\x17\x41nalyzeSentimentRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"\xa4\x01\n\x18\x41nalyzeSentimentResponse\x12?\n\x12\x64ocument_sentiment\x18\x01 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\x12\x10\n\x08language\x18\x02 \x01(\t\x12\x35\n\tsentences\x18\x03 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\"\x8d\x01\n\x16\x41nalyzeEntitiesRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"_\n\x17\x41nalyzeEntitiesResponse\x12\x32\n\x08\x65ntities\x18\x01 \x03(\x0b\x32 .google.cloud.language.v1.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x8b\x01\n\x14\x41nalyzeSyntaxRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"\x91\x01\n\x15\x41nalyzeSyntaxResponse\x12\x35\n\tsentences\x18\x01 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\x12/\n\x06tokens\x18\x02 \x03(\x0b\x32\x1f.google.cloud.language.v1.Token\x12\x10\n\x08language\x18\x03 \x01(\t\"\xb6\x02\n\x13\x41nnotateTextRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12H\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0b\x32\x36.google.cloud.language.v1.AnnotateTextRequest.Features\x12=\n\rencoding_type\x18\x03 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\x1a`\n\x08\x46\x65\x61tures\x12\x16\n\x0e\x65xtract_syntax\x18\x01 \x01(\x08\x12\x18\n\x10\x65xtract_entities\x18\x02 \x01(\x08\x12\"\n\x1a\x65xtract_document_sentiment\x18\x03 \x01(\x08\"\x85\x02\n\x14\x41nnotateTextResponse\x12\x35\n\tsentences\x18\x01 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\x12/\n\x06tokens\x18\x02 \x03(\x0b\x32\x1f.google.cloud.language.v1.Token\x12\x32\n\x08\x65ntities\x18\x03 \x03(\x0b\x32 .google.cloud.language.v1.Entity\x12?\n\x12\x64ocument_sentiment\x18\x04 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\x12\x10\n\x08language\x18\x05 \x01(\t*8\n\x0c\x45ncodingType\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04UTF8\x10\x01\x12\t\n\x05UTF16\x10\x02\x12\t\n\x05UTF32\x10\x03\x32\x8d\x05\n\x0fLanguageService\x12\xa4\x01\n\x10\x41nalyzeSentiment\x12\x31.google.cloud.language.v1.AnalyzeSentimentRequest\x1a\x32.google.cloud.language.v1.AnalyzeSentimentResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/documents:analyzeSentiment:\x01*\x12\xa0\x01\n\x0f\x41nalyzeEntities\x12\x30.google.cloud.language.v1.AnalyzeEntitiesRequest\x1a\x31.google.cloud.language.v1.AnalyzeEntitiesResponse\"(\x82\xd3\xe4\x93\x02\"\"\x1d/v1/documents:analyzeEntities:\x01*\x12\x98\x01\n\rAnalyzeSyntax\x12..google.cloud.language.v1.AnalyzeSyntaxRequest\x1a/.google.cloud.language.v1.AnalyzeSyntaxResponse\"&\x82\xd3\xe4\x93\x02 \"\x1b/v1/documents:analyzeSyntax:\x01*\x12\x94\x01\n\x0c\x41nnotateText\x12-.google.cloud.language.v1.AnnotateTextRequest\x1a..google.cloud.language.v1.AnnotateTextResponse\"%\x82\xd3\xe4\x93\x02\x1f\"\x1a/v1/documents:annotateText:\x01*Bx\n\x1c\x63om.google.cloud.language.v1B\x14LanguageServiceProtoP\x01Z@google.golang.org/genproto/googleapis/cloud/language/v1;languageb\x06proto3') + serialized_pb=_b('\n5google/cloud/language_v1/proto/language_service.proto\x12\x18google.cloud.language.v1\x1a\x1cgoogle/api/annotations.proto\"\xc3\x01\n\x08\x44ocument\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.google.cloud.language.v1.Document.Type\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x19\n\x0fgcs_content_uri\x18\x03 \x01(\tH\x00\x12\x10\n\x08language\x18\x04 \x01(\t\"6\n\x04Type\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nPLAIN_TEXT\x10\x01\x12\x08\n\x04HTML\x10\x02\x42\x08\n\x06source\"t\n\x08Sentence\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12\x36\n\tsentiment\x18\x02 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\"\xbe\x03\n\x06\x45ntity\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x33\n\x04type\x18\x02 \x01(\x0e\x32%.google.cloud.language.v1.Entity.Type\x12@\n\x08metadata\x18\x03 \x03(\x0b\x32..google.cloud.language.v1.Entity.MetadataEntry\x12\x10\n\x08salience\x18\x04 \x01(\x02\x12\x39\n\x08mentions\x18\x05 \x03(\x0b\x32\'.google.cloud.language.v1.EntityMention\x12\x36\n\tsentiment\x18\x06 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"y\n\x04Type\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06PERSON\x10\x01\x12\x0c\n\x08LOCATION\x10\x02\x12\x10\n\x0cORGANIZATION\x10\x03\x12\t\n\x05\x45VENT\x10\x04\x12\x0f\n\x0bWORK_OF_ART\x10\x05\x12\x11\n\rCONSUMER_GOOD\x10\x06\x12\t\n\x05OTHER\x10\x07\"\xcb\x01\n\x05Token\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12>\n\x0epart_of_speech\x18\x02 \x01(\x0b\x32&.google.cloud.language.v1.PartOfSpeech\x12\x41\n\x0f\x64\x65pendency_edge\x18\x03 \x01(\x0b\x32(.google.cloud.language.v1.DependencyEdge\x12\r\n\x05lemma\x18\x04 \x01(\t\"-\n\tSentiment\x12\x11\n\tmagnitude\x18\x02 \x01(\x02\x12\r\n\x05score\x18\x03 \x01(\x02\"\xa3\x10\n\x0cPartOfSpeech\x12\x37\n\x03tag\x18\x01 \x01(\x0e\x32*.google.cloud.language.v1.PartOfSpeech.Tag\x12=\n\x06\x61spect\x18\x02 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Aspect\x12\x39\n\x04\x63\x61se\x18\x03 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Case\x12\x39\n\x04\x66orm\x18\x04 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Form\x12=\n\x06gender\x18\x05 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Gender\x12\x39\n\x04mood\x18\x06 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Mood\x12=\n\x06number\x18\x07 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Number\x12=\n\x06person\x18\x08 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Person\x12=\n\x06proper\x18\t \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Proper\x12G\n\x0breciprocity\x18\n \x01(\x0e\x32\x32.google.cloud.language.v1.PartOfSpeech.Reciprocity\x12;\n\x05tense\x18\x0b \x01(\x0e\x32,.google.cloud.language.v1.PartOfSpeech.Tense\x12;\n\x05voice\x18\x0c \x01(\x0e\x32,.google.cloud.language.v1.PartOfSpeech.Voice\"\x8d\x01\n\x03Tag\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x41\x44J\x10\x01\x12\x07\n\x03\x41\x44P\x10\x02\x12\x07\n\x03\x41\x44V\x10\x03\x12\x08\n\x04\x43ONJ\x10\x04\x12\x07\n\x03\x44\x45T\x10\x05\x12\x08\n\x04NOUN\x10\x06\x12\x07\n\x03NUM\x10\x07\x12\x08\n\x04PRON\x10\x08\x12\x07\n\x03PRT\x10\t\x12\t\n\x05PUNCT\x10\n\x12\x08\n\x04VERB\x10\x0b\x12\x05\n\x01X\x10\x0c\x12\t\n\x05\x41\x46\x46IX\x10\r\"O\n\x06\x41spect\x12\x12\n\x0e\x41SPECT_UNKNOWN\x10\x00\x12\x0e\n\nPERFECTIVE\x10\x01\x12\x10\n\x0cIMPERFECTIVE\x10\x02\x12\x0f\n\x0bPROGRESSIVE\x10\x03\"\xf8\x01\n\x04\x43\x61se\x12\x10\n\x0c\x43\x41SE_UNKNOWN\x10\x00\x12\x0e\n\nACCUSATIVE\x10\x01\x12\r\n\tADVERBIAL\x10\x02\x12\x11\n\rCOMPLEMENTIVE\x10\x03\x12\n\n\x06\x44\x41TIVE\x10\x04\x12\x0c\n\x08GENITIVE\x10\x05\x12\x10\n\x0cINSTRUMENTAL\x10\x06\x12\x0c\n\x08LOCATIVE\x10\x07\x12\x0e\n\nNOMINATIVE\x10\x08\x12\x0b\n\x07OBLIQUE\x10\t\x12\r\n\tPARTITIVE\x10\n\x12\x11\n\rPREPOSITIONAL\x10\x0b\x12\x12\n\x0eREFLEXIVE_CASE\x10\x0c\x12\x11\n\rRELATIVE_CASE\x10\r\x12\x0c\n\x08VOCATIVE\x10\x0e\"\xaf\x01\n\x04\x46orm\x12\x10\n\x0c\x46ORM_UNKNOWN\x10\x00\x12\x0c\n\x08\x41\x44NOMIAL\x10\x01\x12\r\n\tAUXILIARY\x10\x02\x12\x12\n\x0e\x43OMPLEMENTIZER\x10\x03\x12\x10\n\x0c\x46INAL_ENDING\x10\x04\x12\n\n\x06GERUND\x10\x05\x12\n\n\x06REALIS\x10\x06\x12\x0c\n\x08IRREALIS\x10\x07\x12\t\n\x05SHORT\x10\x08\x12\x08\n\x04LONG\x10\t\x12\t\n\x05ORDER\x10\n\x12\x0c\n\x08SPECIFIC\x10\x0b\"E\n\x06Gender\x12\x12\n\x0eGENDER_UNKNOWN\x10\x00\x12\x0c\n\x08\x46\x45MININE\x10\x01\x12\r\n\tMASCULINE\x10\x02\x12\n\n\x06NEUTER\x10\x03\"\x7f\n\x04Mood\x12\x10\n\x0cMOOD_UNKNOWN\x10\x00\x12\x14\n\x10\x43ONDITIONAL_MOOD\x10\x01\x12\x0e\n\nIMPERATIVE\x10\x02\x12\x0e\n\nINDICATIVE\x10\x03\x12\x11\n\rINTERROGATIVE\x10\x04\x12\x0b\n\x07JUSSIVE\x10\x05\x12\x0f\n\x0bSUBJUNCTIVE\x10\x06\"@\n\x06Number\x12\x12\n\x0eNUMBER_UNKNOWN\x10\x00\x12\x0c\n\x08SINGULAR\x10\x01\x12\n\n\x06PLURAL\x10\x02\x12\x08\n\x04\x44UAL\x10\x03\"T\n\x06Person\x12\x12\n\x0ePERSON_UNKNOWN\x10\x00\x12\t\n\x05\x46IRST\x10\x01\x12\n\n\x06SECOND\x10\x02\x12\t\n\x05THIRD\x10\x03\x12\x14\n\x10REFLEXIVE_PERSON\x10\x04\"8\n\x06Proper\x12\x12\n\x0ePROPER_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\x0e\n\nNOT_PROPER\x10\x02\"J\n\x0bReciprocity\x12\x17\n\x13RECIPROCITY_UNKNOWN\x10\x00\x12\x0e\n\nRECIPROCAL\x10\x01\x12\x12\n\x0eNON_RECIPROCAL\x10\x02\"s\n\x05Tense\x12\x11\n\rTENSE_UNKNOWN\x10\x00\x12\x15\n\x11\x43ONDITIONAL_TENSE\x10\x01\x12\n\n\x06\x46UTURE\x10\x02\x12\x08\n\x04PAST\x10\x03\x12\x0b\n\x07PRESENT\x10\x04\x12\r\n\tIMPERFECT\x10\x05\x12\x0e\n\nPLUPERFECT\x10\x06\"B\n\x05Voice\x12\x11\n\rVOICE_UNKNOWN\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\r\n\tCAUSATIVE\x10\x02\x12\x0b\n\x07PASSIVE\x10\x03\"\x95\x08\n\x0e\x44\x65pendencyEdge\x12\x18\n\x10head_token_index\x18\x01 \x01(\x05\x12=\n\x05label\x18\x02 \x01(\x0e\x32..google.cloud.language.v1.DependencyEdge.Label\"\xa9\x07\n\x05Label\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x41\x42\x42REV\x10\x01\x12\t\n\x05\x41\x43OMP\x10\x02\x12\t\n\x05\x41\x44VCL\x10\x03\x12\n\n\x06\x41\x44VMOD\x10\x04\x12\x08\n\x04\x41MOD\x10\x05\x12\t\n\x05\x41PPOS\x10\x06\x12\x08\n\x04\x41TTR\x10\x07\x12\x07\n\x03\x41UX\x10\x08\x12\x0b\n\x07\x41UXPASS\x10\t\x12\x06\n\x02\x43\x43\x10\n\x12\t\n\x05\x43\x43OMP\x10\x0b\x12\x08\n\x04\x43ONJ\x10\x0c\x12\t\n\x05\x43SUBJ\x10\r\x12\r\n\tCSUBJPASS\x10\x0e\x12\x07\n\x03\x44\x45P\x10\x0f\x12\x07\n\x03\x44\x45T\x10\x10\x12\r\n\tDISCOURSE\x10\x11\x12\x08\n\x04\x44OBJ\x10\x12\x12\x08\n\x04\x45XPL\x10\x13\x12\x0c\n\x08GOESWITH\x10\x14\x12\x08\n\x04IOBJ\x10\x15\x12\x08\n\x04MARK\x10\x16\x12\x07\n\x03MWE\x10\x17\x12\x07\n\x03MWV\x10\x18\x12\x07\n\x03NEG\x10\x19\x12\x06\n\x02NN\x10\x1a\x12\x0c\n\x08NPADVMOD\x10\x1b\x12\t\n\x05NSUBJ\x10\x1c\x12\r\n\tNSUBJPASS\x10\x1d\x12\x07\n\x03NUM\x10\x1e\x12\n\n\x06NUMBER\x10\x1f\x12\x05\n\x01P\x10 \x12\r\n\tPARATAXIS\x10!\x12\x0b\n\x07PARTMOD\x10\"\x12\t\n\x05PCOMP\x10#\x12\x08\n\x04POBJ\x10$\x12\x08\n\x04POSS\x10%\x12\x0b\n\x07POSTNEG\x10&\x12\x0b\n\x07PRECOMP\x10\'\x12\x0b\n\x07PRECONJ\x10(\x12\n\n\x06PREDET\x10)\x12\x08\n\x04PREF\x10*\x12\x08\n\x04PREP\x10+\x12\t\n\x05PRONL\x10,\x12\x07\n\x03PRT\x10-\x12\x06\n\x02PS\x10.\x12\x0c\n\x08QUANTMOD\x10/\x12\t\n\x05RCMOD\x10\x30\x12\x0c\n\x08RCMODREL\x10\x31\x12\t\n\x05RDROP\x10\x32\x12\x07\n\x03REF\x10\x33\x12\x0b\n\x07REMNANT\x10\x34\x12\x0e\n\nREPARANDUM\x10\x35\x12\x08\n\x04ROOT\x10\x36\x12\x08\n\x04SNUM\x10\x37\x12\x08\n\x04SUFF\x10\x38\x12\x08\n\x04TMOD\x10\x39\x12\t\n\x05TOPIC\x10:\x12\x08\n\x04VMOD\x10;\x12\x0c\n\x08VOCATIVE\x10<\x12\t\n\x05XCOMP\x10=\x12\n\n\x06SUFFIX\x10>\x12\t\n\x05TITLE\x10?\x12\x0c\n\x08\x41\x44VPHMOD\x10@\x12\x0b\n\x07\x41UXCAUS\x10\x41\x12\t\n\x05\x41UXVV\x10\x42\x12\t\n\x05\x44TMOD\x10\x43\x12\x0b\n\x07\x46OREIGN\x10\x44\x12\x06\n\x02KW\x10\x45\x12\x08\n\x04LIST\x10\x46\x12\x08\n\x04NOMC\x10G\x12\x0c\n\x08NOMCSUBJ\x10H\x12\x10\n\x0cNOMCSUBJPASS\x10I\x12\x08\n\x04NUMC\x10J\x12\x07\n\x03\x43OP\x10K\x12\x0e\n\nDISLOCATED\x10L\x12\x07\n\x03\x41SP\x10M\x12\x08\n\x04GMOD\x10N\x12\x08\n\x04GOBJ\x10O\x12\n\n\x06INFMOD\x10P\x12\x07\n\x03MES\x10Q\x12\t\n\x05NCOMP\x10R\"\xe7\x01\n\rEntityMention\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12:\n\x04type\x18\x02 \x01(\x0e\x32,.google.cloud.language.v1.EntityMention.Type\x12\x36\n\tsentiment\x18\x03 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\"0\n\x04Type\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\n\n\x06\x43OMMON\x10\x02\"1\n\x08TextSpan\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x14\n\x0c\x62\x65gin_offset\x18\x02 \x01(\x05\"\x8e\x01\n\x17\x41nalyzeSentimentRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"\xa4\x01\n\x18\x41nalyzeSentimentResponse\x12?\n\x12\x64ocument_sentiment\x18\x01 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\x12\x10\n\x08language\x18\x02 \x01(\t\x12\x35\n\tsentences\x18\x03 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\"\x94\x01\n\x1d\x41nalyzeEntitySentimentRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"f\n\x1e\x41nalyzeEntitySentimentResponse\x12\x32\n\x08\x65ntities\x18\x01 \x03(\x0b\x32 .google.cloud.language.v1.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x8d\x01\n\x16\x41nalyzeEntitiesRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"_\n\x17\x41nalyzeEntitiesResponse\x12\x32\n\x08\x65ntities\x18\x01 \x03(\x0b\x32 .google.cloud.language.v1.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x8b\x01\n\x14\x41nalyzeSyntaxRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"\x91\x01\n\x15\x41nalyzeSyntaxResponse\x12\x35\n\tsentences\x18\x01 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\x12/\n\x06tokens\x18\x02 \x03(\x0b\x32\x1f.google.cloud.language.v1.Token\x12\x10\n\x08language\x18\x03 \x01(\t\"\xd9\x02\n\x13\x41nnotateTextRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12H\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0b\x32\x36.google.cloud.language.v1.AnnotateTextRequest.Features\x12=\n\rencoding_type\x18\x03 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\x1a\x82\x01\n\x08\x46\x65\x61tures\x12\x16\n\x0e\x65xtract_syntax\x18\x01 \x01(\x08\x12\x18\n\x10\x65xtract_entities\x18\x02 \x01(\x08\x12\"\n\x1a\x65xtract_document_sentiment\x18\x03 \x01(\x08\x12 \n\x18\x65xtract_entity_sentiment\x18\x04 \x01(\x08\"\x85\x02\n\x14\x41nnotateTextResponse\x12\x35\n\tsentences\x18\x01 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\x12/\n\x06tokens\x18\x02 \x03(\x0b\x32\x1f.google.cloud.language.v1.Token\x12\x32\n\x08\x65ntities\x18\x03 \x03(\x0b\x32 .google.cloud.language.v1.Entity\x12?\n\x12\x64ocument_sentiment\x18\x04 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\x12\x10\n\x08language\x18\x05 \x01(\t*8\n\x0c\x45ncodingType\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04UTF8\x10\x01\x12\t\n\x05UTF16\x10\x02\x12\t\n\x05UTF32\x10\x03\x32\xcc\x06\n\x0fLanguageService\x12\xa4\x01\n\x10\x41nalyzeSentiment\x12\x31.google.cloud.language.v1.AnalyzeSentimentRequest\x1a\x32.google.cloud.language.v1.AnalyzeSentimentResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/documents:analyzeSentiment:\x01*\x12\xa0\x01\n\x0f\x41nalyzeEntities\x12\x30.google.cloud.language.v1.AnalyzeEntitiesRequest\x1a\x31.google.cloud.language.v1.AnalyzeEntitiesResponse\"(\x82\xd3\xe4\x93\x02\"\"\x1d/v1/documents:analyzeEntities:\x01*\x12\xbc\x01\n\x16\x41nalyzeEntitySentiment\x12\x37.google.cloud.language.v1.AnalyzeEntitySentimentRequest\x1a\x38.google.cloud.language.v1.AnalyzeEntitySentimentResponse\"/\x82\xd3\xe4\x93\x02)\"$/v1/documents:analyzeEntitySentiment:\x01*\x12\x98\x01\n\rAnalyzeSyntax\x12..google.cloud.language.v1.AnalyzeSyntaxRequest\x1a/.google.cloud.language.v1.AnalyzeSyntaxResponse\"&\x82\xd3\xe4\x93\x02 \"\x1b/v1/documents:analyzeSyntax:\x01*\x12\x94\x01\n\x0c\x41nnotateText\x12-.google.cloud.language.v1.AnnotateTextRequest\x1a..google.cloud.language.v1.AnnotateTextResponse\"%\x82\xd3\xe4\x93\x02\x1f\"\x1a/v1/documents:annotateText:\x01*Bx\n\x1c\x63om.google.cloud.language.v1B\x14LanguageServiceProtoP\x01Z@google.golang.org/genproto/googleapis/cloud/language/v1;languageb\x06proto3') , dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,]) _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -51,8 +51,8 @@ ], containing_type=None, options=None, - serialized_start=5797, - serialized_end=5853, + serialized_start=6260, + serialized_end=6316, ) _sym_db.RegisterEnumDescriptor(_ENCODINGTYPE) @@ -130,8 +130,8 @@ ], containing_type=None, options=None, - serialized_start=699, - serialized_end=820, + serialized_start=755, + serialized_end=876, ) _sym_db.RegisterEnumDescriptor(_ENTITY_TYPE) @@ -200,8 +200,8 @@ ], containing_type=None, options=None, - serialized_start=1837, - serialized_end=1978, + serialized_start=1893, + serialized_end=2034, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_TAG) @@ -230,8 +230,8 @@ ], containing_type=None, options=None, - serialized_start=1980, - serialized_end=2059, + serialized_start=2036, + serialized_end=2115, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_ASPECT) @@ -304,8 +304,8 @@ ], containing_type=None, options=None, - serialized_start=2062, - serialized_end=2310, + serialized_start=2118, + serialized_end=2366, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_CASE) @@ -366,8 +366,8 @@ ], containing_type=None, options=None, - serialized_start=2313, - serialized_end=2488, + serialized_start=2369, + serialized_end=2544, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_FORM) @@ -396,8 +396,8 @@ ], containing_type=None, options=None, - serialized_start=2490, - serialized_end=2559, + serialized_start=2546, + serialized_end=2615, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_GENDER) @@ -438,8 +438,8 @@ ], containing_type=None, options=None, - serialized_start=2561, - serialized_end=2688, + serialized_start=2617, + serialized_end=2744, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_MOOD) @@ -468,8 +468,8 @@ ], containing_type=None, options=None, - serialized_start=2690, - serialized_end=2754, + serialized_start=2746, + serialized_end=2810, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_NUMBER) @@ -502,8 +502,8 @@ ], containing_type=None, options=None, - serialized_start=2756, - serialized_end=2840, + serialized_start=2812, + serialized_end=2896, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_PERSON) @@ -528,8 +528,8 @@ ], containing_type=None, options=None, - serialized_start=2842, - serialized_end=2898, + serialized_start=2898, + serialized_end=2954, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_PROPER) @@ -554,8 +554,8 @@ ], containing_type=None, options=None, - serialized_start=2900, - serialized_end=2974, + serialized_start=2956, + serialized_end=3030, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_RECIPROCITY) @@ -596,8 +596,8 @@ ], containing_type=None, options=None, - serialized_start=2976, - serialized_end=3091, + serialized_start=3032, + serialized_end=3147, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_TENSE) @@ -626,8 +626,8 @@ ], containing_type=None, options=None, - serialized_start=3093, - serialized_end=3159, + serialized_start=3149, + serialized_end=3215, ) _sym_db.RegisterEnumDescriptor(_PARTOFSPEECH_VOICE) @@ -945,11 +945,35 @@ name='DISLOCATED', index=76, number=76, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='ASP', index=77, number=77, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GMOD', index=78, number=78, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GOBJ', index=79, number=79, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INFMOD', index=80, number=80, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MES', index=81, number=81, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NCOMP', index=82, number=82, + options=None, + type=None), ], containing_type=None, options=None, - serialized_start=3270, - serialized_end=4146, + serialized_start=3326, + serialized_end=4263, ) _sym_db.RegisterEnumDescriptor(_DEPENDENCYEDGE_LABEL) @@ -974,8 +998,8 @@ ], containing_type=None, options=None, - serialized_start=4276, - serialized_end=4324, + serialized_start=4449, + serialized_end=4497, ) _sym_db.RegisterEnumDescriptor(_ENTITYMENTION_TYPE) @@ -1107,8 +1131,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=650, - serialized_end=697, + serialized_start=706, + serialized_end=753, ) _ENTITY = _descriptor.Descriptor( @@ -1153,6 +1177,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), + _descriptor.FieldDescriptor( + name='sentiment', full_name='google.cloud.language.v1.Entity.sentiment', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), ], extensions=[ ], @@ -1167,7 +1198,7 @@ oneofs=[ ], serialized_start=430, - serialized_end=820, + serialized_end=876, ) @@ -1218,8 +1249,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=823, - serialized_end=1026, + serialized_start=879, + serialized_end=1082, ) @@ -1256,8 +1287,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1028, - serialized_end=1073, + serialized_start=1084, + serialized_end=1129, ) @@ -1376,8 +1407,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1076, - serialized_end=3159, + serialized_start=1132, + serialized_end=3215, ) @@ -1415,8 +1446,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3162, - serialized_end=4146, + serialized_start=3218, + serialized_end=4263, ) @@ -1441,6 +1472,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), + _descriptor.FieldDescriptor( + name='sentiment', full_name='google.cloud.language.v1.EntityMention.sentiment', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), ], extensions=[ ], @@ -1454,8 +1492,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4149, - serialized_end=4324, + serialized_start=4266, + serialized_end=4497, ) @@ -1492,8 +1530,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4326, - serialized_end=4375, + serialized_start=4499, + serialized_end=4548, ) @@ -1530,8 +1568,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4378, - serialized_end=4520, + serialized_start=4551, + serialized_end=4693, ) @@ -1575,8 +1613,84 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4523, - serialized_end=4687, + serialized_start=4696, + serialized_end=4860, +) + + +_ANALYZEENTITYSENTIMENTREQUEST = _descriptor.Descriptor( + name='AnalyzeEntitySentimentRequest', + full_name='google.cloud.language.v1.AnalyzeEntitySentimentRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='document', full_name='google.cloud.language.v1.AnalyzeEntitySentimentRequest.document', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='encoding_type', full_name='google.cloud.language.v1.AnalyzeEntitySentimentRequest.encoding_type', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4863, + serialized_end=5011, +) + + +_ANALYZEENTITYSENTIMENTRESPONSE = _descriptor.Descriptor( + name='AnalyzeEntitySentimentResponse', + full_name='google.cloud.language.v1.AnalyzeEntitySentimentResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='entities', full_name='google.cloud.language.v1.AnalyzeEntitySentimentResponse.entities', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='language', full_name='google.cloud.language.v1.AnalyzeEntitySentimentResponse.language', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=5013, + serialized_end=5115, ) @@ -1613,8 +1727,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4690, - serialized_end=4831, + serialized_start=5118, + serialized_end=5259, ) @@ -1651,8 +1765,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4833, - serialized_end=4928, + serialized_start=5261, + serialized_end=5356, ) @@ -1689,8 +1803,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4931, - serialized_end=5070, + serialized_start=5359, + serialized_end=5498, ) @@ -1734,8 +1848,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5073, - serialized_end=5218, + serialized_start=5501, + serialized_end=5646, ) @@ -1767,6 +1881,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), + _descriptor.FieldDescriptor( + name='extract_entity_sentiment', full_name='google.cloud.language.v1.AnnotateTextRequest.Features.extract_entity_sentiment', index=3, + number=4, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), ], extensions=[ ], @@ -1779,8 +1900,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5435, - serialized_end=5531, + serialized_start=5864, + serialized_end=5994, ) _ANNOTATETEXTREQUEST = _descriptor.Descriptor( @@ -1823,8 +1944,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5221, - serialized_end=5531, + serialized_start=5649, + serialized_end=5994, ) @@ -1882,8 +2003,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5534, - serialized_end=5795, + serialized_start=5997, + serialized_end=6258, ) _DOCUMENT.fields_by_name['type'].enum_type = _DOCUMENT_TYPE @@ -1900,6 +2021,7 @@ _ENTITY.fields_by_name['type'].enum_type = _ENTITY_TYPE _ENTITY.fields_by_name['metadata'].message_type = _ENTITY_METADATAENTRY _ENTITY.fields_by_name['mentions'].message_type = _ENTITYMENTION +_ENTITY.fields_by_name['sentiment'].message_type = _SENTIMENT _ENTITY_TYPE.containing_type = _ENTITY _TOKEN.fields_by_name['text'].message_type = _TEXTSPAN _TOKEN.fields_by_name['part_of_speech'].message_type = _PARTOFSPEECH @@ -1932,11 +2054,15 @@ _DEPENDENCYEDGE_LABEL.containing_type = _DEPENDENCYEDGE _ENTITYMENTION.fields_by_name['text'].message_type = _TEXTSPAN _ENTITYMENTION.fields_by_name['type'].enum_type = _ENTITYMENTION_TYPE +_ENTITYMENTION.fields_by_name['sentiment'].message_type = _SENTIMENT _ENTITYMENTION_TYPE.containing_type = _ENTITYMENTION _ANALYZESENTIMENTREQUEST.fields_by_name['document'].message_type = _DOCUMENT _ANALYZESENTIMENTREQUEST.fields_by_name['encoding_type'].enum_type = _ENCODINGTYPE _ANALYZESENTIMENTRESPONSE.fields_by_name['document_sentiment'].message_type = _SENTIMENT _ANALYZESENTIMENTRESPONSE.fields_by_name['sentences'].message_type = _SENTENCE +_ANALYZEENTITYSENTIMENTREQUEST.fields_by_name['document'].message_type = _DOCUMENT +_ANALYZEENTITYSENTIMENTREQUEST.fields_by_name['encoding_type'].enum_type = _ENCODINGTYPE +_ANALYZEENTITYSENTIMENTRESPONSE.fields_by_name['entities'].message_type = _ENTITY _ANALYZEENTITIESREQUEST.fields_by_name['document'].message_type = _DOCUMENT _ANALYZEENTITIESREQUEST.fields_by_name['encoding_type'].enum_type = _ENCODINGTYPE _ANALYZEENTITIESRESPONSE.fields_by_name['entities'].message_type = _ENTITY @@ -1963,6 +2089,8 @@ DESCRIPTOR.message_types_by_name['TextSpan'] = _TEXTSPAN DESCRIPTOR.message_types_by_name['AnalyzeSentimentRequest'] = _ANALYZESENTIMENTREQUEST DESCRIPTOR.message_types_by_name['AnalyzeSentimentResponse'] = _ANALYZESENTIMENTRESPONSE +DESCRIPTOR.message_types_by_name['AnalyzeEntitySentimentRequest'] = _ANALYZEENTITYSENTIMENTREQUEST +DESCRIPTOR.message_types_by_name['AnalyzeEntitySentimentResponse'] = _ANALYZEENTITYSENTIMENTRESPONSE DESCRIPTOR.message_types_by_name['AnalyzeEntitiesRequest'] = _ANALYZEENTITIESREQUEST DESCRIPTOR.message_types_by_name['AnalyzeEntitiesResponse'] = _ANALYZEENTITIESRESPONSE DESCRIPTOR.message_types_by_name['AnalyzeSyntaxRequest'] = _ANALYZESYNTAXREQUEST @@ -1973,7 +2101,7 @@ Document = _reflection.GeneratedProtocolMessageType('Document', (_message.Message,), dict( DESCRIPTOR = _DOCUMENT, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents the input to API methods. @@ -1996,12 +2124,12 @@ language: The language of the document (if not specified, the language is automatically detected). Both ISO and BCP-47 language codes - are accepted. `Language Support - `__ - 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. + are accepted. `Language Support `__ 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. """, # @@protoc_insertion_point(class_scope:google.cloud.language.v1.Document) )) @@ -2009,7 +2137,7 @@ Sentence = _reflection.GeneratedProtocolMessageType('Sentence', (_message.Message,), dict( DESCRIPTOR = _SENTENCE, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents a sentence in the input document. @@ -2032,12 +2160,12 @@ MetadataEntry = _reflection.GeneratedProtocolMessageType('MetadataEntry', (_message.Message,), dict( DESCRIPTOR = _ENTITY_METADATAENTRY, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' # @@protoc_insertion_point(class_scope:google.cloud.language.v1.Entity.MetadataEntry) )) , DESCRIPTOR = _ENTITY, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents a phrase in the text that is a known entity, such as a person, an organization, or location. The API associates information, @@ -2062,6 +2190,12 @@ mentions: The mentions of this entity in the input document. The API currently supports proper noun mentions. + sentiment: + For calls to [AnalyzeEntitySentiment][] or if [AnnotateTextReq + uest.Features.extract\_entity\_sentiment][google.cloud.languag + e.v1.AnnotateTextRequest.Features.extract\_entity\_sentiment] + is set to true, this field will contain the aggregate + sentiment expressed for this entity in the provided document. """, # @@protoc_insertion_point(class_scope:google.cloud.language.v1.Entity) )) @@ -2070,7 +2204,7 @@ Token = _reflection.GeneratedProtocolMessageType('Token', (_message.Message,), dict( DESCRIPTOR = _TOKEN, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents the smallest syntactic building block of the text. @@ -2093,7 +2227,7 @@ Sentiment = _reflection.GeneratedProtocolMessageType('Sentiment', (_message.Message,), dict( DESCRIPTOR = _SENTIMENT, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents the feeling associated with the entire text or entities in the text. @@ -2114,7 +2248,7 @@ PartOfSpeech = _reflection.GeneratedProtocolMessageType('PartOfSpeech', (_message.Message,), dict( DESCRIPTOR = _PARTOFSPEECH, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents part of speech information for a token. Parts of speech are as defined in @@ -2153,7 +2287,7 @@ DependencyEdge = _reflection.GeneratedProtocolMessageType('DependencyEdge', (_message.Message,), dict( DESCRIPTOR = _DEPENDENCYEDGE, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents dependency parse tree information for a token. (For more information on dependency labels, see @@ -2176,7 +2310,7 @@ EntityMention = _reflection.GeneratedProtocolMessageType('EntityMention', (_message.Message,), dict( DESCRIPTOR = _ENTITYMENTION, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents a mention for an entity in the text. Currently, proper noun mentions are supported. @@ -2187,6 +2321,13 @@ The mention text. type: The type of the entity mention. + sentiment: + For calls to [AnalyzeEntitySentiment][] or if [AnnotateTextReq + uest.Features.extract\_entity\_sentiment][google.cloud.languag + e.v1.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. """, # @@protoc_insertion_point(class_scope:google.cloud.language.v1.EntityMention) )) @@ -2194,7 +2335,7 @@ TextSpan = _reflection.GeneratedProtocolMessageType('TextSpan', (_message.Message,), dict( DESCRIPTOR = _TEXTSPAN, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """Represents an output piece of text. @@ -2214,7 +2355,7 @@ AnalyzeSentimentRequest = _reflection.GeneratedProtocolMessageType('AnalyzeSentimentRequest', (_message.Message,), dict( DESCRIPTOR = _ANALYZESENTIMENTREQUEST, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """The sentiment analysis request message. @@ -2232,7 +2373,7 @@ AnalyzeSentimentResponse = _reflection.GeneratedProtocolMessageType('AnalyzeSentimentResponse', (_message.Message,), dict( DESCRIPTOR = _ANALYZESENTIMENTRESPONSE, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """The sentiment analysis response message. @@ -2252,9 +2393,47 @@ )) _sym_db.RegisterMessage(AnalyzeSentimentResponse) +AnalyzeEntitySentimentRequest = _reflection.GeneratedProtocolMessageType('AnalyzeEntitySentimentRequest', (_message.Message,), dict( + DESCRIPTOR = _ANALYZEENTITYSENTIMENTREQUEST, + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' + , + __doc__ = """The entity-level sentiment analysis request message. + + + Attributes: + document: + Input document. + encoding_type: + The encoding type used by the API to calculate offsets. + """, + # @@protoc_insertion_point(class_scope:google.cloud.language.v1.AnalyzeEntitySentimentRequest) + )) +_sym_db.RegisterMessage(AnalyzeEntitySentimentRequest) + +AnalyzeEntitySentimentResponse = _reflection.GeneratedProtocolMessageType('AnalyzeEntitySentimentResponse', (_message.Message,), dict( + DESCRIPTOR = _ANALYZEENTITYSENTIMENTRESPONSE, + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' + , + __doc__ = """The entity-level sentiment analysis response message. + + + Attributes: + entities: + The recognized entities in the input document with associated + sentiments. + language: + 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][googl + e.cloud.language.v1.Document.language] field for more details. + """, + # @@protoc_insertion_point(class_scope:google.cloud.language.v1.AnalyzeEntitySentimentResponse) + )) +_sym_db.RegisterMessage(AnalyzeEntitySentimentResponse) + AnalyzeEntitiesRequest = _reflection.GeneratedProtocolMessageType('AnalyzeEntitiesRequest', (_message.Message,), dict( DESCRIPTOR = _ANALYZEENTITIESREQUEST, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """The entity analysis request message. @@ -2271,7 +2450,7 @@ AnalyzeEntitiesResponse = _reflection.GeneratedProtocolMessageType('AnalyzeEntitiesResponse', (_message.Message,), dict( DESCRIPTOR = _ANALYZEENTITIESRESPONSE, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """The entity analysis response message. @@ -2291,7 +2470,7 @@ AnalyzeSyntaxRequest = _reflection.GeneratedProtocolMessageType('AnalyzeSyntaxRequest', (_message.Message,), dict( DESCRIPTOR = _ANALYZESYNTAXREQUEST, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """The syntax analysis request message. @@ -2308,7 +2487,7 @@ AnalyzeSyntaxResponse = _reflection.GeneratedProtocolMessageType('AnalyzeSyntaxResponse', (_message.Message,), dict( DESCRIPTOR = _ANALYZESYNTAXRESPONSE, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """The syntax analysis response message. @@ -2333,7 +2512,7 @@ Features = _reflection.GeneratedProtocolMessageType('Features', (_message.Message,), dict( DESCRIPTOR = _ANNOTATETEXTREQUEST_FEATURES, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """All available features for sentiment, syntax, and semantic analysis. Setting each one to true will enable that specific analysis for the @@ -2343,7 +2522,7 @@ )) , DESCRIPTOR = _ANNOTATETEXTREQUEST, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """The request message for the text annotation API, which can perform multiple analysis types (sentiment, entities, and syntax) in one call. @@ -2356,6 +2535,8 @@ Extract entities. extract_document_sentiment: Extract document-level sentiment. + extract_entity_sentiment: + Extract entities and their associated sentiment. document: Input document. features: @@ -2370,7 +2551,7 @@ AnnotateTextResponse = _reflection.GeneratedProtocolMessageType('AnnotateTextResponse', (_message.Message,), dict( DESCRIPTOR = _ANNOTATETEXTRESPONSE, - __module__ = 'google.cloud.proto.language.v1.language_service_pb2' + __module__ = 'google.cloud.language_v1.proto.language_service_pb2' , __doc__ = """The text annotations response message. @@ -2441,6 +2622,11 @@ def __init__(self, channel): request_serializer=AnalyzeEntitiesRequest.SerializeToString, response_deserializer=AnalyzeEntitiesResponse.FromString, ) + self.AnalyzeEntitySentiment = channel.unary_unary( + '/google.cloud.language.v1.LanguageService/AnalyzeEntitySentiment', + request_serializer=AnalyzeEntitySentimentRequest.SerializeToString, + response_deserializer=AnalyzeEntitySentimentResponse.FromString, + ) self.AnalyzeSyntax = channel.unary_unary( '/google.cloud.language.v1.LanguageService/AnalyzeSyntax', request_serializer=AnalyzeSyntaxRequest.SerializeToString, @@ -2474,6 +2660,14 @@ def AnalyzeEntities(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def AnalyzeEntitySentiment(self, request, context): + """Finds entities, similar to [AnalyzeEntities][google.cloud.language.v1.LanguageService.AnalyzeEntities] in the text and analyzes + sentiment associated with each entity and its mentions. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def AnalyzeSyntax(self, request, context): """Analyzes the syntax of the text and provides sentence boundaries and tokenization along with part of speech tags, dependency trees, and other @@ -2504,6 +2698,11 @@ def add_LanguageServiceServicer_to_server(servicer, server): request_deserializer=AnalyzeEntitiesRequest.FromString, response_serializer=AnalyzeEntitiesResponse.SerializeToString, ), + 'AnalyzeEntitySentiment': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeEntitySentiment, + request_deserializer=AnalyzeEntitySentimentRequest.FromString, + response_serializer=AnalyzeEntitySentimentResponse.SerializeToString, + ), 'AnalyzeSyntax': grpc.unary_unary_rpc_method_handler( servicer.AnalyzeSyntax, request_deserializer=AnalyzeSyntaxRequest.FromString, @@ -2539,6 +2738,11 @@ def AnalyzeEntities(self, request, context): other properties. """ context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def AnalyzeEntitySentiment(self, request, context): + """Finds entities, similar to [AnalyzeEntities][google.cloud.language.v1.LanguageService.AnalyzeEntities] in the text and analyzes + sentiment associated with each entity and its mentions. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) def AnalyzeSyntax(self, request, context): """Analyzes the syntax of the text and provides sentence boundaries and tokenization along with part of speech tags, dependency trees, and other @@ -2573,6 +2777,12 @@ def AnalyzeEntities(self, request, timeout, metadata=None, with_call=False, prot """ raise NotImplementedError() AnalyzeEntities.future = None + def AnalyzeEntitySentiment(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Finds entities, similar to [AnalyzeEntities][google.cloud.language.v1.LanguageService.AnalyzeEntities] in the text and analyzes + sentiment associated with each entity and its mentions. + """ + raise NotImplementedError() + AnalyzeEntitySentiment.future = None def AnalyzeSyntax(self, request, timeout, metadata=None, with_call=False, protocol_options=None): """Analyzes the syntax of the text and provides sentence boundaries and tokenization along with part of speech tags, dependency trees, and other @@ -2596,18 +2806,21 @@ def beta_create_LanguageService_server(servicer, pool=None, pool_size=None, defa generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" request_deserializers = { ('google.cloud.language.v1.LanguageService', 'AnalyzeEntities'): AnalyzeEntitiesRequest.FromString, + ('google.cloud.language.v1.LanguageService', 'AnalyzeEntitySentiment'): AnalyzeEntitySentimentRequest.FromString, ('google.cloud.language.v1.LanguageService', 'AnalyzeSentiment'): AnalyzeSentimentRequest.FromString, ('google.cloud.language.v1.LanguageService', 'AnalyzeSyntax'): AnalyzeSyntaxRequest.FromString, ('google.cloud.language.v1.LanguageService', 'AnnotateText'): AnnotateTextRequest.FromString, } response_serializers = { ('google.cloud.language.v1.LanguageService', 'AnalyzeEntities'): AnalyzeEntitiesResponse.SerializeToString, + ('google.cloud.language.v1.LanguageService', 'AnalyzeEntitySentiment'): AnalyzeEntitySentimentResponse.SerializeToString, ('google.cloud.language.v1.LanguageService', 'AnalyzeSentiment'): AnalyzeSentimentResponse.SerializeToString, ('google.cloud.language.v1.LanguageService', 'AnalyzeSyntax'): AnalyzeSyntaxResponse.SerializeToString, ('google.cloud.language.v1.LanguageService', 'AnnotateText'): AnnotateTextResponse.SerializeToString, } method_implementations = { ('google.cloud.language.v1.LanguageService', 'AnalyzeEntities'): face_utilities.unary_unary_inline(servicer.AnalyzeEntities), + ('google.cloud.language.v1.LanguageService', 'AnalyzeEntitySentiment'): face_utilities.unary_unary_inline(servicer.AnalyzeEntitySentiment), ('google.cloud.language.v1.LanguageService', 'AnalyzeSentiment'): face_utilities.unary_unary_inline(servicer.AnalyzeSentiment), ('google.cloud.language.v1.LanguageService', 'AnalyzeSyntax'): face_utilities.unary_unary_inline(servicer.AnalyzeSyntax), ('google.cloud.language.v1.LanguageService', 'AnnotateText'): face_utilities.unary_unary_inline(servicer.AnnotateText), @@ -2624,18 +2837,21 @@ def beta_create_LanguageService_stub(channel, host=None, metadata_transformer=No generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" request_serializers = { ('google.cloud.language.v1.LanguageService', 'AnalyzeEntities'): AnalyzeEntitiesRequest.SerializeToString, + ('google.cloud.language.v1.LanguageService', 'AnalyzeEntitySentiment'): AnalyzeEntitySentimentRequest.SerializeToString, ('google.cloud.language.v1.LanguageService', 'AnalyzeSentiment'): AnalyzeSentimentRequest.SerializeToString, ('google.cloud.language.v1.LanguageService', 'AnalyzeSyntax'): AnalyzeSyntaxRequest.SerializeToString, ('google.cloud.language.v1.LanguageService', 'AnnotateText'): AnnotateTextRequest.SerializeToString, } response_deserializers = { ('google.cloud.language.v1.LanguageService', 'AnalyzeEntities'): AnalyzeEntitiesResponse.FromString, + ('google.cloud.language.v1.LanguageService', 'AnalyzeEntitySentiment'): AnalyzeEntitySentimentResponse.FromString, ('google.cloud.language.v1.LanguageService', 'AnalyzeSentiment'): AnalyzeSentimentResponse.FromString, ('google.cloud.language.v1.LanguageService', 'AnalyzeSyntax'): AnalyzeSyntaxResponse.FromString, ('google.cloud.language.v1.LanguageService', 'AnnotateText'): AnnotateTextResponse.FromString, } cardinalities = { 'AnalyzeEntities': cardinality.Cardinality.UNARY_UNARY, + 'AnalyzeEntitySentiment': cardinality.Cardinality.UNARY_UNARY, 'AnalyzeSentiment': cardinality.Cardinality.UNARY_UNARY, 'AnalyzeSyntax': cardinality.Cardinality.UNARY_UNARY, 'AnnotateText': cardinality.Cardinality.UNARY_UNARY, diff --git a/language/google/cloud/language_v1/proto/language_service_pb2_grpc.py b/language/google/cloud/language_v1/proto/language_service_pb2_grpc.py new file mode 100644 index 000000000000..937c7b54c7db --- /dev/null +++ b/language/google/cloud/language_v1/proto/language_service_pb2_grpc.py @@ -0,0 +1,122 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +import google.cloud.language_v1.proto.language_service_pb2 as google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2 + + +class LanguageServiceStub(object): + """Provides text analysis operations such as sentiment analysis and entity + recognition. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.AnalyzeSentiment = channel.unary_unary( + '/google.cloud.language.v1.LanguageService/AnalyzeSentiment', + request_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeSentimentRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeSentimentResponse.FromString, + ) + self.AnalyzeEntities = channel.unary_unary( + '/google.cloud.language.v1.LanguageService/AnalyzeEntities', + request_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeEntitiesRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeEntitiesResponse.FromString, + ) + self.AnalyzeEntitySentiment = channel.unary_unary( + '/google.cloud.language.v1.LanguageService/AnalyzeEntitySentiment', + request_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeEntitySentimentRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeEntitySentimentResponse.FromString, + ) + self.AnalyzeSyntax = channel.unary_unary( + '/google.cloud.language.v1.LanguageService/AnalyzeSyntax', + request_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeSyntaxRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeSyntaxResponse.FromString, + ) + self.AnnotateText = channel.unary_unary( + '/google.cloud.language.v1.LanguageService/AnnotateText', + request_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnnotateTextRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnnotateTextResponse.FromString, + ) + + +class LanguageServiceServicer(object): + """Provides text analysis operations such as sentiment analysis and entity + recognition. + """ + + def AnalyzeSentiment(self, request, context): + """Analyzes the sentiment of the provided text. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AnalyzeEntities(self, request, context): + """Finds named entities (currently proper names and common nouns) in the text + along with entity types, salience, mentions for each entity, and + other properties. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AnalyzeEntitySentiment(self, request, context): + """Finds entities, similar to [AnalyzeEntities][google.cloud.language.v1.LanguageService.AnalyzeEntities] in the text and analyzes + sentiment associated with each entity and its mentions. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AnalyzeSyntax(self, request, context): + """Analyzes the syntax of the text and provides sentence boundaries and + tokenization along with part of speech tags, dependency trees, and other + properties. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AnnotateText(self, request, context): + """A convenience method that provides all the features that analyzeSentiment, + analyzeEntities, and analyzeSyntax provide in one call. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_LanguageServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'AnalyzeSentiment': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeSentiment, + request_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeSentimentRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeSentimentResponse.SerializeToString, + ), + 'AnalyzeEntities': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeEntities, + request_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeEntitiesRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeEntitiesResponse.SerializeToString, + ), + 'AnalyzeEntitySentiment': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeEntitySentiment, + request_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeEntitySentimentRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeEntitySentimentResponse.SerializeToString, + ), + 'AnalyzeSyntax': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeSyntax, + request_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeSyntaxRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnalyzeSyntaxResponse.SerializeToString, + ), + 'AnnotateText': grpc.unary_unary_rpc_method_handler( + servicer.AnnotateText, + request_deserializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnnotateTextRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2.AnnotateTextResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'google.cloud.language.v1.LanguageService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/language/google/cloud/language_v1/types.py b/language/google/cloud/language_v1/types.py index 6223f6846e09..16e40931d0f9 100644 --- a/language/google/cloud/language_v1/types.py +++ b/language/google/cloud/language_v1/types.py @@ -15,16 +15,20 @@ from __future__ import absolute_import import sys -from google.cloud.proto.language.v1 import language_service_pb2 - from google.gax.utils.messages import get_messages +from google.api import http_pb2 +from google.cloud.language_v1.proto import language_service_pb2 +from google.protobuf import descriptor_pb2 names = [] -for name, message in get_messages(language_service_pb2).items(): - message.__module__ = 'google.cloud.language_v1.types' - setattr(sys.modules[__name__], name, message) - names.append(name) - +for module in ( + http_pb2, + language_service_pb2, + descriptor_pb2, ): + for name, message in get_messages(module).items(): + message.__module__ = 'google.cloud.language_v1.types' + setattr(sys.modules[__name__], name, message) + names.append(name) __all__ = tuple(sorted(names)) diff --git a/language/google/cloud/language_v1beta2/__init__.py b/language/google/cloud/language_v1beta2/__init__.py index e0a3e4cc287a..a6c06cbf42c1 100644 --- a/language/google/cloud/language_v1beta2/__init__.py +++ b/language/google/cloud/language_v1beta2/__init__.py @@ -14,17 +14,17 @@ from __future__ import absolute_import -from google.cloud.gapic.language.v1beta2 import language_service_client as lsc -from google.cloud.gapic.language.v1beta2 import enums - from google.cloud.language_v1beta2 import types +from google.cloud.language_v1beta2.gapic import enums +from google.cloud.language_v1beta2.gapic import language_service_client -LanguageServiceClient = lsc.LanguageServiceClient +class LanguageServiceClient(language_service_client.LanguageServiceClient): + __doc__ = language_service_client.LanguageServiceClient.__doc__ + enums = enums __all__ = ( 'enums', - 'LanguageServiceClient', 'types', -) + 'LanguageServiceClient', ) diff --git a/language/google/cloud/language_v1beta2/gapic/__init__.py b/language/google/cloud/language_v1beta2/gapic/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/language/google/cloud/gapic/language/v1/enums.py b/language/google/cloud/language_v1beta2/gapic/enums.py similarity index 94% rename from language/google/cloud/gapic/language/v1/enums.py rename to language/google/cloud/language_v1beta2/gapic/enums.py index 2b53e4d913bb..689033aa4db2 100644 --- a/language/google/cloud/gapic/language/v1/enums.py +++ b/language/google/cloud/language_v1beta2/gapic/enums.py @@ -1,10 +1,10 @@ -# Copyright 2016 Google Inc. All rights reserved. +# Copyright 2017, Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -24,16 +24,16 @@ class EncodingType(object): Attributes: NONE (int): If ``EncodingType`` is not specified, encoding-dependent information (such as - ``begin_offset``) will be set at ``-1``. + ``begin_offset``) will be set at ``-1``. UTF8 (int): Encoding-dependent information (such as ``begin_offset``) is calculated based - on the UTF-8 encoding of the input. C++ and Go are examples of languages - that use this encoding natively. + on the UTF-8 encoding of the input. C++ and Go are examples of languages + that use this encoding natively. UTF16 (int): Encoding-dependent information (such as ``begin_offset``) is calculated based - on the UTF-16 encoding of the input. Java and Javascript are examples of - languages that use this encoding natively. + on the UTF-16 encoding of the input. Java and Javascript are examples of + languages that use this encoding natively. UTF32 (int): Encoding-dependent information (such as ``begin_offset``) is calculated based - on the UTF-32 encoding of the input. Python is an example of a language - that uses this encoding natively. + on the UTF-32 encoding of the input. Python is an example of a language + that uses this encoding natively. """ NONE = 0 UTF8 = 1 @@ -292,7 +292,7 @@ class Reciprocity(object): Attributes: RECIPROCITY_UNKNOWN (int): Reciprocity is not applicable in the analyzed language or is not - predicted. + predicted. RECIPROCAL (int): Reciprocal NON_RECIPROCAL (int): Non-reciprocal """ @@ -421,6 +421,12 @@ class Label(object): NUMC (int): Compound of numeric modifier COP (int): Copula DISLOCATED (int): Dislocated relation (for fronted/topicalized elements) + ASP (int): Aspect marker + GMOD (int): Genitive modifier + GOBJ (int): Genitive object + INFMOD (int): Infinitival modifier + MES (int): Measure + NCOMP (int): Nominal complement of a noun """ UNKNOWN = 0 ABBREV = 1 @@ -499,6 +505,12 @@ class Label(object): NUMC = 74 COP = 75 DISLOCATED = 76 + ASP = 77 + GMOD = 78 + GOBJ = 79 + INFMOD = 80 + MES = 81 + NCOMP = 82 class EntityMention(object): diff --git a/language/google/cloud/language_v1beta2/gapic/language_service_client.py b/language/google/cloud/language_v1beta2/gapic/language_service_client.py new file mode 100644 index 000000000000..6e735efc52b7 --- /dev/null +++ b/language/google/cloud/language_v1beta2/gapic/language_service_client.py @@ -0,0 +1,362 @@ +# Copyright 2017, Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# EDITING INSTRUCTIONS +# This file was generated from the file +# https://github.com/google/googleapis/blob/master/google/cloud/language/v1beta2/language_service.proto, +# and updates to that file get reflected here through a refresh process. +# For the short term, the refresh process will only be runnable by Google engineers. +# +# The only allowed edits are to method and file documentation. A 3-way +# merge preserves those additions if the generated source changes. +"""Accesses the google.cloud.language.v1beta2 LanguageService API.""" + +import collections +import json +import os +import pkg_resources +import platform + +from google.gax import api_callable +from google.gax import config +from google.gax import path_template +import google.gax + +from google.cloud.language_v1beta2.gapic import enums +from google.cloud.language_v1beta2.gapic import language_service_client_config +from google.cloud.language_v1beta2.proto import language_service_pb2 + + +class LanguageServiceClient(object): + """ + Provides text analysis operations such as sentiment analysis and entity + recognition. + """ + + SERVICE_ADDRESS = 'language.googleapis.com' + """The default address of the service.""" + + DEFAULT_SERVICE_PORT = 443 + """The default port of the service.""" + + # The scopes needed to make gRPC calls to all of the methods defined in + # this service + _ALL_SCOPES = ('https://www.googleapis.com/auth/cloud-platform', ) + + def __init__(self, + channel=None, + credentials=None, + ssl_credentials=None, + scopes=None, + client_config=None, + lib_name=None, + lib_version='', + metrics_headers=()): + """Constructor. + + Args: + channel (~grpc.Channel): A ``Channel`` instance through + which to make calls. + credentials (~google.auth.credentials.Credentials): The authorization + credentials to attach to requests. These credentials identify this + application to the service. + ssl_credentials (~grpc.ChannelCredentials): A + ``ChannelCredentials`` instance for use with an SSL-enabled + channel. + scopes (Sequence[str]): A list of OAuth2 scopes to attach to requests. + client_config (dict): + A dictionary for call options for each method. See + :func:`google.gax.construct_settings` for the structure of + this data. Falls back to the default config if not specified + or the specified config is missing data points. + lib_name (str): The API library software used for calling + the service. (Unless you are writing an API client itself, + leave this as default.) + lib_version (str): The API library software version used + for calling the service. (Unless you are writing an API client + itself, leave this as default.) + metrics_headers (dict): A dictionary of values for tracking + client library metrics. Ultimately serializes to a string + (e.g. 'foo/1.2.3 bar/3.14.1'). This argument should be + considered private. + + Returns: LanguageServiceClient + """ + # Unless the calling application specifically requested + # OAuth scopes, request everything. + if scopes is None: + scopes = self._ALL_SCOPES + + # Initialize an empty client config, if none is set. + if client_config is None: + client_config = {} + + # Initialize metrics_headers as an ordered dictionary + # (cuts down on cardinality of the resulting string slightly). + metrics_headers = collections.OrderedDict(metrics_headers) + metrics_headers['gl-python'] = platform.python_version() + + # The library may or may not be set, depending on what is + # calling this client. Newer client libraries set the library name + # and version. + if lib_name: + metrics_headers[lib_name] = lib_version + + # Finally, track the GAPIC package version. + metrics_headers['gapic'] = pkg_resources.get_distribution( + 'google-cloud-language', ).version + + # Load the configuration defaults. + defaults = api_callable.construct_settings( + 'google.cloud.language.v1beta2.LanguageService', + language_service_client_config.config, + client_config, + config.STATUS_CODE_NAMES, + metrics_headers=metrics_headers, ) + self.language_service_stub = config.create_stub( + language_service_pb2.LanguageServiceStub, + channel=channel, + service_path=self.SERVICE_ADDRESS, + service_port=self.DEFAULT_SERVICE_PORT, + credentials=credentials, + scopes=scopes, + ssl_credentials=ssl_credentials) + + self._analyze_sentiment = api_callable.create_api_call( + self.language_service_stub.AnalyzeSentiment, + settings=defaults['analyze_sentiment']) + self._analyze_entities = api_callable.create_api_call( + self.language_service_stub.AnalyzeEntities, + settings=defaults['analyze_entities']) + self._analyze_entity_sentiment = api_callable.create_api_call( + self.language_service_stub.AnalyzeEntitySentiment, + settings=defaults['analyze_entity_sentiment']) + self._analyze_syntax = api_callable.create_api_call( + self.language_service_stub.AnalyzeSyntax, + settings=defaults['analyze_syntax']) + self._classify_text = api_callable.create_api_call( + self.language_service_stub.ClassifyText, + settings=defaults['classify_text']) + self._annotate_text = api_callable.create_api_call( + self.language_service_stub.AnnotateText, + settings=defaults['annotate_text']) + + # Service calls + def analyze_sentiment(self, document, encoding_type=None, options=None): + """ + Analyzes the sentiment of the provided text. + + Example: + >>> from google.cloud import language_v1beta2 + >>> + >>> client = language_v1beta2.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.analyze_sentiment(document) + + Args: + document (Union[dict, ~google.cloud.language_v1beta2.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1beta2.types.Document` + encoding_type (~google.cloud.language_v1beta2.types.EncodingType): The encoding type used by the API to calculate sentence offsets for the + sentence sentiment. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1beta2.types.AnalyzeSentimentResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnalyzeSentimentRequest( + document=document, encoding_type=encoding_type) + return self._analyze_sentiment(request, options) + + def analyze_entities(self, document, encoding_type=None, options=None): + """ + Finds named entities (currently proper names and common nouns) in the text + along with entity types, salience, mentions for each entity, and + other properties. + + Example: + >>> from google.cloud import language_v1beta2 + >>> + >>> client = language_v1beta2.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.analyze_entities(document) + + Args: + document (Union[dict, ~google.cloud.language_v1beta2.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1beta2.types.Document` + encoding_type (~google.cloud.language_v1beta2.types.EncodingType): The encoding type used by the API to calculate offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1beta2.types.AnalyzeEntitiesResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnalyzeEntitiesRequest( + document=document, encoding_type=encoding_type) + return self._analyze_entities(request, options) + + def analyze_entity_sentiment(self, + document, + encoding_type=None, + options=None): + """ + Finds entities, similar to ``AnalyzeEntities`` in the text and analyzes + sentiment associated with each entity and its mentions. + + Example: + >>> from google.cloud import language_v1beta2 + >>> + >>> client = language_v1beta2.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.analyze_entity_sentiment(document) + + Args: + document (Union[dict, ~google.cloud.language_v1beta2.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1beta2.types.Document` + encoding_type (~google.cloud.language_v1beta2.types.EncodingType): The encoding type used by the API to calculate offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1beta2.types.AnalyzeEntitySentimentResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnalyzeEntitySentimentRequest( + document=document, encoding_type=encoding_type) + return self._analyze_entity_sentiment(request, options) + + def analyze_syntax(self, document, encoding_type=None, options=None): + """ + Analyzes the syntax of the text and provides sentence boundaries and + tokenization along with part of speech tags, dependency trees, and other + properties. + + Example: + >>> from google.cloud import language_v1beta2 + >>> + >>> client = language_v1beta2.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.analyze_syntax(document) + + Args: + document (Union[dict, ~google.cloud.language_v1beta2.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1beta2.types.Document` + encoding_type (~google.cloud.language_v1beta2.types.EncodingType): The encoding type used by the API to calculate offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1beta2.types.AnalyzeSyntaxResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnalyzeSyntaxRequest( + document=document, encoding_type=encoding_type) + return self._analyze_syntax(request, options) + + def classify_text(self, document, options=None): + """ + Classifies a document into categories. + + Example: + >>> from google.cloud import language_v1beta2 + >>> + >>> client = language_v1beta2.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.classify_text(document) + + Args: + document (Union[dict, ~google.cloud.language_v1beta2.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1beta2.types.Document` + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1beta2.types.ClassifyTextResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.ClassifyTextRequest(document=document) + return self._classify_text(request, options) + + def annotate_text(self, + document, + features, + encoding_type=None, + options=None): + """ + A convenience method that provides all syntax, sentiment, entity, and + classification features in one call. + + Example: + >>> from google.cloud import language_v1beta2 + >>> + >>> client = language_v1beta2.LanguageServiceClient() + >>> + >>> document = {} + >>> features = {} + >>> + >>> response = client.annotate_text(document, features) + + Args: + document (Union[dict, ~google.cloud.language_v1beta2.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1beta2.types.Document` + features (Union[dict, ~google.cloud.language_v1beta2.types.Features]): The enabled features. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1beta2.types.Features` + encoding_type (~google.cloud.language_v1beta2.types.EncodingType): The encoding type used by the API to calculate offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1beta2.types.AnnotateTextResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnnotateTextRequest( + document=document, features=features, encoding_type=encoding_type) + return self._annotate_text(request, options) diff --git a/language/google/cloud/language_v1beta2/gapic/language_service_client_config.py b/language/google/cloud/language_v1beta2/gapic/language_service_client_config.py new file mode 100644 index 000000000000..f3473d4a2667 --- /dev/null +++ b/language/google/cloud/language_v1beta2/gapic/language_service_client_config.py @@ -0,0 +1,53 @@ +config = { + "interfaces": { + "google.cloud.language.v1beta2.LanguageService": { + "retry_codes": { + "idempotent": ["DEADLINE_EXCEEDED", "UNAVAILABLE"], + "non_idempotent": [] + }, + "retry_params": { + "default": { + "initial_retry_delay_millis": 100, + "retry_delay_multiplier": 1.3, + "max_retry_delay_millis": 60000, + "initial_rpc_timeout_millis": 60000, + "rpc_timeout_multiplier": 1.0, + "max_rpc_timeout_millis": 60000, + "total_timeout_millis": 600000 + } + }, + "methods": { + "AnalyzeSentiment": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "AnalyzeEntities": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "AnalyzeEntitySentiment": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "AnalyzeSyntax": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "ClassifyText": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, + "AnnotateText": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + } + } + } + } +} diff --git a/language/google/cloud/language_v1beta2/proto/__init__.py b/language/google/cloud/language_v1beta2/proto/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/language/google/cloud/proto/language/v1beta2/language_service_pb2.py b/language/google/cloud/language_v1beta2/proto/language_service_pb2.py similarity index 86% rename from language/google/cloud/proto/language/v1beta2/language_service_pb2.py rename to language/google/cloud/language_v1beta2/proto/language_service_pb2.py index d3e1d150af8d..92caa1bc235f 100644 --- a/language/google/cloud/proto/language/v1beta2/language_service_pb2.py +++ b/language/google/cloud/language_v1beta2/proto/language_service_pb2.py @@ -1,5 +1,5 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: google/cloud/proto/language/v1beta2/language_service.proto +# source: google/cloud/language_v1beta2/proto/language_service.proto import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) @@ -21,10 +21,10 @@ DESCRIPTOR = _descriptor.FileDescriptor( - name='google/cloud/proto/language/v1beta2/language_service.proto', + name='google/cloud/language_v1beta2/proto/language_service.proto', package='google.cloud.language.v1beta2', syntax='proto3', - serialized_pb=_b('\n:google/cloud/proto/language/v1beta2/language_service.proto\x12\x1dgoogle.cloud.language.v1beta2\x1a\x1cgoogle/api/annotations.proto\x1a#google/longrunning/operations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\"\xc8\x01\n\x08\x44ocument\x12:\n\x04type\x18\x01 \x01(\x0e\x32,.google.cloud.language.v1beta2.Document.Type\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x19\n\x0fgcs_content_uri\x18\x03 \x01(\tH\x00\x12\x10\n\x08language\x18\x04 \x01(\t\"6\n\x04Type\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nPLAIN_TEXT\x10\x01\x12\x08\n\x04HTML\x10\x02\x42\x08\n\x06source\"~\n\x08Sentence\x12\x35\n\x04text\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.TextSpan\x12;\n\tsentiment\x18\x02 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\"\xd2\x03\n\x06\x45ntity\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\x04type\x18\x02 \x01(\x0e\x32*.google.cloud.language.v1beta2.Entity.Type\x12\x45\n\x08metadata\x18\x03 \x03(\x0b\x32\x33.google.cloud.language.v1beta2.Entity.MetadataEntry\x12\x10\n\x08salience\x18\x04 \x01(\x02\x12>\n\x08mentions\x18\x05 \x03(\x0b\x32,.google.cloud.language.v1beta2.EntityMention\x12;\n\tsentiment\x18\x06 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"y\n\x04Type\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06PERSON\x10\x01\x12\x0c\n\x08LOCATION\x10\x02\x12\x10\n\x0cORGANIZATION\x10\x03\x12\t\n\x05\x45VENT\x10\x04\x12\x0f\n\x0bWORK_OF_ART\x10\x05\x12\x11\n\rCONSUMER_GOOD\x10\x06\x12\t\n\x05OTHER\x10\x07\"\xda\x01\n\x05Token\x12\x35\n\x04text\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.TextSpan\x12\x43\n\x0epart_of_speech\x18\x02 \x01(\x0b\x32+.google.cloud.language.v1beta2.PartOfSpeech\x12\x46\n\x0f\x64\x65pendency_edge\x18\x03 \x01(\x0b\x32-.google.cloud.language.v1beta2.DependencyEdge\x12\r\n\x05lemma\x18\x04 \x01(\t\"-\n\tSentiment\x12\x11\n\tmagnitude\x18\x02 \x01(\x02\x12\r\n\x05score\x18\x03 \x01(\x02\"\xdf\x10\n\x0cPartOfSpeech\x12<\n\x03tag\x18\x01 \x01(\x0e\x32/.google.cloud.language.v1beta2.PartOfSpeech.Tag\x12\x42\n\x06\x61spect\x18\x02 \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Aspect\x12>\n\x04\x63\x61se\x18\x03 \x01(\x0e\x32\x30.google.cloud.language.v1beta2.PartOfSpeech.Case\x12>\n\x04\x66orm\x18\x04 \x01(\x0e\x32\x30.google.cloud.language.v1beta2.PartOfSpeech.Form\x12\x42\n\x06gender\x18\x05 \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Gender\x12>\n\x04mood\x18\x06 \x01(\x0e\x32\x30.google.cloud.language.v1beta2.PartOfSpeech.Mood\x12\x42\n\x06number\x18\x07 \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Number\x12\x42\n\x06person\x18\x08 \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Person\x12\x42\n\x06proper\x18\t \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Proper\x12L\n\x0breciprocity\x18\n \x01(\x0e\x32\x37.google.cloud.language.v1beta2.PartOfSpeech.Reciprocity\x12@\n\x05tense\x18\x0b \x01(\x0e\x32\x31.google.cloud.language.v1beta2.PartOfSpeech.Tense\x12@\n\x05voice\x18\x0c \x01(\x0e\x32\x31.google.cloud.language.v1beta2.PartOfSpeech.Voice\"\x8d\x01\n\x03Tag\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x41\x44J\x10\x01\x12\x07\n\x03\x41\x44P\x10\x02\x12\x07\n\x03\x41\x44V\x10\x03\x12\x08\n\x04\x43ONJ\x10\x04\x12\x07\n\x03\x44\x45T\x10\x05\x12\x08\n\x04NOUN\x10\x06\x12\x07\n\x03NUM\x10\x07\x12\x08\n\x04PRON\x10\x08\x12\x07\n\x03PRT\x10\t\x12\t\n\x05PUNCT\x10\n\x12\x08\n\x04VERB\x10\x0b\x12\x05\n\x01X\x10\x0c\x12\t\n\x05\x41\x46\x46IX\x10\r\"O\n\x06\x41spect\x12\x12\n\x0e\x41SPECT_UNKNOWN\x10\x00\x12\x0e\n\nPERFECTIVE\x10\x01\x12\x10\n\x0cIMPERFECTIVE\x10\x02\x12\x0f\n\x0bPROGRESSIVE\x10\x03\"\xf8\x01\n\x04\x43\x61se\x12\x10\n\x0c\x43\x41SE_UNKNOWN\x10\x00\x12\x0e\n\nACCUSATIVE\x10\x01\x12\r\n\tADVERBIAL\x10\x02\x12\x11\n\rCOMPLEMENTIVE\x10\x03\x12\n\n\x06\x44\x41TIVE\x10\x04\x12\x0c\n\x08GENITIVE\x10\x05\x12\x10\n\x0cINSTRUMENTAL\x10\x06\x12\x0c\n\x08LOCATIVE\x10\x07\x12\x0e\n\nNOMINATIVE\x10\x08\x12\x0b\n\x07OBLIQUE\x10\t\x12\r\n\tPARTITIVE\x10\n\x12\x11\n\rPREPOSITIONAL\x10\x0b\x12\x12\n\x0eREFLEXIVE_CASE\x10\x0c\x12\x11\n\rRELATIVE_CASE\x10\r\x12\x0c\n\x08VOCATIVE\x10\x0e\"\xaf\x01\n\x04\x46orm\x12\x10\n\x0c\x46ORM_UNKNOWN\x10\x00\x12\x0c\n\x08\x41\x44NOMIAL\x10\x01\x12\r\n\tAUXILIARY\x10\x02\x12\x12\n\x0e\x43OMPLEMENTIZER\x10\x03\x12\x10\n\x0c\x46INAL_ENDING\x10\x04\x12\n\n\x06GERUND\x10\x05\x12\n\n\x06REALIS\x10\x06\x12\x0c\n\x08IRREALIS\x10\x07\x12\t\n\x05SHORT\x10\x08\x12\x08\n\x04LONG\x10\t\x12\t\n\x05ORDER\x10\n\x12\x0c\n\x08SPECIFIC\x10\x0b\"E\n\x06Gender\x12\x12\n\x0eGENDER_UNKNOWN\x10\x00\x12\x0c\n\x08\x46\x45MININE\x10\x01\x12\r\n\tMASCULINE\x10\x02\x12\n\n\x06NEUTER\x10\x03\"\x7f\n\x04Mood\x12\x10\n\x0cMOOD_UNKNOWN\x10\x00\x12\x14\n\x10\x43ONDITIONAL_MOOD\x10\x01\x12\x0e\n\nIMPERATIVE\x10\x02\x12\x0e\n\nINDICATIVE\x10\x03\x12\x11\n\rINTERROGATIVE\x10\x04\x12\x0b\n\x07JUSSIVE\x10\x05\x12\x0f\n\x0bSUBJUNCTIVE\x10\x06\"@\n\x06Number\x12\x12\n\x0eNUMBER_UNKNOWN\x10\x00\x12\x0c\n\x08SINGULAR\x10\x01\x12\n\n\x06PLURAL\x10\x02\x12\x08\n\x04\x44UAL\x10\x03\"T\n\x06Person\x12\x12\n\x0ePERSON_UNKNOWN\x10\x00\x12\t\n\x05\x46IRST\x10\x01\x12\n\n\x06SECOND\x10\x02\x12\t\n\x05THIRD\x10\x03\x12\x14\n\x10REFLEXIVE_PERSON\x10\x04\"8\n\x06Proper\x12\x12\n\x0ePROPER_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\x0e\n\nNOT_PROPER\x10\x02\"J\n\x0bReciprocity\x12\x17\n\x13RECIPROCITY_UNKNOWN\x10\x00\x12\x0e\n\nRECIPROCAL\x10\x01\x12\x12\n\x0eNON_RECIPROCAL\x10\x02\"s\n\x05Tense\x12\x11\n\rTENSE_UNKNOWN\x10\x00\x12\x15\n\x11\x43ONDITIONAL_TENSE\x10\x01\x12\n\n\x06\x46UTURE\x10\x02\x12\x08\n\x04PAST\x10\x03\x12\x0b\n\x07PRESENT\x10\x04\x12\r\n\tIMPERFECT\x10\x05\x12\x0e\n\nPLUPERFECT\x10\x06\"B\n\x05Voice\x12\x11\n\rVOICE_UNKNOWN\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\r\n\tCAUSATIVE\x10\x02\x12\x0b\n\x07PASSIVE\x10\x03\"\xdd\x07\n\x0e\x44\x65pendencyEdge\x12\x18\n\x10head_token_index\x18\x01 \x01(\x05\x12\x42\n\x05label\x18\x02 \x01(\x0e\x32\x33.google.cloud.language.v1beta2.DependencyEdge.Label\"\xec\x06\n\x05Label\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x41\x42\x42REV\x10\x01\x12\t\n\x05\x41\x43OMP\x10\x02\x12\t\n\x05\x41\x44VCL\x10\x03\x12\n\n\x06\x41\x44VMOD\x10\x04\x12\x08\n\x04\x41MOD\x10\x05\x12\t\n\x05\x41PPOS\x10\x06\x12\x08\n\x04\x41TTR\x10\x07\x12\x07\n\x03\x41UX\x10\x08\x12\x0b\n\x07\x41UXPASS\x10\t\x12\x06\n\x02\x43\x43\x10\n\x12\t\n\x05\x43\x43OMP\x10\x0b\x12\x08\n\x04\x43ONJ\x10\x0c\x12\t\n\x05\x43SUBJ\x10\r\x12\r\n\tCSUBJPASS\x10\x0e\x12\x07\n\x03\x44\x45P\x10\x0f\x12\x07\n\x03\x44\x45T\x10\x10\x12\r\n\tDISCOURSE\x10\x11\x12\x08\n\x04\x44OBJ\x10\x12\x12\x08\n\x04\x45XPL\x10\x13\x12\x0c\n\x08GOESWITH\x10\x14\x12\x08\n\x04IOBJ\x10\x15\x12\x08\n\x04MARK\x10\x16\x12\x07\n\x03MWE\x10\x17\x12\x07\n\x03MWV\x10\x18\x12\x07\n\x03NEG\x10\x19\x12\x06\n\x02NN\x10\x1a\x12\x0c\n\x08NPADVMOD\x10\x1b\x12\t\n\x05NSUBJ\x10\x1c\x12\r\n\tNSUBJPASS\x10\x1d\x12\x07\n\x03NUM\x10\x1e\x12\n\n\x06NUMBER\x10\x1f\x12\x05\n\x01P\x10 \x12\r\n\tPARATAXIS\x10!\x12\x0b\n\x07PARTMOD\x10\"\x12\t\n\x05PCOMP\x10#\x12\x08\n\x04POBJ\x10$\x12\x08\n\x04POSS\x10%\x12\x0b\n\x07POSTNEG\x10&\x12\x0b\n\x07PRECOMP\x10\'\x12\x0b\n\x07PRECONJ\x10(\x12\n\n\x06PREDET\x10)\x12\x08\n\x04PREF\x10*\x12\x08\n\x04PREP\x10+\x12\t\n\x05PRONL\x10,\x12\x07\n\x03PRT\x10-\x12\x06\n\x02PS\x10.\x12\x0c\n\x08QUANTMOD\x10/\x12\t\n\x05RCMOD\x10\x30\x12\x0c\n\x08RCMODREL\x10\x31\x12\t\n\x05RDROP\x10\x32\x12\x07\n\x03REF\x10\x33\x12\x0b\n\x07REMNANT\x10\x34\x12\x0e\n\nREPARANDUM\x10\x35\x12\x08\n\x04ROOT\x10\x36\x12\x08\n\x04SNUM\x10\x37\x12\x08\n\x04SUFF\x10\x38\x12\x08\n\x04TMOD\x10\x39\x12\t\n\x05TOPIC\x10:\x12\x08\n\x04VMOD\x10;\x12\x0c\n\x08VOCATIVE\x10<\x12\t\n\x05XCOMP\x10=\x12\n\n\x06SUFFIX\x10>\x12\t\n\x05TITLE\x10?\x12\x0c\n\x08\x41\x44VPHMOD\x10@\x12\x0b\n\x07\x41UXCAUS\x10\x41\x12\t\n\x05\x41UXVV\x10\x42\x12\t\n\x05\x44TMOD\x10\x43\x12\x0b\n\x07\x46OREIGN\x10\x44\x12\x06\n\x02KW\x10\x45\x12\x08\n\x04LIST\x10\x46\x12\x08\n\x04NOMC\x10G\x12\x0c\n\x08NOMCSUBJ\x10H\x12\x10\n\x0cNOMCSUBJPASS\x10I\x12\x08\n\x04NUMC\x10J\x12\x07\n\x03\x43OP\x10K\x12\x0e\n\nDISLOCATED\x10L\"\xf6\x01\n\rEntityMention\x12\x35\n\x04text\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.TextSpan\x12?\n\x04type\x18\x02 \x01(\x0e\x32\x31.google.cloud.language.v1beta2.EntityMention.Type\x12;\n\tsentiment\x18\x03 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\"0\n\x04Type\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\n\n\x06\x43OMMON\x10\x02\"1\n\x08TextSpan\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x14\n\x0c\x62\x65gin_offset\x18\x02 \x01(\x05\"\x98\x01\n\x17\x41nalyzeSentimentRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12\x42\n\rencoding_type\x18\x02 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\"\xae\x01\n\x18\x41nalyzeSentimentResponse\x12\x44\n\x12\x64ocument_sentiment\x18\x01 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\x12\x10\n\x08language\x18\x02 \x01(\t\x12:\n\tsentences\x18\x03 \x03(\x0b\x32\'.google.cloud.language.v1beta2.Sentence\"\x9e\x01\n\x1d\x41nalyzeEntitySentimentRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12\x42\n\rencoding_type\x18\x02 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\"k\n\x1e\x41nalyzeEntitySentimentResponse\x12\x37\n\x08\x65ntities\x18\x01 \x03(\x0b\x32%.google.cloud.language.v1beta2.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x97\x01\n\x16\x41nalyzeEntitiesRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12\x42\n\rencoding_type\x18\x02 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\"d\n\x17\x41nalyzeEntitiesResponse\x12\x37\n\x08\x65ntities\x18\x01 \x03(\x0b\x32%.google.cloud.language.v1beta2.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x95\x01\n\x14\x41nalyzeSyntaxRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12\x42\n\rencoding_type\x18\x02 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\"\x9b\x01\n\x15\x41nalyzeSyntaxResponse\x12:\n\tsentences\x18\x01 \x03(\x0b\x32\'.google.cloud.language.v1beta2.Sentence\x12\x34\n\x06tokens\x18\x02 \x03(\x0b\x32$.google.cloud.language.v1beta2.Token\x12\x10\n\x08language\x18\x03 \x01(\t\"\xe8\x02\n\x13\x41nnotateTextRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12M\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0b\x32;.google.cloud.language.v1beta2.AnnotateTextRequest.Features\x12\x42\n\rencoding_type\x18\x03 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\x1a\x82\x01\n\x08\x46\x65\x61tures\x12\x16\n\x0e\x65xtract_syntax\x18\x01 \x01(\x08\x12\x18\n\x10\x65xtract_entities\x18\x02 \x01(\x08\x12\"\n\x1a\x65xtract_document_sentiment\x18\x03 \x01(\x08\x12 \n\x18\x65xtract_entity_sentiment\x18\x04 \x01(\x08\"\x99\x02\n\x14\x41nnotateTextResponse\x12:\n\tsentences\x18\x01 \x03(\x0b\x32\'.google.cloud.language.v1beta2.Sentence\x12\x34\n\x06tokens\x18\x02 \x03(\x0b\x32$.google.cloud.language.v1beta2.Token\x12\x37\n\x08\x65ntities\x18\x03 \x03(\x0b\x32%.google.cloud.language.v1beta2.Entity\x12\x44\n\x12\x64ocument_sentiment\x18\x04 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\x12\x10\n\x08language\x18\x05 \x01(\t*8\n\x0c\x45ncodingType\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04UTF8\x10\x01\x12\t\n\x05UTF16\x10\x02\x12\t\n\x05UTF32\x10\x03\x32\x97\x07\n\x0fLanguageService\x12\xb3\x01\n\x10\x41nalyzeSentiment\x12\x36.google.cloud.language.v1beta2.AnalyzeSentimentRequest\x1a\x37.google.cloud.language.v1beta2.AnalyzeSentimentResponse\".\x82\xd3\xe4\x93\x02(\"#/v1beta2/documents:analyzeSentiment:\x01*\x12\xaf\x01\n\x0f\x41nalyzeEntities\x12\x35.google.cloud.language.v1beta2.AnalyzeEntitiesRequest\x1a\x36.google.cloud.language.v1beta2.AnalyzeEntitiesResponse\"-\x82\xd3\xe4\x93\x02\'\"\"/v1beta2/documents:analyzeEntities:\x01*\x12\xcb\x01\n\x16\x41nalyzeEntitySentiment\x12<.google.cloud.language.v1beta2.AnalyzeEntitySentimentRequest\x1a=.google.cloud.language.v1beta2.AnalyzeEntitySentimentResponse\"4\x82\xd3\xe4\x93\x02.\")/v1beta2/documents:analyzeEntitySentiment:\x01*\x12\xa7\x01\n\rAnalyzeSyntax\x12\x33.google.cloud.language.v1beta2.AnalyzeSyntaxRequest\x1a\x34.google.cloud.language.v1beta2.AnalyzeSyntaxResponse\"+\x82\xd3\xe4\x93\x02%\" /v1beta2/documents:analyzeSyntax:\x01*\x12\xa3\x01\n\x0c\x41nnotateText\x12\x32.google.cloud.language.v1beta2.AnnotateTextRequest\x1a\x33.google.cloud.language.v1beta2.AnnotateTextResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1beta2/documents:annotateText:\x01*B\x82\x01\n!com.google.cloud.language.v1beta2B\x14LanguageServiceProtoP\x01ZEgoogle.golang.org/genproto/googleapis/cloud/language/v1beta2;languageb\x06proto3') + serialized_pb=_b('\n:google/cloud/language_v1beta2/proto/language_service.proto\x12\x1dgoogle.cloud.language.v1beta2\x1a\x1cgoogle/api/annotations.proto\x1a#google/longrunning/operations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\"\xc8\x01\n\x08\x44ocument\x12:\n\x04type\x18\x01 \x01(\x0e\x32,.google.cloud.language.v1beta2.Document.Type\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x19\n\x0fgcs_content_uri\x18\x03 \x01(\tH\x00\x12\x10\n\x08language\x18\x04 \x01(\t\"6\n\x04Type\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nPLAIN_TEXT\x10\x01\x12\x08\n\x04HTML\x10\x02\x42\x08\n\x06source\"~\n\x08Sentence\x12\x35\n\x04text\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.TextSpan\x12;\n\tsentiment\x18\x02 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\"\xd2\x03\n\x06\x45ntity\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\x04type\x18\x02 \x01(\x0e\x32*.google.cloud.language.v1beta2.Entity.Type\x12\x45\n\x08metadata\x18\x03 \x03(\x0b\x32\x33.google.cloud.language.v1beta2.Entity.MetadataEntry\x12\x10\n\x08salience\x18\x04 \x01(\x02\x12>\n\x08mentions\x18\x05 \x03(\x0b\x32,.google.cloud.language.v1beta2.EntityMention\x12;\n\tsentiment\x18\x06 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"y\n\x04Type\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06PERSON\x10\x01\x12\x0c\n\x08LOCATION\x10\x02\x12\x10\n\x0cORGANIZATION\x10\x03\x12\t\n\x05\x45VENT\x10\x04\x12\x0f\n\x0bWORK_OF_ART\x10\x05\x12\x11\n\rCONSUMER_GOOD\x10\x06\x12\t\n\x05OTHER\x10\x07\"\xda\x01\n\x05Token\x12\x35\n\x04text\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.TextSpan\x12\x43\n\x0epart_of_speech\x18\x02 \x01(\x0b\x32+.google.cloud.language.v1beta2.PartOfSpeech\x12\x46\n\x0f\x64\x65pendency_edge\x18\x03 \x01(\x0b\x32-.google.cloud.language.v1beta2.DependencyEdge\x12\r\n\x05lemma\x18\x04 \x01(\t\"-\n\tSentiment\x12\x11\n\tmagnitude\x18\x02 \x01(\x02\x12\r\n\x05score\x18\x03 \x01(\x02\"\xdf\x10\n\x0cPartOfSpeech\x12<\n\x03tag\x18\x01 \x01(\x0e\x32/.google.cloud.language.v1beta2.PartOfSpeech.Tag\x12\x42\n\x06\x61spect\x18\x02 \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Aspect\x12>\n\x04\x63\x61se\x18\x03 \x01(\x0e\x32\x30.google.cloud.language.v1beta2.PartOfSpeech.Case\x12>\n\x04\x66orm\x18\x04 \x01(\x0e\x32\x30.google.cloud.language.v1beta2.PartOfSpeech.Form\x12\x42\n\x06gender\x18\x05 \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Gender\x12>\n\x04mood\x18\x06 \x01(\x0e\x32\x30.google.cloud.language.v1beta2.PartOfSpeech.Mood\x12\x42\n\x06number\x18\x07 \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Number\x12\x42\n\x06person\x18\x08 \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Person\x12\x42\n\x06proper\x18\t \x01(\x0e\x32\x32.google.cloud.language.v1beta2.PartOfSpeech.Proper\x12L\n\x0breciprocity\x18\n \x01(\x0e\x32\x37.google.cloud.language.v1beta2.PartOfSpeech.Reciprocity\x12@\n\x05tense\x18\x0b \x01(\x0e\x32\x31.google.cloud.language.v1beta2.PartOfSpeech.Tense\x12@\n\x05voice\x18\x0c \x01(\x0e\x32\x31.google.cloud.language.v1beta2.PartOfSpeech.Voice\"\x8d\x01\n\x03Tag\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x41\x44J\x10\x01\x12\x07\n\x03\x41\x44P\x10\x02\x12\x07\n\x03\x41\x44V\x10\x03\x12\x08\n\x04\x43ONJ\x10\x04\x12\x07\n\x03\x44\x45T\x10\x05\x12\x08\n\x04NOUN\x10\x06\x12\x07\n\x03NUM\x10\x07\x12\x08\n\x04PRON\x10\x08\x12\x07\n\x03PRT\x10\t\x12\t\n\x05PUNCT\x10\n\x12\x08\n\x04VERB\x10\x0b\x12\x05\n\x01X\x10\x0c\x12\t\n\x05\x41\x46\x46IX\x10\r\"O\n\x06\x41spect\x12\x12\n\x0e\x41SPECT_UNKNOWN\x10\x00\x12\x0e\n\nPERFECTIVE\x10\x01\x12\x10\n\x0cIMPERFECTIVE\x10\x02\x12\x0f\n\x0bPROGRESSIVE\x10\x03\"\xf8\x01\n\x04\x43\x61se\x12\x10\n\x0c\x43\x41SE_UNKNOWN\x10\x00\x12\x0e\n\nACCUSATIVE\x10\x01\x12\r\n\tADVERBIAL\x10\x02\x12\x11\n\rCOMPLEMENTIVE\x10\x03\x12\n\n\x06\x44\x41TIVE\x10\x04\x12\x0c\n\x08GENITIVE\x10\x05\x12\x10\n\x0cINSTRUMENTAL\x10\x06\x12\x0c\n\x08LOCATIVE\x10\x07\x12\x0e\n\nNOMINATIVE\x10\x08\x12\x0b\n\x07OBLIQUE\x10\t\x12\r\n\tPARTITIVE\x10\n\x12\x11\n\rPREPOSITIONAL\x10\x0b\x12\x12\n\x0eREFLEXIVE_CASE\x10\x0c\x12\x11\n\rRELATIVE_CASE\x10\r\x12\x0c\n\x08VOCATIVE\x10\x0e\"\xaf\x01\n\x04\x46orm\x12\x10\n\x0c\x46ORM_UNKNOWN\x10\x00\x12\x0c\n\x08\x41\x44NOMIAL\x10\x01\x12\r\n\tAUXILIARY\x10\x02\x12\x12\n\x0e\x43OMPLEMENTIZER\x10\x03\x12\x10\n\x0c\x46INAL_ENDING\x10\x04\x12\n\n\x06GERUND\x10\x05\x12\n\n\x06REALIS\x10\x06\x12\x0c\n\x08IRREALIS\x10\x07\x12\t\n\x05SHORT\x10\x08\x12\x08\n\x04LONG\x10\t\x12\t\n\x05ORDER\x10\n\x12\x0c\n\x08SPECIFIC\x10\x0b\"E\n\x06Gender\x12\x12\n\x0eGENDER_UNKNOWN\x10\x00\x12\x0c\n\x08\x46\x45MININE\x10\x01\x12\r\n\tMASCULINE\x10\x02\x12\n\n\x06NEUTER\x10\x03\"\x7f\n\x04Mood\x12\x10\n\x0cMOOD_UNKNOWN\x10\x00\x12\x14\n\x10\x43ONDITIONAL_MOOD\x10\x01\x12\x0e\n\nIMPERATIVE\x10\x02\x12\x0e\n\nINDICATIVE\x10\x03\x12\x11\n\rINTERROGATIVE\x10\x04\x12\x0b\n\x07JUSSIVE\x10\x05\x12\x0f\n\x0bSUBJUNCTIVE\x10\x06\"@\n\x06Number\x12\x12\n\x0eNUMBER_UNKNOWN\x10\x00\x12\x0c\n\x08SINGULAR\x10\x01\x12\n\n\x06PLURAL\x10\x02\x12\x08\n\x04\x44UAL\x10\x03\"T\n\x06Person\x12\x12\n\x0ePERSON_UNKNOWN\x10\x00\x12\t\n\x05\x46IRST\x10\x01\x12\n\n\x06SECOND\x10\x02\x12\t\n\x05THIRD\x10\x03\x12\x14\n\x10REFLEXIVE_PERSON\x10\x04\"8\n\x06Proper\x12\x12\n\x0ePROPER_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\x0e\n\nNOT_PROPER\x10\x02\"J\n\x0bReciprocity\x12\x17\n\x13RECIPROCITY_UNKNOWN\x10\x00\x12\x0e\n\nRECIPROCAL\x10\x01\x12\x12\n\x0eNON_RECIPROCAL\x10\x02\"s\n\x05Tense\x12\x11\n\rTENSE_UNKNOWN\x10\x00\x12\x15\n\x11\x43ONDITIONAL_TENSE\x10\x01\x12\n\n\x06\x46UTURE\x10\x02\x12\x08\n\x04PAST\x10\x03\x12\x0b\n\x07PRESENT\x10\x04\x12\r\n\tIMPERFECT\x10\x05\x12\x0e\n\nPLUPERFECT\x10\x06\"B\n\x05Voice\x12\x11\n\rVOICE_UNKNOWN\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\r\n\tCAUSATIVE\x10\x02\x12\x0b\n\x07PASSIVE\x10\x03\"\x9a\x08\n\x0e\x44\x65pendencyEdge\x12\x18\n\x10head_token_index\x18\x01 \x01(\x05\x12\x42\n\x05label\x18\x02 \x01(\x0e\x32\x33.google.cloud.language.v1beta2.DependencyEdge.Label\"\xa9\x07\n\x05Label\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x41\x42\x42REV\x10\x01\x12\t\n\x05\x41\x43OMP\x10\x02\x12\t\n\x05\x41\x44VCL\x10\x03\x12\n\n\x06\x41\x44VMOD\x10\x04\x12\x08\n\x04\x41MOD\x10\x05\x12\t\n\x05\x41PPOS\x10\x06\x12\x08\n\x04\x41TTR\x10\x07\x12\x07\n\x03\x41UX\x10\x08\x12\x0b\n\x07\x41UXPASS\x10\t\x12\x06\n\x02\x43\x43\x10\n\x12\t\n\x05\x43\x43OMP\x10\x0b\x12\x08\n\x04\x43ONJ\x10\x0c\x12\t\n\x05\x43SUBJ\x10\r\x12\r\n\tCSUBJPASS\x10\x0e\x12\x07\n\x03\x44\x45P\x10\x0f\x12\x07\n\x03\x44\x45T\x10\x10\x12\r\n\tDISCOURSE\x10\x11\x12\x08\n\x04\x44OBJ\x10\x12\x12\x08\n\x04\x45XPL\x10\x13\x12\x0c\n\x08GOESWITH\x10\x14\x12\x08\n\x04IOBJ\x10\x15\x12\x08\n\x04MARK\x10\x16\x12\x07\n\x03MWE\x10\x17\x12\x07\n\x03MWV\x10\x18\x12\x07\n\x03NEG\x10\x19\x12\x06\n\x02NN\x10\x1a\x12\x0c\n\x08NPADVMOD\x10\x1b\x12\t\n\x05NSUBJ\x10\x1c\x12\r\n\tNSUBJPASS\x10\x1d\x12\x07\n\x03NUM\x10\x1e\x12\n\n\x06NUMBER\x10\x1f\x12\x05\n\x01P\x10 \x12\r\n\tPARATAXIS\x10!\x12\x0b\n\x07PARTMOD\x10\"\x12\t\n\x05PCOMP\x10#\x12\x08\n\x04POBJ\x10$\x12\x08\n\x04POSS\x10%\x12\x0b\n\x07POSTNEG\x10&\x12\x0b\n\x07PRECOMP\x10\'\x12\x0b\n\x07PRECONJ\x10(\x12\n\n\x06PREDET\x10)\x12\x08\n\x04PREF\x10*\x12\x08\n\x04PREP\x10+\x12\t\n\x05PRONL\x10,\x12\x07\n\x03PRT\x10-\x12\x06\n\x02PS\x10.\x12\x0c\n\x08QUANTMOD\x10/\x12\t\n\x05RCMOD\x10\x30\x12\x0c\n\x08RCMODREL\x10\x31\x12\t\n\x05RDROP\x10\x32\x12\x07\n\x03REF\x10\x33\x12\x0b\n\x07REMNANT\x10\x34\x12\x0e\n\nREPARANDUM\x10\x35\x12\x08\n\x04ROOT\x10\x36\x12\x08\n\x04SNUM\x10\x37\x12\x08\n\x04SUFF\x10\x38\x12\x08\n\x04TMOD\x10\x39\x12\t\n\x05TOPIC\x10:\x12\x08\n\x04VMOD\x10;\x12\x0c\n\x08VOCATIVE\x10<\x12\t\n\x05XCOMP\x10=\x12\n\n\x06SUFFIX\x10>\x12\t\n\x05TITLE\x10?\x12\x0c\n\x08\x41\x44VPHMOD\x10@\x12\x0b\n\x07\x41UXCAUS\x10\x41\x12\t\n\x05\x41UXVV\x10\x42\x12\t\n\x05\x44TMOD\x10\x43\x12\x0b\n\x07\x46OREIGN\x10\x44\x12\x06\n\x02KW\x10\x45\x12\x08\n\x04LIST\x10\x46\x12\x08\n\x04NOMC\x10G\x12\x0c\n\x08NOMCSUBJ\x10H\x12\x10\n\x0cNOMCSUBJPASS\x10I\x12\x08\n\x04NUMC\x10J\x12\x07\n\x03\x43OP\x10K\x12\x0e\n\nDISLOCATED\x10L\x12\x07\n\x03\x41SP\x10M\x12\x08\n\x04GMOD\x10N\x12\x08\n\x04GOBJ\x10O\x12\n\n\x06INFMOD\x10P\x12\x07\n\x03MES\x10Q\x12\t\n\x05NCOMP\x10R\"\xf6\x01\n\rEntityMention\x12\x35\n\x04text\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.TextSpan\x12?\n\x04type\x18\x02 \x01(\x0e\x32\x31.google.cloud.language.v1beta2.EntityMention.Type\x12;\n\tsentiment\x18\x03 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\"0\n\x04Type\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\n\n\x06\x43OMMON\x10\x02\"1\n\x08TextSpan\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x14\n\x0c\x62\x65gin_offset\x18\x02 \x01(\x05\":\n\x16\x43lassificationCategory\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nconfidence\x18\x02 \x01(\x02\"\x98\x01\n\x17\x41nalyzeSentimentRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12\x42\n\rencoding_type\x18\x02 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\"\xae\x01\n\x18\x41nalyzeSentimentResponse\x12\x44\n\x12\x64ocument_sentiment\x18\x01 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\x12\x10\n\x08language\x18\x02 \x01(\t\x12:\n\tsentences\x18\x03 \x03(\x0b\x32\'.google.cloud.language.v1beta2.Sentence\"\x9e\x01\n\x1d\x41nalyzeEntitySentimentRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12\x42\n\rencoding_type\x18\x02 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\"k\n\x1e\x41nalyzeEntitySentimentResponse\x12\x37\n\x08\x65ntities\x18\x01 \x03(\x0b\x32%.google.cloud.language.v1beta2.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x97\x01\n\x16\x41nalyzeEntitiesRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12\x42\n\rencoding_type\x18\x02 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\"d\n\x17\x41nalyzeEntitiesResponse\x12\x37\n\x08\x65ntities\x18\x01 \x03(\x0b\x32%.google.cloud.language.v1beta2.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x95\x01\n\x14\x41nalyzeSyntaxRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12\x42\n\rencoding_type\x18\x02 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\"\x9b\x01\n\x15\x41nalyzeSyntaxResponse\x12:\n\tsentences\x18\x01 \x03(\x0b\x32\'.google.cloud.language.v1beta2.Sentence\x12\x34\n\x06tokens\x18\x02 \x03(\x0b\x32$.google.cloud.language.v1beta2.Token\x12\x10\n\x08language\x18\x03 \x01(\t\"P\n\x13\x43lassifyTextRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\"a\n\x14\x43lassifyTextResponse\x12I\n\ncategories\x18\x01 \x03(\x0b\x32\x35.google.cloud.language.v1beta2.ClassificationCategory\"\xff\x02\n\x13\x41nnotateTextRequest\x12\x39\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\'.google.cloud.language.v1beta2.Document\x12M\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0b\x32;.google.cloud.language.v1beta2.AnnotateTextRequest.Features\x12\x42\n\rencoding_type\x18\x03 \x01(\x0e\x32+.google.cloud.language.v1beta2.EncodingType\x1a\x99\x01\n\x08\x46\x65\x61tures\x12\x16\n\x0e\x65xtract_syntax\x18\x01 \x01(\x08\x12\x18\n\x10\x65xtract_entities\x18\x02 \x01(\x08\x12\"\n\x1a\x65xtract_document_sentiment\x18\x03 \x01(\x08\x12 \n\x18\x65xtract_entity_sentiment\x18\x04 \x01(\x08\x12\x15\n\rclassify_text\x18\x06 \x01(\x08\"\xe4\x02\n\x14\x41nnotateTextResponse\x12:\n\tsentences\x18\x01 \x03(\x0b\x32\'.google.cloud.language.v1beta2.Sentence\x12\x34\n\x06tokens\x18\x02 \x03(\x0b\x32$.google.cloud.language.v1beta2.Token\x12\x37\n\x08\x65ntities\x18\x03 \x03(\x0b\x32%.google.cloud.language.v1beta2.Entity\x12\x44\n\x12\x64ocument_sentiment\x18\x04 \x01(\x0b\x32(.google.cloud.language.v1beta2.Sentiment\x12\x10\n\x08language\x18\x05 \x01(\t\x12I\n\ncategories\x18\x06 \x03(\x0b\x32\x35.google.cloud.language.v1beta2.ClassificationCategory*8\n\x0c\x45ncodingType\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04UTF8\x10\x01\x12\t\n\x05UTF16\x10\x02\x12\t\n\x05UTF32\x10\x03\x32\xbd\x08\n\x0fLanguageService\x12\xb3\x01\n\x10\x41nalyzeSentiment\x12\x36.google.cloud.language.v1beta2.AnalyzeSentimentRequest\x1a\x37.google.cloud.language.v1beta2.AnalyzeSentimentResponse\".\x82\xd3\xe4\x93\x02(\"#/v1beta2/documents:analyzeSentiment:\x01*\x12\xaf\x01\n\x0f\x41nalyzeEntities\x12\x35.google.cloud.language.v1beta2.AnalyzeEntitiesRequest\x1a\x36.google.cloud.language.v1beta2.AnalyzeEntitiesResponse\"-\x82\xd3\xe4\x93\x02\'\"\"/v1beta2/documents:analyzeEntities:\x01*\x12\xcb\x01\n\x16\x41nalyzeEntitySentiment\x12<.google.cloud.language.v1beta2.AnalyzeEntitySentimentRequest\x1a=.google.cloud.language.v1beta2.AnalyzeEntitySentimentResponse\"4\x82\xd3\xe4\x93\x02.\")/v1beta2/documents:analyzeEntitySentiment:\x01*\x12\xa7\x01\n\rAnalyzeSyntax\x12\x33.google.cloud.language.v1beta2.AnalyzeSyntaxRequest\x1a\x34.google.cloud.language.v1beta2.AnalyzeSyntaxResponse\"+\x82\xd3\xe4\x93\x02%\" /v1beta2/documents:analyzeSyntax:\x01*\x12\xa3\x01\n\x0c\x43lassifyText\x12\x32.google.cloud.language.v1beta2.ClassifyTextRequest\x1a\x33.google.cloud.language.v1beta2.ClassifyTextResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1beta2/documents:classifyText:\x01*\x12\xa3\x01\n\x0c\x41nnotateText\x12\x32.google.cloud.language.v1beta2.AnnotateTextRequest\x1a\x33.google.cloud.language.v1beta2.AnnotateTextResponse\"*\x82\xd3\xe4\x93\x02$\"\x1f/v1beta2/documents:annotateText:\x01*B\x82\x01\n!com.google.cloud.language.v1beta2B\x14LanguageServiceProtoP\x01ZEgoogle.golang.org/genproto/googleapis/cloud/language/v1beta2;languageb\x06proto3') , dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_longrunning_dot_operations__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,google_dot_rpc_dot_status__pb2.DESCRIPTOR,]) _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -54,8 +54,8 @@ ], containing_type=None, options=None, - serialized_start=6539, - serialized_end=6595, + serialized_start=6939, + serialized_end=6995, ) _sym_db.RegisterEnumDescriptor(_ENCODINGTYPE) @@ -948,11 +948,35 @@ name='DISLOCATED', index=76, number=76, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='ASP', index=77, number=77, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GMOD', index=78, number=78, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GOBJ', index=79, number=79, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INFMOD', index=80, number=80, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MES', index=81, number=81, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NCOMP', index=82, number=82, + options=None, + type=None), ], containing_type=None, options=None, serialized_start=3546, - serialized_end=4422, + serialized_end=4483, ) _sym_db.RegisterEnumDescriptor(_DEPENDENCYEDGE_LABEL) @@ -977,8 +1001,8 @@ ], containing_type=None, options=None, - serialized_start=4623, - serialized_end=4671, + serialized_start=4684, + serialized_end=4732, ) _sym_db.RegisterEnumDescriptor(_ENTITYMENTION_TYPE) @@ -1426,7 +1450,7 @@ oneofs=[ ], serialized_start=3433, - serialized_end=4422, + serialized_end=4483, ) @@ -1471,8 +1495,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4425, - serialized_end=4671, + serialized_start=4486, + serialized_end=4732, ) @@ -1509,8 +1533,46 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4673, - serialized_end=4722, + serialized_start=4734, + serialized_end=4783, +) + + +_CLASSIFICATIONCATEGORY = _descriptor.Descriptor( + name='ClassificationCategory', + full_name='google.cloud.language.v1beta2.ClassificationCategory', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.cloud.language.v1beta2.ClassificationCategory.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='confidence', full_name='google.cloud.language.v1beta2.ClassificationCategory.confidence', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=4785, + serialized_end=4843, ) @@ -1547,8 +1609,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4725, - serialized_end=4877, + serialized_start=4846, + serialized_end=4998, ) @@ -1592,8 +1654,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4880, - serialized_end=5054, + serialized_start=5001, + serialized_end=5175, ) @@ -1630,8 +1692,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5057, - serialized_end=5215, + serialized_start=5178, + serialized_end=5336, ) @@ -1668,8 +1730,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5217, - serialized_end=5324, + serialized_start=5338, + serialized_end=5445, ) @@ -1706,8 +1768,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5327, - serialized_end=5478, + serialized_start=5448, + serialized_end=5599, ) @@ -1744,8 +1806,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5480, - serialized_end=5580, + serialized_start=5601, + serialized_end=5701, ) @@ -1782,8 +1844,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5583, - serialized_end=5732, + serialized_start=5704, + serialized_end=5853, ) @@ -1827,8 +1889,70 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5735, - serialized_end=5890, + serialized_start=5856, + serialized_end=6011, +) + + +_CLASSIFYTEXTREQUEST = _descriptor.Descriptor( + name='ClassifyTextRequest', + full_name='google.cloud.language.v1beta2.ClassifyTextRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='document', full_name='google.cloud.language.v1beta2.ClassifyTextRequest.document', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6013, + serialized_end=6093, +) + + +_CLASSIFYTEXTRESPONSE = _descriptor.Descriptor( + name='ClassifyTextResponse', + full_name='google.cloud.language.v1beta2.ClassifyTextResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='categories', full_name='google.cloud.language.v1beta2.ClassifyTextResponse.categories', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=6095, + serialized_end=6192, ) @@ -1867,6 +1991,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), + _descriptor.FieldDescriptor( + name='classify_text', full_name='google.cloud.language.v1beta2.AnnotateTextRequest.Features.classify_text', index=4, + number=6, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), ], extensions=[ ], @@ -1879,8 +2010,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6123, - serialized_end=6253, + serialized_start=6425, + serialized_end=6578, ) _ANNOTATETEXTREQUEST = _descriptor.Descriptor( @@ -1923,8 +2054,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5893, - serialized_end=6253, + serialized_start=6195, + serialized_end=6578, ) @@ -1970,6 +2101,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), + _descriptor.FieldDescriptor( + name='categories', full_name='google.cloud.language.v1beta2.AnnotateTextResponse.categories', index=5, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), ], extensions=[ ], @@ -1982,8 +2120,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6256, - serialized_end=6537, + serialized_start=6581, + serialized_end=6937, ) _DOCUMENT.fields_by_name['type'].enum_type = _DOCUMENT_TYPE @@ -2049,6 +2187,8 @@ _ANALYZESYNTAXREQUEST.fields_by_name['encoding_type'].enum_type = _ENCODINGTYPE _ANALYZESYNTAXRESPONSE.fields_by_name['sentences'].message_type = _SENTENCE _ANALYZESYNTAXRESPONSE.fields_by_name['tokens'].message_type = _TOKEN +_CLASSIFYTEXTREQUEST.fields_by_name['document'].message_type = _DOCUMENT +_CLASSIFYTEXTRESPONSE.fields_by_name['categories'].message_type = _CLASSIFICATIONCATEGORY _ANNOTATETEXTREQUEST_FEATURES.containing_type = _ANNOTATETEXTREQUEST _ANNOTATETEXTREQUEST.fields_by_name['document'].message_type = _DOCUMENT _ANNOTATETEXTREQUEST.fields_by_name['features'].message_type = _ANNOTATETEXTREQUEST_FEATURES @@ -2057,6 +2197,7 @@ _ANNOTATETEXTRESPONSE.fields_by_name['tokens'].message_type = _TOKEN _ANNOTATETEXTRESPONSE.fields_by_name['entities'].message_type = _ENTITY _ANNOTATETEXTRESPONSE.fields_by_name['document_sentiment'].message_type = _SENTIMENT +_ANNOTATETEXTRESPONSE.fields_by_name['categories'].message_type = _CLASSIFICATIONCATEGORY DESCRIPTOR.message_types_by_name['Document'] = _DOCUMENT DESCRIPTOR.message_types_by_name['Sentence'] = _SENTENCE DESCRIPTOR.message_types_by_name['Entity'] = _ENTITY @@ -2066,6 +2207,7 @@ DESCRIPTOR.message_types_by_name['DependencyEdge'] = _DEPENDENCYEDGE DESCRIPTOR.message_types_by_name['EntityMention'] = _ENTITYMENTION DESCRIPTOR.message_types_by_name['TextSpan'] = _TEXTSPAN +DESCRIPTOR.message_types_by_name['ClassificationCategory'] = _CLASSIFICATIONCATEGORY DESCRIPTOR.message_types_by_name['AnalyzeSentimentRequest'] = _ANALYZESENTIMENTREQUEST DESCRIPTOR.message_types_by_name['AnalyzeSentimentResponse'] = _ANALYZESENTIMENTRESPONSE DESCRIPTOR.message_types_by_name['AnalyzeEntitySentimentRequest'] = _ANALYZEENTITYSENTIMENTREQUEST @@ -2074,13 +2216,15 @@ DESCRIPTOR.message_types_by_name['AnalyzeEntitiesResponse'] = _ANALYZEENTITIESRESPONSE DESCRIPTOR.message_types_by_name['AnalyzeSyntaxRequest'] = _ANALYZESYNTAXREQUEST DESCRIPTOR.message_types_by_name['AnalyzeSyntaxResponse'] = _ANALYZESYNTAXRESPONSE +DESCRIPTOR.message_types_by_name['ClassifyTextRequest'] = _CLASSIFYTEXTREQUEST +DESCRIPTOR.message_types_by_name['ClassifyTextResponse'] = _CLASSIFYTEXTRESPONSE DESCRIPTOR.message_types_by_name['AnnotateTextRequest'] = _ANNOTATETEXTREQUEST DESCRIPTOR.message_types_by_name['AnnotateTextResponse'] = _ANNOTATETEXTRESPONSE DESCRIPTOR.enum_types_by_name['EncodingType'] = _ENCODINGTYPE Document = _reflection.GeneratedProtocolMessageType('Document', (_message.Message,), dict( DESCRIPTOR = _DOCUMENT, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents the input to API methods. @@ -2103,12 +2247,12 @@ language: The language of the document (if not specified, the language is automatically detected). Both ISO and BCP-47 language codes - are accepted. `Language Support - `__ - 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. + are accepted. `Language Support `__ 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. """, # @@protoc_insertion_point(class_scope:google.cloud.language.v1beta2.Document) )) @@ -2116,7 +2260,7 @@ Sentence = _reflection.GeneratedProtocolMessageType('Sentence', (_message.Message,), dict( DESCRIPTOR = _SENTENCE, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents a sentence in the input document. @@ -2139,12 +2283,12 @@ MetadataEntry = _reflection.GeneratedProtocolMessageType('MetadataEntry', (_message.Message,), dict( DESCRIPTOR = _ENTITY_METADATAENTRY, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' # @@protoc_insertion_point(class_scope:google.cloud.language.v1beta2.Entity.MetadataEntry) )) , DESCRIPTOR = _ENTITY, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents a phrase in the text that is a known entity, such as a person, an organization, or location. The API associates information, @@ -2183,7 +2327,7 @@ Token = _reflection.GeneratedProtocolMessageType('Token', (_message.Message,), dict( DESCRIPTOR = _TOKEN, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents the smallest syntactic building block of the text. @@ -2206,7 +2350,7 @@ Sentiment = _reflection.GeneratedProtocolMessageType('Sentiment', (_message.Message,), dict( DESCRIPTOR = _SENTIMENT, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents the feeling associated with the entire text or entities in the text. @@ -2227,7 +2371,7 @@ PartOfSpeech = _reflection.GeneratedProtocolMessageType('PartOfSpeech', (_message.Message,), dict( DESCRIPTOR = _PARTOFSPEECH, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents part of speech information for a token. @@ -2264,7 +2408,7 @@ DependencyEdge = _reflection.GeneratedProtocolMessageType('DependencyEdge', (_message.Message,), dict( DESCRIPTOR = _DEPENDENCYEDGE, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents dependency parse tree information for a token. @@ -2285,7 +2429,7 @@ EntityMention = _reflection.GeneratedProtocolMessageType('EntityMention', (_message.Message,), dict( DESCRIPTOR = _ENTITYMENTION, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents a mention for an entity in the text. Currently, proper noun mentions are supported. @@ -2310,7 +2454,7 @@ TextSpan = _reflection.GeneratedProtocolMessageType('TextSpan', (_message.Message,), dict( DESCRIPTOR = _TEXTSPAN, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """Represents an output piece of text. @@ -2328,9 +2472,28 @@ )) _sym_db.RegisterMessage(TextSpan) +ClassificationCategory = _reflection.GeneratedProtocolMessageType('ClassificationCategory', (_message.Message,), dict( + DESCRIPTOR = _CLASSIFICATIONCATEGORY, + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' + , + __doc__ = """Represents a category returned from the text classifier. + + + Attributes: + name: + The name of the category representing the document. + confidence: + The classifier's confidence of the category. Number represents + how certain the classifier is that this category represents + the given text. + """, + # @@protoc_insertion_point(class_scope:google.cloud.language.v1beta2.ClassificationCategory) + )) +_sym_db.RegisterMessage(ClassificationCategory) + AnalyzeSentimentRequest = _reflection.GeneratedProtocolMessageType('AnalyzeSentimentRequest', (_message.Message,), dict( DESCRIPTOR = _ANALYZESENTIMENTREQUEST, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The sentiment analysis request message. @@ -2348,7 +2511,7 @@ AnalyzeSentimentResponse = _reflection.GeneratedProtocolMessageType('AnalyzeSentimentResponse', (_message.Message,), dict( DESCRIPTOR = _ANALYZESENTIMENTRESPONSE, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The sentiment analysis response message. @@ -2371,7 +2534,7 @@ AnalyzeEntitySentimentRequest = _reflection.GeneratedProtocolMessageType('AnalyzeEntitySentimentRequest', (_message.Message,), dict( DESCRIPTOR = _ANALYZEENTITYSENTIMENTREQUEST, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The entity-level sentiment analysis request message. @@ -2388,7 +2551,7 @@ AnalyzeEntitySentimentResponse = _reflection.GeneratedProtocolMessageType('AnalyzeEntitySentimentResponse', (_message.Message,), dict( DESCRIPTOR = _ANALYZEENTITYSENTIMENTRESPONSE, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The entity-level sentiment analysis response message. @@ -2410,7 +2573,7 @@ AnalyzeEntitiesRequest = _reflection.GeneratedProtocolMessageType('AnalyzeEntitiesRequest', (_message.Message,), dict( DESCRIPTOR = _ANALYZEENTITIESREQUEST, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The entity analysis request message. @@ -2427,7 +2590,7 @@ AnalyzeEntitiesResponse = _reflection.GeneratedProtocolMessageType('AnalyzeEntitiesResponse', (_message.Message,), dict( DESCRIPTOR = _ANALYZEENTITIESRESPONSE, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The entity analysis response message. @@ -2448,7 +2611,7 @@ AnalyzeSyntaxRequest = _reflection.GeneratedProtocolMessageType('AnalyzeSyntaxRequest', (_message.Message,), dict( DESCRIPTOR = _ANALYZESYNTAXREQUEST, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The syntax analysis request message. @@ -2465,7 +2628,7 @@ AnalyzeSyntaxResponse = _reflection.GeneratedProtocolMessageType('AnalyzeSyntaxResponse', (_message.Message,), dict( DESCRIPTOR = _ANALYZESYNTAXRESPONSE, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The syntax analysis response message. @@ -2487,11 +2650,41 @@ )) _sym_db.RegisterMessage(AnalyzeSyntaxResponse) +ClassifyTextRequest = _reflection.GeneratedProtocolMessageType('ClassifyTextRequest', (_message.Message,), dict( + DESCRIPTOR = _CLASSIFYTEXTREQUEST, + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' + , + __doc__ = """The document classification request message. + + + Attributes: + document: + Input document. + """, + # @@protoc_insertion_point(class_scope:google.cloud.language.v1beta2.ClassifyTextRequest) + )) +_sym_db.RegisterMessage(ClassifyTextRequest) + +ClassifyTextResponse = _reflection.GeneratedProtocolMessageType('ClassifyTextResponse', (_message.Message,), dict( + DESCRIPTOR = _CLASSIFYTEXTRESPONSE, + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' + , + __doc__ = """The document classification response message. + + + Attributes: + categories: + Categories representing the input document. + """, + # @@protoc_insertion_point(class_scope:google.cloud.language.v1beta2.ClassifyTextResponse) + )) +_sym_db.RegisterMessage(ClassifyTextResponse) + AnnotateTextRequest = _reflection.GeneratedProtocolMessageType('AnnotateTextRequest', (_message.Message,), dict( Features = _reflection.GeneratedProtocolMessageType('Features', (_message.Message,), dict( DESCRIPTOR = _ANNOTATETEXTREQUEST_FEATURES, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """All available features for sentiment, syntax, and semantic analysis. Setting each one to true will enable that specific analysis for the @@ -2501,7 +2694,7 @@ )) , DESCRIPTOR = _ANNOTATETEXTREQUEST, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The request message for the text annotation API, which can perform multiple analysis types (sentiment, entities, and syntax) in one call. @@ -2516,6 +2709,8 @@ Extract document-level sentiment. extract_entity_sentiment: Extract entities and their associated sentiment. + classify_text: + Classify the full document into categories. document: Input document. features: @@ -2530,7 +2725,7 @@ AnnotateTextResponse = _reflection.GeneratedProtocolMessageType('AnnotateTextResponse', (_message.Message,), dict( DESCRIPTOR = _ANNOTATETEXTRESPONSE, - __module__ = 'google.cloud.proto.language.v1beta2.language_service_pb2' + __module__ = 'google.cloud.language_v1beta2.proto.language_service_pb2' , __doc__ = """The text annotations response message. @@ -2561,6 +2756,8 @@ automatically-detected language. See [Document.language][googl e.cloud.language.v1beta2.Document.language] field for more details. + categories: + Categories identified in the input document. """, # @@protoc_insertion_point(class_scope:google.cloud.language.v1beta2.AnnotateTextResponse) )) @@ -2612,6 +2809,11 @@ def __init__(self, channel): request_serializer=AnalyzeSyntaxRequest.SerializeToString, response_deserializer=AnalyzeSyntaxResponse.FromString, ) + self.ClassifyText = channel.unary_unary( + '/google.cloud.language.v1beta2.LanguageService/ClassifyText', + request_serializer=ClassifyTextRequest.SerializeToString, + response_deserializer=ClassifyTextResponse.FromString, + ) self.AnnotateText = channel.unary_unary( '/google.cloud.language.v1beta2.LanguageService/AnnotateText', request_serializer=AnnotateTextRequest.SerializeToString, @@ -2657,9 +2859,16 @@ def AnalyzeSyntax(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ClassifyText(self, request, context): + """Classifies a document into categories. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def AnnotateText(self, request, context): - """A convenience method that provides all syntax, sentiment, and entity - features in one call. + """A convenience method that provides all syntax, sentiment, entity, and + classification features in one call. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -2688,6 +2897,11 @@ def add_LanguageServiceServicer_to_server(servicer, server): request_deserializer=AnalyzeSyntaxRequest.FromString, response_serializer=AnalyzeSyntaxResponse.SerializeToString, ), + 'ClassifyText': grpc.unary_unary_rpc_method_handler( + servicer.ClassifyText, + request_deserializer=ClassifyTextRequest.FromString, + response_serializer=ClassifyTextResponse.SerializeToString, + ), 'AnnotateText': grpc.unary_unary_rpc_method_handler( servicer.AnnotateText, request_deserializer=AnnotateTextRequest.FromString, @@ -2729,9 +2943,13 @@ def AnalyzeSyntax(self, request, context): properties. """ context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def ClassifyText(self, request, context): + """Classifies a document into categories. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) def AnnotateText(self, request, context): - """A convenience method that provides all syntax, sentiment, and entity - features in one call. + """A convenience method that provides all syntax, sentiment, entity, and + classification features in one call. """ context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) @@ -2770,9 +2988,14 @@ def AnalyzeSyntax(self, request, timeout, metadata=None, with_call=False, protoc """ raise NotImplementedError() AnalyzeSyntax.future = None + def ClassifyText(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Classifies a document into categories. + """ + raise NotImplementedError() + ClassifyText.future = None def AnnotateText(self, request, timeout, metadata=None, with_call=False, protocol_options=None): - """A convenience method that provides all syntax, sentiment, and entity - features in one call. + """A convenience method that provides all syntax, sentiment, entity, and + classification features in one call. """ raise NotImplementedError() AnnotateText.future = None @@ -2790,6 +3013,7 @@ def beta_create_LanguageService_server(servicer, pool=None, pool_size=None, defa ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSentiment'): AnalyzeSentimentRequest.FromString, ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSyntax'): AnalyzeSyntaxRequest.FromString, ('google.cloud.language.v1beta2.LanguageService', 'AnnotateText'): AnnotateTextRequest.FromString, + ('google.cloud.language.v1beta2.LanguageService', 'ClassifyText'): ClassifyTextRequest.FromString, } response_serializers = { ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeEntities'): AnalyzeEntitiesResponse.SerializeToString, @@ -2797,6 +3021,7 @@ def beta_create_LanguageService_server(servicer, pool=None, pool_size=None, defa ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSentiment'): AnalyzeSentimentResponse.SerializeToString, ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSyntax'): AnalyzeSyntaxResponse.SerializeToString, ('google.cloud.language.v1beta2.LanguageService', 'AnnotateText'): AnnotateTextResponse.SerializeToString, + ('google.cloud.language.v1beta2.LanguageService', 'ClassifyText'): ClassifyTextResponse.SerializeToString, } method_implementations = { ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeEntities'): face_utilities.unary_unary_inline(servicer.AnalyzeEntities), @@ -2804,6 +3029,7 @@ def beta_create_LanguageService_server(servicer, pool=None, pool_size=None, defa ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSentiment'): face_utilities.unary_unary_inline(servicer.AnalyzeSentiment), ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSyntax'): face_utilities.unary_unary_inline(servicer.AnalyzeSyntax), ('google.cloud.language.v1beta2.LanguageService', 'AnnotateText'): face_utilities.unary_unary_inline(servicer.AnnotateText), + ('google.cloud.language.v1beta2.LanguageService', 'ClassifyText'): face_utilities.unary_unary_inline(servicer.ClassifyText), } server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) return beta_implementations.server(method_implementations, options=server_options) @@ -2821,6 +3047,7 @@ def beta_create_LanguageService_stub(channel, host=None, metadata_transformer=No ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSentiment'): AnalyzeSentimentRequest.SerializeToString, ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSyntax'): AnalyzeSyntaxRequest.SerializeToString, ('google.cloud.language.v1beta2.LanguageService', 'AnnotateText'): AnnotateTextRequest.SerializeToString, + ('google.cloud.language.v1beta2.LanguageService', 'ClassifyText'): ClassifyTextRequest.SerializeToString, } response_deserializers = { ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeEntities'): AnalyzeEntitiesResponse.FromString, @@ -2828,6 +3055,7 @@ def beta_create_LanguageService_stub(channel, host=None, metadata_transformer=No ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSentiment'): AnalyzeSentimentResponse.FromString, ('google.cloud.language.v1beta2.LanguageService', 'AnalyzeSyntax'): AnalyzeSyntaxResponse.FromString, ('google.cloud.language.v1beta2.LanguageService', 'AnnotateText'): AnnotateTextResponse.FromString, + ('google.cloud.language.v1beta2.LanguageService', 'ClassifyText'): ClassifyTextResponse.FromString, } cardinalities = { 'AnalyzeEntities': cardinality.Cardinality.UNARY_UNARY, @@ -2835,6 +3063,7 @@ def beta_create_LanguageService_stub(channel, host=None, metadata_transformer=No 'AnalyzeSentiment': cardinality.Cardinality.UNARY_UNARY, 'AnalyzeSyntax': cardinality.Cardinality.UNARY_UNARY, 'AnnotateText': cardinality.Cardinality.UNARY_UNARY, + 'ClassifyText': cardinality.Cardinality.UNARY_UNARY, } stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) return beta_implementations.dynamic_stub(channel, 'google.cloud.language.v1beta2.LanguageService', cardinalities, options=stub_options) diff --git a/language/google/cloud/language_v1beta2/proto/language_service_pb2_grpc.py b/language/google/cloud/language_v1beta2/proto/language_service_pb2_grpc.py new file mode 100644 index 000000000000..37fffd5bfba9 --- /dev/null +++ b/language/google/cloud/language_v1beta2/proto/language_service_pb2_grpc.py @@ -0,0 +1,139 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +import google.cloud.language_v1beta2.proto.language_service_pb2 as google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2 + + +class LanguageServiceStub(object): + """Provides text analysis operations such as sentiment analysis and entity + recognition. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.AnalyzeSentiment = channel.unary_unary( + '/google.cloud.language.v1beta2.LanguageService/AnalyzeSentiment', + request_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeSentimentRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeSentimentResponse.FromString, + ) + self.AnalyzeEntities = channel.unary_unary( + '/google.cloud.language.v1beta2.LanguageService/AnalyzeEntities', + request_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeEntitiesRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeEntitiesResponse.FromString, + ) + self.AnalyzeEntitySentiment = channel.unary_unary( + '/google.cloud.language.v1beta2.LanguageService/AnalyzeEntitySentiment', + request_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeEntitySentimentRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeEntitySentimentResponse.FromString, + ) + self.AnalyzeSyntax = channel.unary_unary( + '/google.cloud.language.v1beta2.LanguageService/AnalyzeSyntax', + request_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeSyntaxRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeSyntaxResponse.FromString, + ) + self.ClassifyText = channel.unary_unary( + '/google.cloud.language.v1beta2.LanguageService/ClassifyText', + request_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.ClassifyTextRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.ClassifyTextResponse.FromString, + ) + self.AnnotateText = channel.unary_unary( + '/google.cloud.language.v1beta2.LanguageService/AnnotateText', + request_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnnotateTextRequest.SerializeToString, + response_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnnotateTextResponse.FromString, + ) + + +class LanguageServiceServicer(object): + """Provides text analysis operations such as sentiment analysis and entity + recognition. + """ + + def AnalyzeSentiment(self, request, context): + """Analyzes the sentiment of the provided text. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AnalyzeEntities(self, request, context): + """Finds named entities (currently proper names and common nouns) in the text + along with entity types, salience, mentions for each entity, and + other properties. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AnalyzeEntitySentiment(self, request, context): + """Finds entities, similar to [AnalyzeEntities][google.cloud.language.v1beta2.LanguageService.AnalyzeEntities] in the text and analyzes + sentiment associated with each entity and its mentions. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AnalyzeSyntax(self, request, context): + """Analyzes the syntax of the text and provides sentence boundaries and + tokenization along with part of speech tags, dependency trees, and other + properties. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ClassifyText(self, request, context): + """Classifies a document into categories. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AnnotateText(self, request, context): + """A convenience method that provides all syntax, sentiment, entity, and + classification features in one call. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_LanguageServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'AnalyzeSentiment': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeSentiment, + request_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeSentimentRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeSentimentResponse.SerializeToString, + ), + 'AnalyzeEntities': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeEntities, + request_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeEntitiesRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeEntitiesResponse.SerializeToString, + ), + 'AnalyzeEntitySentiment': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeEntitySentiment, + request_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeEntitySentimentRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeEntitySentimentResponse.SerializeToString, + ), + 'AnalyzeSyntax': grpc.unary_unary_rpc_method_handler( + servicer.AnalyzeSyntax, + request_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeSyntaxRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnalyzeSyntaxResponse.SerializeToString, + ), + 'ClassifyText': grpc.unary_unary_rpc_method_handler( + servicer.ClassifyText, + request_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.ClassifyTextRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.ClassifyTextResponse.SerializeToString, + ), + 'AnnotateText': grpc.unary_unary_rpc_method_handler( + servicer.AnnotateText, + request_deserializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnnotateTextRequest.FromString, + response_serializer=google_dot_cloud_dot_language__v1beta2_dot_proto_dot_language__service__pb2.AnnotateTextResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'google.cloud.language.v1beta2.LanguageService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/language/google/cloud/language_v1beta2/types.py b/language/google/cloud/language_v1beta2/types.py index 557d05aeb001..9bfa8fb63d8b 100644 --- a/language/google/cloud/language_v1beta2/types.py +++ b/language/google/cloud/language_v1beta2/types.py @@ -15,16 +15,30 @@ from __future__ import absolute_import import sys -from google.cloud.proto.language.v1beta2 import language_service_pb2 - from google.gax.utils.messages import get_messages +from google.api import http_pb2 +from google.cloud.language_v1beta2.proto import language_service_pb2 +from google.longrunning import operations_pb2 +from google.protobuf import any_pb2 +from google.protobuf import descriptor_pb2 +from google.protobuf import empty_pb2 +from google.protobuf import timestamp_pb2 +from google.rpc import status_pb2 names = [] -for name, message in get_messages(language_service_pb2).items(): - message.__module__ = 'google.cloud.language_v1beta2.types' - setattr(sys.modules[__name__], name, message) - names.append(name) - +for module in ( + http_pb2, + language_service_pb2, + operations_pb2, + any_pb2, + descriptor_pb2, + empty_pb2, + timestamp_pb2, + status_pb2, ): + for name, message in get_messages(module).items(): + message.__module__ = 'google.cloud.language_v1beta2.types' + setattr(sys.modules[__name__], name, message) + names.append(name) __all__ = tuple(sorted(names)) diff --git a/language/google/cloud/proto/__init__.py b/language/google/cloud/proto/__init__.py deleted file mode 100644 index de40ea7ca058..000000000000 --- a/language/google/cloud/proto/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__import__('pkg_resources').declare_namespace(__name__) diff --git a/language/google/cloud/proto/language/__init__.py b/language/google/cloud/proto/language/__init__.py deleted file mode 100644 index de40ea7ca058..000000000000 --- a/language/google/cloud/proto/language/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__import__('pkg_resources').declare_namespace(__name__) diff --git a/language/google/cloud/proto/language/v1/__init__.py b/language/google/cloud/proto/language/v1/__init__.py deleted file mode 100644 index 8b137891791f..000000000000 --- a/language/google/cloud/proto/language/v1/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/language/google/cloud/proto/language/v1/language_service_pb2_grpc.py b/language/google/cloud/proto/language/v1/language_service_pb2_grpc.py deleted file mode 100644 index 19ab43fae3f0..000000000000 --- a/language/google/cloud/proto/language/v1/language_service_pb2_grpc.py +++ /dev/null @@ -1,104 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - -import google.cloud.proto.language.v1.language_service_pb2 as google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2 - - -class LanguageServiceStub(object): - """Provides text analysis operations such as sentiment analysis and entity - recognition. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.AnalyzeSentiment = channel.unary_unary( - '/google.cloud.language.v1.LanguageService/AnalyzeSentiment', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeSentimentRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeSentimentResponse.FromString, - ) - self.AnalyzeEntities = channel.unary_unary( - '/google.cloud.language.v1.LanguageService/AnalyzeEntities', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeEntitiesRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeEntitiesResponse.FromString, - ) - self.AnalyzeSyntax = channel.unary_unary( - '/google.cloud.language.v1.LanguageService/AnalyzeSyntax', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeSyntaxRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeSyntaxResponse.FromString, - ) - self.AnnotateText = channel.unary_unary( - '/google.cloud.language.v1.LanguageService/AnnotateText', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnnotateTextRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnnotateTextResponse.FromString, - ) - - -class LanguageServiceServicer(object): - """Provides text analysis operations such as sentiment analysis and entity - recognition. - """ - - def AnalyzeSentiment(self, request, context): - """Analyzes the sentiment of the provided text. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AnalyzeEntities(self, request, context): - """Finds named entities (currently proper names and common nouns) in the text - along with entity types, salience, mentions for each entity, and - other properties. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AnalyzeSyntax(self, request, context): - """Analyzes the syntax of the text and provides sentence boundaries and - tokenization along with part of speech tags, dependency trees, and other - properties. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AnnotateText(self, request, context): - """A convenience method that provides all the features that analyzeSentiment, - analyzeEntities, and analyzeSyntax provide in one call. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_LanguageServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'AnalyzeSentiment': grpc.unary_unary_rpc_method_handler( - servicer.AnalyzeSentiment, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeSentimentRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeSentimentResponse.SerializeToString, - ), - 'AnalyzeEntities': grpc.unary_unary_rpc_method_handler( - servicer.AnalyzeEntities, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeEntitiesRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeEntitiesResponse.SerializeToString, - ), - 'AnalyzeSyntax': grpc.unary_unary_rpc_method_handler( - servicer.AnalyzeSyntax, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeSyntaxRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnalyzeSyntaxResponse.SerializeToString, - ), - 'AnnotateText': grpc.unary_unary_rpc_method_handler( - servicer.AnnotateText, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnnotateTextRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1_dot_language__service__pb2.AnnotateTextResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'google.cloud.language.v1.LanguageService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) diff --git a/language/google/cloud/proto/language/v1beta2/__init__.py b/language/google/cloud/proto/language/v1beta2/__init__.py deleted file mode 100644 index 8b137891791f..000000000000 --- a/language/google/cloud/proto/language/v1beta2/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/language/google/cloud/proto/language/v1beta2/language_service_pb2_grpc.py b/language/google/cloud/proto/language/v1beta2/language_service_pb2_grpc.py deleted file mode 100644 index 264d6d43f468..000000000000 --- a/language/google/cloud/proto/language/v1beta2/language_service_pb2_grpc.py +++ /dev/null @@ -1,122 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - -import google.cloud.proto.language.v1beta2.language_service_pb2 as google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2 - - -class LanguageServiceStub(object): - """Provides text analysis operations such as sentiment analysis and entity - recognition. - """ - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.AnalyzeSentiment = channel.unary_unary( - '/google.cloud.language.v1beta2.LanguageService/AnalyzeSentiment', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeSentimentRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeSentimentResponse.FromString, - ) - self.AnalyzeEntities = channel.unary_unary( - '/google.cloud.language.v1beta2.LanguageService/AnalyzeEntities', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeEntitiesRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeEntitiesResponse.FromString, - ) - self.AnalyzeEntitySentiment = channel.unary_unary( - '/google.cloud.language.v1beta2.LanguageService/AnalyzeEntitySentiment', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeEntitySentimentRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeEntitySentimentResponse.FromString, - ) - self.AnalyzeSyntax = channel.unary_unary( - '/google.cloud.language.v1beta2.LanguageService/AnalyzeSyntax', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeSyntaxRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeSyntaxResponse.FromString, - ) - self.AnnotateText = channel.unary_unary( - '/google.cloud.language.v1beta2.LanguageService/AnnotateText', - request_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnnotateTextRequest.SerializeToString, - response_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnnotateTextResponse.FromString, - ) - - -class LanguageServiceServicer(object): - """Provides text analysis operations such as sentiment analysis and entity - recognition. - """ - - def AnalyzeSentiment(self, request, context): - """Analyzes the sentiment of the provided text. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AnalyzeEntities(self, request, context): - """Finds named entities (currently proper names and common nouns) in the text - along with entity types, salience, mentions for each entity, and - other properties. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AnalyzeEntitySentiment(self, request, context): - """Finds entities, similar to [AnalyzeEntities][google.cloud.language.v1beta2.LanguageService.AnalyzeEntities] in the text and analyzes - sentiment associated with each entity and its mentions. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AnalyzeSyntax(self, request, context): - """Analyzes the syntax of the text and provides sentence boundaries and - tokenization along with part of speech tags, dependency trees, and other - properties. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AnnotateText(self, request, context): - """A convenience method that provides all syntax, sentiment, and entity - features in one call. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_LanguageServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'AnalyzeSentiment': grpc.unary_unary_rpc_method_handler( - servicer.AnalyzeSentiment, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeSentimentRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeSentimentResponse.SerializeToString, - ), - 'AnalyzeEntities': grpc.unary_unary_rpc_method_handler( - servicer.AnalyzeEntities, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeEntitiesRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeEntitiesResponse.SerializeToString, - ), - 'AnalyzeEntitySentiment': grpc.unary_unary_rpc_method_handler( - servicer.AnalyzeEntitySentiment, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeEntitySentimentRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeEntitySentimentResponse.SerializeToString, - ), - 'AnalyzeSyntax': grpc.unary_unary_rpc_method_handler( - servicer.AnalyzeSyntax, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeSyntaxRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnalyzeSyntaxResponse.SerializeToString, - ), - 'AnnotateText': grpc.unary_unary_rpc_method_handler( - servicer.AnnotateText, - request_deserializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnnotateTextRequest.FromString, - response_serializer=google_dot_cloud_dot_proto_dot_language_dot_v1beta2_dot_language__service__pb2.AnnotateTextResponse.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'google.cloud.language.v1beta2.LanguageService', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) diff --git a/language/setup.py b/language/setup.py index b60edbf3f40f..139b9e936076 100644 --- a/language/setup.py +++ b/language/setup.py @@ -67,10 +67,6 @@ namespace_packages=[ 'google', 'google.cloud', - 'google.cloud.gapic', - 'google.cloud.gapic.language', - 'google.cloud.proto', - 'google.cloud.proto.language', ], packages=find_packages(exclude=('tests*',)), install_requires=REQUIREMENTS, diff --git a/language/tests/gapic/test_language_service_client_v1.py b/language/tests/unit/gapic/v1/test_language_service_client_v1.py similarity index 83% rename from language/tests/gapic/test_language_service_client_v1.py rename to language/tests/unit/gapic/v1/test_language_service_client_v1.py index 648ad98e50a3..6034f252cfb2 100644 --- a/language/tests/gapic/test_language_service_client_v1.py +++ b/language/tests/unit/gapic/v1/test_language_service_client_v1.py @@ -18,8 +18,8 @@ from google.gax import errors -from google.cloud.gapic.language.v1 import language_service_client -from google.cloud.proto.language.v1 import language_service_pb2 +from google.cloud import language_v1 +from google.cloud.language_v1.proto import language_service_pb2 class CustomException(Exception): @@ -33,15 +33,16 @@ def test_analyze_sentiment(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnalyzeSentimentResponse( - language=language) + **expected_response) grpc_stub.AnalyzeSentiment.return_value = expected_response response = client.analyze_sentiment(document) @@ -65,10 +66,10 @@ def test_analyze_sentiment_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock exception response grpc_stub.AnalyzeSentiment.side_effect = CustomException() @@ -81,15 +82,16 @@ def test_analyze_entities(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnalyzeEntitiesResponse( - language=language) + **expected_response) grpc_stub.AnalyzeEntities.return_value = expected_response response = client.analyze_entities(document) @@ -113,10 +115,10 @@ def test_analyze_entities_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock exception response grpc_stub.AnalyzeEntities.side_effect = CustomException() @@ -129,15 +131,16 @@ def test_analyze_syntax(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnalyzeSyntaxResponse( - language=language) + **expected_response) grpc_stub.AnalyzeSyntax.return_value = expected_response response = client.analyze_syntax(document) @@ -161,10 +164,10 @@ def test_analyze_syntax_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock exception response grpc_stub.AnalyzeSyntax.side_effect = CustomException() @@ -177,16 +180,17 @@ def test_annotate_text(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() - features = language_service_pb2.AnnotateTextRequest.Features() + document = {} + features = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnnotateTextResponse( - language=language) + **expected_response) grpc_stub.AnnotateText.return_value = expected_response response = client.annotate_text(document, features) @@ -210,11 +214,11 @@ def test_annotate_text_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() - features = language_service_pb2.AnnotateTextRequest.Features() + document = {} + features = {} # Mock exception response grpc_stub.AnnotateText.side_effect = CustomException() diff --git a/language/tests/gapic/test_language_service_client_v1beta2.py b/language/tests/unit/gapic/v1beta2/test_language_service_client_v1beta2.py similarity index 73% rename from language/tests/gapic/test_language_service_client_v1beta2.py rename to language/tests/unit/gapic/v1beta2/test_language_service_client_v1beta2.py index db8df687456c..b09bfa82a8a9 100644 --- a/language/tests/gapic/test_language_service_client_v1beta2.py +++ b/language/tests/unit/gapic/v1beta2/test_language_service_client_v1beta2.py @@ -18,8 +18,8 @@ from google.gax import errors -from google.cloud.gapic.language.v1beta2 import language_service_client -from google.cloud.proto.language.v1beta2 import language_service_pb2 +from google.cloud import language_v1beta2 +from google.cloud.language_v1beta2.proto import language_service_pb2 class CustomException(Exception): @@ -33,15 +33,16 @@ def test_analyze_sentiment(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnalyzeSentimentResponse( - language=language) + **expected_response) grpc_stub.AnalyzeSentiment.return_value = expected_response response = client.analyze_sentiment(document) @@ -65,10 +66,10 @@ def test_analyze_sentiment_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock exception response grpc_stub.AnalyzeSentiment.side_effect = CustomException() @@ -81,15 +82,16 @@ def test_analyze_entities(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnalyzeEntitiesResponse( - language=language) + **expected_response) grpc_stub.AnalyzeEntities.return_value = expected_response response = client.analyze_entities(document) @@ -113,10 +115,10 @@ def test_analyze_entities_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock exception response grpc_stub.AnalyzeEntities.side_effect = CustomException() @@ -129,15 +131,16 @@ def test_analyze_entity_sentiment(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnalyzeEntitySentimentResponse( - language=language) + **expected_response) grpc_stub.AnalyzeEntitySentiment.return_value = expected_response response = client.analyze_entity_sentiment(document) @@ -161,10 +164,10 @@ def test_analyze_entity_sentiment_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock exception response grpc_stub.AnalyzeEntitySentiment.side_effect = CustomException() @@ -178,15 +181,16 @@ def test_analyze_syntax(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnalyzeSyntaxResponse( - language=language) + **expected_response) grpc_stub.AnalyzeSyntax.return_value = expected_response response = client.analyze_syntax(document) @@ -210,32 +214,81 @@ def test_analyze_syntax_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() + document = {} # Mock exception response grpc_stub.AnalyzeSyntax.side_effect = CustomException() self.assertRaises(errors.GaxError, client.analyze_syntax, document) + @mock.patch('google.gax.config.create_stub', spec=True) + def test_classify_text(self, mock_create_stub): + # Mock gRPC layer + grpc_stub = mock.Mock() + mock_create_stub.return_value = grpc_stub + + client = language_v1beta2.LanguageServiceClient() + + # Mock request + document = {} + + # Mock response + expected_response = {} + expected_response = language_service_pb2.ClassifyTextResponse( + **expected_response) + grpc_stub.ClassifyText.return_value = expected_response + + response = client.classify_text(document) + self.assertEqual(expected_response, response) + + grpc_stub.ClassifyText.assert_called_once() + args, kwargs = grpc_stub.ClassifyText.call_args + self.assertEqual(len(args), 2) + self.assertEqual(len(kwargs), 1) + self.assertIn('metadata', kwargs) + actual_request = args[0] + + expected_request = language_service_pb2.ClassifyTextRequest( + document=document) + self.assertEqual(expected_request, actual_request) + + @mock.patch('google.gax.config.API_ERRORS', (CustomException, )) + @mock.patch('google.gax.config.create_stub', spec=True) + def test_classify_text_exception(self, mock_create_stub): + # Mock gRPC layer + grpc_stub = mock.Mock() + mock_create_stub.return_value = grpc_stub + + client = language_v1beta2.LanguageServiceClient() + + # Mock request + document = {} + + # Mock exception response + grpc_stub.ClassifyText.side_effect = CustomException() + + self.assertRaises(errors.GaxError, client.classify_text, document) + @mock.patch('google.gax.config.create_stub', spec=True) def test_annotate_text(self, mock_create_stub): # Mock gRPC layer grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() - features = language_service_pb2.AnnotateTextRequest.Features() + document = {} + features = {} # Mock response language = 'language-1613589672' + expected_response = {'language': language} expected_response = language_service_pb2.AnnotateTextResponse( - language=language) + **expected_response) grpc_stub.AnnotateText.return_value = expected_response response = client.annotate_text(document, features) @@ -259,11 +312,11 @@ def test_annotate_text_exception(self, mock_create_stub): grpc_stub = mock.Mock() mock_create_stub.return_value = grpc_stub - client = language_service_client.LanguageServiceClient() + client = language_v1beta2.LanguageServiceClient() # Mock request - document = language_service_pb2.Document() - features = language_service_pb2.AnnotateTextRequest.Features() + document = {} + features = {} # Mock exception response grpc_stub.AnnotateText.side_effect = CustomException() From 819d066452d67913a69da92436f4321755507115 Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Fri, 15 Sep 2017 09:15:08 -0700 Subject: [PATCH 2/4] Add AnalyzeEntitySentiment method to language v1. (#3968) --- .../gapic/language_service_client.py | 41 +++++++++++- .../gapic/language_service_client_config.py | 5 ++ .../language_v1/proto/language_service_pb2.py | 62 ++++++++++++++++++- .../proto/language_service_pb2_grpc.py | 2 +- .../v1/test_language_service_client_v1.py | 50 +++++++++++++++ 5 files changed, 156 insertions(+), 4 deletions(-) diff --git a/language/google/cloud/language_v1/gapic/language_service_client.py b/language/google/cloud/language_v1/gapic/language_service_client.py index f3bd9f6069cf..2adb2401f98f 100644 --- a/language/google/cloud/language_v1/gapic/language_service_client.py +++ b/language/google/cloud/language_v1/gapic/language_service_client.py @@ -90,8 +90,6 @@ def __init__(self, client library metrics. Ultimately serializes to a string (e.g. 'foo/1.2.3 bar/3.14.1'). This argument should be considered private. - - Returns: LanguageServiceClient """ # Unless the calling application specifically requested # OAuth scopes, request everything. @@ -139,6 +137,9 @@ def __init__(self, self._analyze_entities = api_callable.create_api_call( self.language_service_stub.AnalyzeEntities, settings=defaults['analyze_entities']) + self._analyze_entity_sentiment = api_callable.create_api_call( + self.language_service_stub.AnalyzeEntitySentiment, + settings=defaults['analyze_entity_sentiment']) self._analyze_syntax = api_callable.create_api_call( self.language_service_stub.AnalyzeSyntax, settings=defaults['analyze_syntax']) @@ -213,6 +214,42 @@ def analyze_entities(self, document, encoding_type=None, options=None): document=document, encoding_type=encoding_type) return self._analyze_entities(request, options) + def analyze_entity_sentiment(self, + document, + encoding_type=None, + options=None): + """ + Finds entities, similar to ``AnalyzeEntities`` in the text and analyzes + sentiment associated with each entity and its mentions. + + Example: + >>> from google.cloud import language_v1 + >>> + >>> client = language_v1.LanguageServiceClient() + >>> + >>> document = {} + >>> + >>> response = client.analyze_entity_sentiment(document) + + Args: + document (Union[dict, ~google.cloud.language_v1.types.Document]): Input document. + If a dict is provided, it must be of the same form as the protobuf + message :class:`~google.cloud.language_v1.types.Document` + encoding_type (~google.cloud.language_v1.types.EncodingType): The encoding type used by the API to calculate offsets. + options (~google.gax.CallOptions): Overrides the default + settings for this call, e.g, timeout, retries etc. + + Returns: + A :class:`~google.cloud.language_v1.types.AnalyzeEntitySentimentResponse` instance. + + Raises: + :exc:`google.gax.errors.GaxError` if the RPC is aborted. + :exc:`ValueError` if the parameters are invalid. + """ + request = language_service_pb2.AnalyzeEntitySentimentRequest( + document=document, encoding_type=encoding_type) + return self._analyze_entity_sentiment(request, options) + def analyze_syntax(self, document, encoding_type=None, options=None): """ Analyzes the syntax of the text and provides sentence boundaries and diff --git a/language/google/cloud/language_v1/gapic/language_service_client_config.py b/language/google/cloud/language_v1/gapic/language_service_client_config.py index 3c5406c33132..570056c9f581 100644 --- a/language/google/cloud/language_v1/gapic/language_service_client_config.py +++ b/language/google/cloud/language_v1/gapic/language_service_client_config.py @@ -27,6 +27,11 @@ "retry_codes_name": "idempotent", "retry_params_name": "default" }, + "AnalyzeEntitySentiment": { + "timeout_millis": 30000, + "retry_codes_name": "idempotent", + "retry_params_name": "default" + }, "AnalyzeSyntax": { "timeout_millis": 30000, "retry_codes_name": "idempotent", diff --git a/language/google/cloud/language_v1/proto/language_service_pb2.py b/language/google/cloud/language_v1/proto/language_service_pb2.py index 8c2525bc0439..1ccec7d474d7 100644 --- a/language/google/cloud/language_v1/proto/language_service_pb2.py +++ b/language/google/cloud/language_v1/proto/language_service_pb2.py @@ -24,7 +24,6 @@ serialized_pb=_b('\n5google/cloud/language_v1/proto/language_service.proto\x12\x18google.cloud.language.v1\x1a\x1cgoogle/api/annotations.proto\"\xc3\x01\n\x08\x44ocument\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.google.cloud.language.v1.Document.Type\x12\x11\n\x07\x63ontent\x18\x02 \x01(\tH\x00\x12\x19\n\x0fgcs_content_uri\x18\x03 \x01(\tH\x00\x12\x10\n\x08language\x18\x04 \x01(\t\"6\n\x04Type\x12\x14\n\x10TYPE_UNSPECIFIED\x10\x00\x12\x0e\n\nPLAIN_TEXT\x10\x01\x12\x08\n\x04HTML\x10\x02\x42\x08\n\x06source\"t\n\x08Sentence\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12\x36\n\tsentiment\x18\x02 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\"\xbe\x03\n\x06\x45ntity\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x33\n\x04type\x18\x02 \x01(\x0e\x32%.google.cloud.language.v1.Entity.Type\x12@\n\x08metadata\x18\x03 \x03(\x0b\x32..google.cloud.language.v1.Entity.MetadataEntry\x12\x10\n\x08salience\x18\x04 \x01(\x02\x12\x39\n\x08mentions\x18\x05 \x03(\x0b\x32\'.google.cloud.language.v1.EntityMention\x12\x36\n\tsentiment\x18\x06 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"y\n\x04Type\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06PERSON\x10\x01\x12\x0c\n\x08LOCATION\x10\x02\x12\x10\n\x0cORGANIZATION\x10\x03\x12\t\n\x05\x45VENT\x10\x04\x12\x0f\n\x0bWORK_OF_ART\x10\x05\x12\x11\n\rCONSUMER_GOOD\x10\x06\x12\t\n\x05OTHER\x10\x07\"\xcb\x01\n\x05Token\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12>\n\x0epart_of_speech\x18\x02 \x01(\x0b\x32&.google.cloud.language.v1.PartOfSpeech\x12\x41\n\x0f\x64\x65pendency_edge\x18\x03 \x01(\x0b\x32(.google.cloud.language.v1.DependencyEdge\x12\r\n\x05lemma\x18\x04 \x01(\t\"-\n\tSentiment\x12\x11\n\tmagnitude\x18\x02 \x01(\x02\x12\r\n\x05score\x18\x03 \x01(\x02\"\xa3\x10\n\x0cPartOfSpeech\x12\x37\n\x03tag\x18\x01 \x01(\x0e\x32*.google.cloud.language.v1.PartOfSpeech.Tag\x12=\n\x06\x61spect\x18\x02 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Aspect\x12\x39\n\x04\x63\x61se\x18\x03 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Case\x12\x39\n\x04\x66orm\x18\x04 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Form\x12=\n\x06gender\x18\x05 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Gender\x12\x39\n\x04mood\x18\x06 \x01(\x0e\x32+.google.cloud.language.v1.PartOfSpeech.Mood\x12=\n\x06number\x18\x07 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Number\x12=\n\x06person\x18\x08 \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Person\x12=\n\x06proper\x18\t \x01(\x0e\x32-.google.cloud.language.v1.PartOfSpeech.Proper\x12G\n\x0breciprocity\x18\n \x01(\x0e\x32\x32.google.cloud.language.v1.PartOfSpeech.Reciprocity\x12;\n\x05tense\x18\x0b \x01(\x0e\x32,.google.cloud.language.v1.PartOfSpeech.Tense\x12;\n\x05voice\x18\x0c \x01(\x0e\x32,.google.cloud.language.v1.PartOfSpeech.Voice\"\x8d\x01\n\x03Tag\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x41\x44J\x10\x01\x12\x07\n\x03\x41\x44P\x10\x02\x12\x07\n\x03\x41\x44V\x10\x03\x12\x08\n\x04\x43ONJ\x10\x04\x12\x07\n\x03\x44\x45T\x10\x05\x12\x08\n\x04NOUN\x10\x06\x12\x07\n\x03NUM\x10\x07\x12\x08\n\x04PRON\x10\x08\x12\x07\n\x03PRT\x10\t\x12\t\n\x05PUNCT\x10\n\x12\x08\n\x04VERB\x10\x0b\x12\x05\n\x01X\x10\x0c\x12\t\n\x05\x41\x46\x46IX\x10\r\"O\n\x06\x41spect\x12\x12\n\x0e\x41SPECT_UNKNOWN\x10\x00\x12\x0e\n\nPERFECTIVE\x10\x01\x12\x10\n\x0cIMPERFECTIVE\x10\x02\x12\x0f\n\x0bPROGRESSIVE\x10\x03\"\xf8\x01\n\x04\x43\x61se\x12\x10\n\x0c\x43\x41SE_UNKNOWN\x10\x00\x12\x0e\n\nACCUSATIVE\x10\x01\x12\r\n\tADVERBIAL\x10\x02\x12\x11\n\rCOMPLEMENTIVE\x10\x03\x12\n\n\x06\x44\x41TIVE\x10\x04\x12\x0c\n\x08GENITIVE\x10\x05\x12\x10\n\x0cINSTRUMENTAL\x10\x06\x12\x0c\n\x08LOCATIVE\x10\x07\x12\x0e\n\nNOMINATIVE\x10\x08\x12\x0b\n\x07OBLIQUE\x10\t\x12\r\n\tPARTITIVE\x10\n\x12\x11\n\rPREPOSITIONAL\x10\x0b\x12\x12\n\x0eREFLEXIVE_CASE\x10\x0c\x12\x11\n\rRELATIVE_CASE\x10\r\x12\x0c\n\x08VOCATIVE\x10\x0e\"\xaf\x01\n\x04\x46orm\x12\x10\n\x0c\x46ORM_UNKNOWN\x10\x00\x12\x0c\n\x08\x41\x44NOMIAL\x10\x01\x12\r\n\tAUXILIARY\x10\x02\x12\x12\n\x0e\x43OMPLEMENTIZER\x10\x03\x12\x10\n\x0c\x46INAL_ENDING\x10\x04\x12\n\n\x06GERUND\x10\x05\x12\n\n\x06REALIS\x10\x06\x12\x0c\n\x08IRREALIS\x10\x07\x12\t\n\x05SHORT\x10\x08\x12\x08\n\x04LONG\x10\t\x12\t\n\x05ORDER\x10\n\x12\x0c\n\x08SPECIFIC\x10\x0b\"E\n\x06Gender\x12\x12\n\x0eGENDER_UNKNOWN\x10\x00\x12\x0c\n\x08\x46\x45MININE\x10\x01\x12\r\n\tMASCULINE\x10\x02\x12\n\n\x06NEUTER\x10\x03\"\x7f\n\x04Mood\x12\x10\n\x0cMOOD_UNKNOWN\x10\x00\x12\x14\n\x10\x43ONDITIONAL_MOOD\x10\x01\x12\x0e\n\nIMPERATIVE\x10\x02\x12\x0e\n\nINDICATIVE\x10\x03\x12\x11\n\rINTERROGATIVE\x10\x04\x12\x0b\n\x07JUSSIVE\x10\x05\x12\x0f\n\x0bSUBJUNCTIVE\x10\x06\"@\n\x06Number\x12\x12\n\x0eNUMBER_UNKNOWN\x10\x00\x12\x0c\n\x08SINGULAR\x10\x01\x12\n\n\x06PLURAL\x10\x02\x12\x08\n\x04\x44UAL\x10\x03\"T\n\x06Person\x12\x12\n\x0ePERSON_UNKNOWN\x10\x00\x12\t\n\x05\x46IRST\x10\x01\x12\n\n\x06SECOND\x10\x02\x12\t\n\x05THIRD\x10\x03\x12\x14\n\x10REFLEXIVE_PERSON\x10\x04\"8\n\x06Proper\x12\x12\n\x0ePROPER_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\x0e\n\nNOT_PROPER\x10\x02\"J\n\x0bReciprocity\x12\x17\n\x13RECIPROCITY_UNKNOWN\x10\x00\x12\x0e\n\nRECIPROCAL\x10\x01\x12\x12\n\x0eNON_RECIPROCAL\x10\x02\"s\n\x05Tense\x12\x11\n\rTENSE_UNKNOWN\x10\x00\x12\x15\n\x11\x43ONDITIONAL_TENSE\x10\x01\x12\n\n\x06\x46UTURE\x10\x02\x12\x08\n\x04PAST\x10\x03\x12\x0b\n\x07PRESENT\x10\x04\x12\r\n\tIMPERFECT\x10\x05\x12\x0e\n\nPLUPERFECT\x10\x06\"B\n\x05Voice\x12\x11\n\rVOICE_UNKNOWN\x10\x00\x12\n\n\x06\x41\x43TIVE\x10\x01\x12\r\n\tCAUSATIVE\x10\x02\x12\x0b\n\x07PASSIVE\x10\x03\"\x95\x08\n\x0e\x44\x65pendencyEdge\x12\x18\n\x10head_token_index\x18\x01 \x01(\x05\x12=\n\x05label\x18\x02 \x01(\x0e\x32..google.cloud.language.v1.DependencyEdge.Label\"\xa9\x07\n\x05Label\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06\x41\x42\x42REV\x10\x01\x12\t\n\x05\x41\x43OMP\x10\x02\x12\t\n\x05\x41\x44VCL\x10\x03\x12\n\n\x06\x41\x44VMOD\x10\x04\x12\x08\n\x04\x41MOD\x10\x05\x12\t\n\x05\x41PPOS\x10\x06\x12\x08\n\x04\x41TTR\x10\x07\x12\x07\n\x03\x41UX\x10\x08\x12\x0b\n\x07\x41UXPASS\x10\t\x12\x06\n\x02\x43\x43\x10\n\x12\t\n\x05\x43\x43OMP\x10\x0b\x12\x08\n\x04\x43ONJ\x10\x0c\x12\t\n\x05\x43SUBJ\x10\r\x12\r\n\tCSUBJPASS\x10\x0e\x12\x07\n\x03\x44\x45P\x10\x0f\x12\x07\n\x03\x44\x45T\x10\x10\x12\r\n\tDISCOURSE\x10\x11\x12\x08\n\x04\x44OBJ\x10\x12\x12\x08\n\x04\x45XPL\x10\x13\x12\x0c\n\x08GOESWITH\x10\x14\x12\x08\n\x04IOBJ\x10\x15\x12\x08\n\x04MARK\x10\x16\x12\x07\n\x03MWE\x10\x17\x12\x07\n\x03MWV\x10\x18\x12\x07\n\x03NEG\x10\x19\x12\x06\n\x02NN\x10\x1a\x12\x0c\n\x08NPADVMOD\x10\x1b\x12\t\n\x05NSUBJ\x10\x1c\x12\r\n\tNSUBJPASS\x10\x1d\x12\x07\n\x03NUM\x10\x1e\x12\n\n\x06NUMBER\x10\x1f\x12\x05\n\x01P\x10 \x12\r\n\tPARATAXIS\x10!\x12\x0b\n\x07PARTMOD\x10\"\x12\t\n\x05PCOMP\x10#\x12\x08\n\x04POBJ\x10$\x12\x08\n\x04POSS\x10%\x12\x0b\n\x07POSTNEG\x10&\x12\x0b\n\x07PRECOMP\x10\'\x12\x0b\n\x07PRECONJ\x10(\x12\n\n\x06PREDET\x10)\x12\x08\n\x04PREF\x10*\x12\x08\n\x04PREP\x10+\x12\t\n\x05PRONL\x10,\x12\x07\n\x03PRT\x10-\x12\x06\n\x02PS\x10.\x12\x0c\n\x08QUANTMOD\x10/\x12\t\n\x05RCMOD\x10\x30\x12\x0c\n\x08RCMODREL\x10\x31\x12\t\n\x05RDROP\x10\x32\x12\x07\n\x03REF\x10\x33\x12\x0b\n\x07REMNANT\x10\x34\x12\x0e\n\nREPARANDUM\x10\x35\x12\x08\n\x04ROOT\x10\x36\x12\x08\n\x04SNUM\x10\x37\x12\x08\n\x04SUFF\x10\x38\x12\x08\n\x04TMOD\x10\x39\x12\t\n\x05TOPIC\x10:\x12\x08\n\x04VMOD\x10;\x12\x0c\n\x08VOCATIVE\x10<\x12\t\n\x05XCOMP\x10=\x12\n\n\x06SUFFIX\x10>\x12\t\n\x05TITLE\x10?\x12\x0c\n\x08\x41\x44VPHMOD\x10@\x12\x0b\n\x07\x41UXCAUS\x10\x41\x12\t\n\x05\x41UXVV\x10\x42\x12\t\n\x05\x44TMOD\x10\x43\x12\x0b\n\x07\x46OREIGN\x10\x44\x12\x06\n\x02KW\x10\x45\x12\x08\n\x04LIST\x10\x46\x12\x08\n\x04NOMC\x10G\x12\x0c\n\x08NOMCSUBJ\x10H\x12\x10\n\x0cNOMCSUBJPASS\x10I\x12\x08\n\x04NUMC\x10J\x12\x07\n\x03\x43OP\x10K\x12\x0e\n\nDISLOCATED\x10L\x12\x07\n\x03\x41SP\x10M\x12\x08\n\x04GMOD\x10N\x12\x08\n\x04GOBJ\x10O\x12\n\n\x06INFMOD\x10P\x12\x07\n\x03MES\x10Q\x12\t\n\x05NCOMP\x10R\"\xe7\x01\n\rEntityMention\x12\x30\n\x04text\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.TextSpan\x12:\n\x04type\x18\x02 \x01(\x0e\x32,.google.cloud.language.v1.EntityMention.Type\x12\x36\n\tsentiment\x18\x03 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\"0\n\x04Type\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\n\n\x06PROPER\x10\x01\x12\n\n\x06\x43OMMON\x10\x02\"1\n\x08TextSpan\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x14\n\x0c\x62\x65gin_offset\x18\x02 \x01(\x05\"\x8e\x01\n\x17\x41nalyzeSentimentRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"\xa4\x01\n\x18\x41nalyzeSentimentResponse\x12?\n\x12\x64ocument_sentiment\x18\x01 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\x12\x10\n\x08language\x18\x02 \x01(\t\x12\x35\n\tsentences\x18\x03 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\"\x94\x01\n\x1d\x41nalyzeEntitySentimentRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"f\n\x1e\x41nalyzeEntitySentimentResponse\x12\x32\n\x08\x65ntities\x18\x01 \x03(\x0b\x32 .google.cloud.language.v1.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x8d\x01\n\x16\x41nalyzeEntitiesRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"_\n\x17\x41nalyzeEntitiesResponse\x12\x32\n\x08\x65ntities\x18\x01 \x03(\x0b\x32 .google.cloud.language.v1.Entity\x12\x10\n\x08language\x18\x02 \x01(\t\"\x8b\x01\n\x14\x41nalyzeSyntaxRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12=\n\rencoding_type\x18\x02 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\"\x91\x01\n\x15\x41nalyzeSyntaxResponse\x12\x35\n\tsentences\x18\x01 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\x12/\n\x06tokens\x18\x02 \x03(\x0b\x32\x1f.google.cloud.language.v1.Token\x12\x10\n\x08language\x18\x03 \x01(\t\"\xd9\x02\n\x13\x41nnotateTextRequest\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".google.cloud.language.v1.Document\x12H\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0b\x32\x36.google.cloud.language.v1.AnnotateTextRequest.Features\x12=\n\rencoding_type\x18\x03 \x01(\x0e\x32&.google.cloud.language.v1.EncodingType\x1a\x82\x01\n\x08\x46\x65\x61tures\x12\x16\n\x0e\x65xtract_syntax\x18\x01 \x01(\x08\x12\x18\n\x10\x65xtract_entities\x18\x02 \x01(\x08\x12\"\n\x1a\x65xtract_document_sentiment\x18\x03 \x01(\x08\x12 \n\x18\x65xtract_entity_sentiment\x18\x04 \x01(\x08\"\x85\x02\n\x14\x41nnotateTextResponse\x12\x35\n\tsentences\x18\x01 \x03(\x0b\x32\".google.cloud.language.v1.Sentence\x12/\n\x06tokens\x18\x02 \x03(\x0b\x32\x1f.google.cloud.language.v1.Token\x12\x32\n\x08\x65ntities\x18\x03 \x03(\x0b\x32 .google.cloud.language.v1.Entity\x12?\n\x12\x64ocument_sentiment\x18\x04 \x01(\x0b\x32#.google.cloud.language.v1.Sentiment\x12\x10\n\x08language\x18\x05 \x01(\t*8\n\x0c\x45ncodingType\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04UTF8\x10\x01\x12\t\n\x05UTF16\x10\x02\x12\t\n\x05UTF32\x10\x03\x32\xcc\x06\n\x0fLanguageService\x12\xa4\x01\n\x10\x41nalyzeSentiment\x12\x31.google.cloud.language.v1.AnalyzeSentimentRequest\x1a\x32.google.cloud.language.v1.AnalyzeSentimentResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/documents:analyzeSentiment:\x01*\x12\xa0\x01\n\x0f\x41nalyzeEntities\x12\x30.google.cloud.language.v1.AnalyzeEntitiesRequest\x1a\x31.google.cloud.language.v1.AnalyzeEntitiesResponse\"(\x82\xd3\xe4\x93\x02\"\"\x1d/v1/documents:analyzeEntities:\x01*\x12\xbc\x01\n\x16\x41nalyzeEntitySentiment\x12\x37.google.cloud.language.v1.AnalyzeEntitySentimentRequest\x1a\x38.google.cloud.language.v1.AnalyzeEntitySentimentResponse\"/\x82\xd3\xe4\x93\x02)\"$/v1/documents:analyzeEntitySentiment:\x01*\x12\x98\x01\n\rAnalyzeSyntax\x12..google.cloud.language.v1.AnalyzeSyntaxRequest\x1a/.google.cloud.language.v1.AnalyzeSyntaxResponse\"&\x82\xd3\xe4\x93\x02 \"\x1b/v1/documents:analyzeSyntax:\x01*\x12\x94\x01\n\x0c\x41nnotateText\x12-.google.cloud.language.v1.AnnotateTextRequest\x1a..google.cloud.language.v1.AnnotateTextResponse\"%\x82\xd3\xe4\x93\x02\x1f\"\x1a/v1/documents:annotateText:\x01*Bx\n\x1c\x63om.google.cloud.language.v1B\x14LanguageServiceProtoP\x01Z@google.golang.org/genproto/googleapis/cloud/language/v1;languageb\x06proto3') , dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,]) -_sym_db.RegisterFileDescriptor(DESCRIPTOR) _ENCODINGTYPE = _descriptor.EnumDescriptor( name='EncodingType', @@ -2098,6 +2097,7 @@ DESCRIPTOR.message_types_by_name['AnnotateTextRequest'] = _ANNOTATETEXTREQUEST DESCRIPTOR.message_types_by_name['AnnotateTextResponse'] = _ANNOTATETEXTRESPONSE DESCRIPTOR.enum_types_by_name['EncodingType'] = _ENCODINGTYPE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) Document = _reflection.GeneratedProtocolMessageType('Document', (_message.Message,), dict( DESCRIPTOR = _DOCUMENT, @@ -2591,6 +2591,66 @@ DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\034com.google.cloud.language.v1B\024LanguageServiceProtoP\001Z@google.golang.org/genproto/googleapis/cloud/language/v1;language')) _ENTITY_METADATAENTRY.has_options = True _ENTITY_METADATAENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) + +_LANGUAGESERVICE = _descriptor.ServiceDescriptor( + name='LanguageService', + full_name='google.cloud.language.v1.LanguageService', + file=DESCRIPTOR, + index=0, + options=None, + serialized_start=6319, + serialized_end=7163, + methods=[ + _descriptor.MethodDescriptor( + name='AnalyzeSentiment', + full_name='google.cloud.language.v1.LanguageService.AnalyzeSentiment', + index=0, + containing_service=None, + input_type=_ANALYZESENTIMENTREQUEST, + output_type=_ANALYZESENTIMENTRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002#\"\036/v1/documents:analyzeSentiment:\001*')), + ), + _descriptor.MethodDescriptor( + name='AnalyzeEntities', + full_name='google.cloud.language.v1.LanguageService.AnalyzeEntities', + index=1, + containing_service=None, + input_type=_ANALYZEENTITIESREQUEST, + output_type=_ANALYZEENTITIESRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002\"\"\035/v1/documents:analyzeEntities:\001*')), + ), + _descriptor.MethodDescriptor( + name='AnalyzeEntitySentiment', + full_name='google.cloud.language.v1.LanguageService.AnalyzeEntitySentiment', + index=2, + containing_service=None, + input_type=_ANALYZEENTITYSENTIMENTREQUEST, + output_type=_ANALYZEENTITYSENTIMENTRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002)\"$/v1/documents:analyzeEntitySentiment:\001*')), + ), + _descriptor.MethodDescriptor( + name='AnalyzeSyntax', + full_name='google.cloud.language.v1.LanguageService.AnalyzeSyntax', + index=3, + containing_service=None, + input_type=_ANALYZESYNTAXREQUEST, + output_type=_ANALYZESYNTAXRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002 \"\033/v1/documents:analyzeSyntax:\001*')), + ), + _descriptor.MethodDescriptor( + name='AnnotateText', + full_name='google.cloud.language.v1.LanguageService.AnnotateText', + index=4, + containing_service=None, + input_type=_ANNOTATETEXTREQUEST, + output_type=_ANNOTATETEXTRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002\037\"\032/v1/documents:annotateText:\001*')), + ), +]) +_sym_db.RegisterServiceDescriptor(_LANGUAGESERVICE) + +DESCRIPTOR.services_by_name['LanguageService'] = _LANGUAGESERVICE + try: # THESE ELEMENTS WILL BE DEPRECATED. # Please use the generated *_pb2_grpc.py files instead. diff --git a/language/google/cloud/language_v1/proto/language_service_pb2_grpc.py b/language/google/cloud/language_v1/proto/language_service_pb2_grpc.py index 937c7b54c7db..193f396f15cc 100644 --- a/language/google/cloud/language_v1/proto/language_service_pb2_grpc.py +++ b/language/google/cloud/language_v1/proto/language_service_pb2_grpc.py @@ -1,7 +1,7 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpc -import google.cloud.language_v1.proto.language_service_pb2 as google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2 +from google.cloud.language_v1.proto import language_service_pb2 as google_dot_cloud_dot_language__v1_dot_proto_dot_language__service__pb2 class LanguageServiceStub(object): diff --git a/language/tests/unit/gapic/v1/test_language_service_client_v1.py b/language/tests/unit/gapic/v1/test_language_service_client_v1.py index 6034f252cfb2..ebf7b4526ede 100644 --- a/language/tests/unit/gapic/v1/test_language_service_client_v1.py +++ b/language/tests/unit/gapic/v1/test_language_service_client_v1.py @@ -125,6 +125,56 @@ def test_analyze_entities_exception(self, mock_create_stub): self.assertRaises(errors.GaxError, client.analyze_entities, document) + @mock.patch('google.gax.config.create_stub', spec=True) + def test_analyze_entity_sentiment(self, mock_create_stub): + # Mock gRPC layer + grpc_stub = mock.Mock() + mock_create_stub.return_value = grpc_stub + + client = language_v1.LanguageServiceClient() + + # Mock request + document = {} + + # Mock response + language = 'language-1613589672' + expected_response = {'language': language} + expected_response = language_service_pb2.AnalyzeEntitySentimentResponse( + **expected_response) + grpc_stub.AnalyzeEntitySentiment.return_value = expected_response + + response = client.analyze_entity_sentiment(document) + self.assertEqual(expected_response, response) + + grpc_stub.AnalyzeEntitySentiment.assert_called_once() + args, kwargs = grpc_stub.AnalyzeEntitySentiment.call_args + self.assertEqual(len(args), 2) + self.assertEqual(len(kwargs), 1) + self.assertIn('metadata', kwargs) + actual_request = args[0] + + expected_request = language_service_pb2.AnalyzeEntitySentimentRequest( + document=document) + self.assertEqual(expected_request, actual_request) + + @mock.patch('google.gax.config.API_ERRORS', (CustomException, )) + @mock.patch('google.gax.config.create_stub', spec=True) + def test_analyze_entity_sentiment_exception(self, mock_create_stub): + # Mock gRPC layer + grpc_stub = mock.Mock() + mock_create_stub.return_value = grpc_stub + + client = language_v1.LanguageServiceClient() + + # Mock request + document = {} + + # Mock exception response + grpc_stub.AnalyzeEntitySentiment.side_effect = CustomException() + + self.assertRaises(errors.GaxError, client.analyze_entity_sentiment, + document) + @mock.patch('google.gax.config.create_stub', spec=True) def test_analyze_syntax(self, mock_create_stub): # Mock gRPC layer From 432a7ce1329d1e78712ab1fad0f2028b576f5ab2 Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Fri, 15 Sep 2017 09:49:44 -0700 Subject: [PATCH 3/4] Remove the natural language manual layer. (#3970) --- language/.coveragerc | 3 + language/google/cloud/language.py | 24 + language/google/cloud/language/__init__.py | 60 -- language/google/cloud/language/_http.py | 54 -- .../google/cloud/language/api_responses.py | 129 ---- language/google/cloud/language/client.py | 144 ---- language/google/cloud/language/document.py | 324 --------- language/google/cloud/language/entity.py | 190 ----- language/google/cloud/language/sentence.py | 68 -- language/google/cloud/language/sentiment.py | 57 -- language/google/cloud/language/syntax.py | 253 ------- language/nox.py | 11 +- language/tests/system.py | 152 ---- .../v1/test_system_language_service_v1.py | 30 + language/tests/unit/test__http.py | 73 -- language/tests/unit/test_api_responses.py | 208 ------ language/tests/unit/test_client.py | 146 ---- language/tests/unit/test_document.py | 682 ------------------ language/tests/unit/test_entity.py | 180 ----- language/tests/unit/test_sentence.py | 74 -- language/tests/unit/test_sentiment.py | 46 -- language/tests/unit/test_syntax.py | 226 ------ 22 files changed, 64 insertions(+), 3070 deletions(-) create mode 100644 language/google/cloud/language.py delete mode 100644 language/google/cloud/language/__init__.py delete mode 100644 language/google/cloud/language/_http.py delete mode 100644 language/google/cloud/language/api_responses.py delete mode 100644 language/google/cloud/language/client.py delete mode 100644 language/google/cloud/language/document.py delete mode 100644 language/google/cloud/language/entity.py delete mode 100644 language/google/cloud/language/sentence.py delete mode 100644 language/google/cloud/language/sentiment.py delete mode 100644 language/google/cloud/language/syntax.py delete mode 100644 language/tests/system.py create mode 100644 language/tests/system/gapic/v1/test_system_language_service_v1.py delete mode 100644 language/tests/unit/test__http.py delete mode 100644 language/tests/unit/test_api_responses.py delete mode 100644 language/tests/unit/test_client.py delete mode 100644 language/tests/unit/test_document.py delete mode 100644 language/tests/unit/test_entity.py delete mode 100644 language/tests/unit/test_sentence.py delete mode 100644 language/tests/unit/test_sentiment.py delete mode 100644 language/tests/unit/test_syntax.py diff --git a/language/.coveragerc b/language/.coveragerc index a54b99aa14b7..2806fdeccd1e 100644 --- a/language/.coveragerc +++ b/language/.coveragerc @@ -1,5 +1,8 @@ [run] branch = True +omit = + */gapic/* + */proto/* [report] fail_under = 100 diff --git a/language/google/cloud/language.py b/language/google/cloud/language.py new file mode 100644 index 000000000000..a5508b7bd7a9 --- /dev/null +++ b/language/google/cloud/language.py @@ -0,0 +1,24 @@ +# Copyright 2017, Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +from google.cloud.language_v1 import LanguageServiceClient +from google.cloud.language_v1 import enums +from google.cloud.language_v1 import types + +__all__ = ( + 'enums', + 'types', + 'LanguageServiceClient', ) diff --git a/language/google/cloud/language/__init__.py b/language/google/cloud/language/__init__.py deleted file mode 100644 index 8bba28ead739..000000000000 --- a/language/google/cloud/language/__init__.py +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# ----------------------------------------------------------------------------- -# TRANSITION CODE -# ----------------------------------------------------------------------------- -# The old Language manual layer is now deprecated, but to allow -# users the time to move from the manual layer to the mostly auto-generated -# layer, they are both living side by side for a few months. -# -# Instantiating the old manual layer (`google.cloud.language.Client`) will -# issue a DeprecationWarning. -# -# When it comes time to remove the old layer, everything in this directory -# should go away EXCEPT __init__.py (which can be renamed to language.py and -# put one directory above). -# -# Additionally, the import and export of `Client`, `Document`, and `Encoding` -# should be removed from this file (along with this note), and the rest should -# be left intact. -# ----------------------------------------------------------------------------- - -"""Client library for Google Cloud Natural Language API.""" - -from __future__ import absolute_import - -from pkg_resources import get_distribution -__version__ = get_distribution('google-cloud-language').version - -from google.cloud.language_v1 import * # noqa - -from google.cloud.language.client import Client -from google.cloud.language.document import Document -from google.cloud.language.document import Encoding - -__all__ = ( - # Common - '__version__', - - # Manual Layer - 'Client', - 'Document', - 'Encoding', - - # Auto-gen - 'enums', - 'LanguageServiceClient', - 'types', -) diff --git a/language/google/cloud/language/_http.py b/language/google/cloud/language/_http.py deleted file mode 100644 index 1d466a47edf9..000000000000 --- a/language/google/cloud/language/_http.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Basic connection for Google Cloud Natural Language API.""" - -from google.cloud import _http - -from google.cloud.language import __version__ - - -_CLIENT_INFO = _http.CLIENT_INFO_TEMPLATE.format(__version__) - - -class Connection(_http.JSONConnection): - """A connection to Google Cloud Natural Language JSON REST API. - - :type client: :class:`~google.cloud.language.client.Client` - :param client: The client that owns the current connection. - """ - - API_BASE_URL = 'https://language.googleapis.com' - """The base of the API call URL.""" - - API_VERSION = 'v1' - """The version of the API, used in building the API call's URL.""" - - API_URL_TEMPLATE = '{api_base_url}/{api_version}/documents:{path}' - """A template for the URL of a particular API call.""" - - _EXTRA_HEADERS = { - _http.CLIENT_INFO_HEADER: _CLIENT_INFO, - } - - -class V1Beta2Connection(Connection): - """A connection to Google Cloud Natural Language JSON 1.1 REST API. - - :type client: :class:`~google.cloud.language.client.Client` - :param client: The client that owns the current connection. - """ - - API_VERSION = 'v1beta2' - """The version of the API, used in building the API call's URL.""" diff --git a/language/google/cloud/language/api_responses.py b/language/google/cloud/language/api_responses.py deleted file mode 100644 index 8ecdc6aa9805..000000000000 --- a/language/google/cloud/language/api_responses.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright 2017 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Response types from the Natural Language API.""" - -from google.cloud.language.entity import Entity -from google.cloud.language.sentence import Sentence -from google.cloud.language.sentiment import Sentiment -from google.cloud.language.syntax import Token - - -class EntityResponse(object): - """Object representation of entity responses. - - A representation of a response sent back from the - ``analyzeEntites`` request to the Google Natural language API. - - :type entities: list - :param entities: A list of :class:`~.language.entity.Entity` objects. - - :type language: str - :param language: The language used for analysis. - """ - def __init__(self, entities, language): - self.entities = entities - self.language = language - - @classmethod - def from_api_repr(cls, payload): - """Return an entity response from a JSON representation. - - :type payload: dict - :param payload: A dictionary representing the response. - - :rtype: :class:`~.language.entity.Entity` - :returns: An ``Entity`` object. - """ - return cls( - entities=[Entity.from_api_repr(i) for i in payload['entities']], - language=payload['language'], - ) - - -class SentimentResponse(object): - """Object representation of sentiment responses. - - A representation of a response to an ``analyzeSentiment`` request - to the Google Natural Language API. - - :type sentiment: :class:`~.language.sentiment.Sentiment` - :param sentiment: A Sentiment object. - - :type language: str - :param language: The language used for analyzing sentiment. - - :type sentences: list - :param sentences: A list of :class:`~.language.syntax.Sentence` objects. - """ - def __init__(self, sentiment, language, sentences): - self.sentiment = sentiment - self.language = language - self.sentences = sentences - - @classmethod - def from_api_repr(cls, payload): - """Return an sentiment response from a JSON representation. - - :type payload: dict - :param payload: A dictionary representing the response. - - :rtype: `~.language.sentiment.Sentiment` - :returns: A ``Sentiment`` object. - """ - return cls( - language=payload.get('language'), - sentences=[Sentence.from_api_repr(sentence) for sentence - in payload.get('sentences', ())], - sentiment=Sentiment.from_api_repr(payload['documentSentiment']), - ) - - -class SyntaxResponse(object): - """Object representation of syntax responses. - - A representation of a response to an ``analyzeSyntax`` request - to the Google Natural Language API. - - :type tokens: list - :param tokens: A list of :class:`~.language.syntax.Token` objects. - - :type language: str - :param language: The language used for analyzing sentiment. - - :type sentences: list - :param sentences: A list of :class:`~.language.syntax.Sentence` objects. - """ - def __init__(self, tokens, language, sentences): - self.tokens = tokens - self.language = language - self.sentences = sentences - - @classmethod - def from_api_repr(cls, payload): - """Return an syntax response from a JSON representation. - - :type payload: dict - :param payload: A dictionary representing the response. - - :rtype: `~.language.syntax.Syntax` - :returns: A ``Syntax`` object. - """ - return cls( - language=payload.get('language'), - sentences=[Sentence.from_api_repr(sentence) for sentence in - payload.get('sentences', ())], - tokens=[Token.from_api_repr(token) for token in - payload.get('tokens', ())] - ) diff --git a/language/google/cloud/language/client.py b/language/google/cloud/language/client.py deleted file mode 100644 index 2a4bf47879ef..000000000000 --- a/language/google/cloud/language/client.py +++ /dev/null @@ -1,144 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Basic client for Google Cloud Natural Language API.""" - -import functools -import warnings - -from google.cloud import client as client_module - -from google.cloud.language._http import Connection -from google.cloud.language._http import V1Beta2Connection -from google.cloud.language.document import Document - - -class Client(client_module.Client): - """Client to bundle configuration needed for API requests. - - :type credentials: :class:`~google.auth.credentials.Credentials` - :param credentials: (Optional) The OAuth2 Credentials to use for this - client. If not passed (and if no ``_http`` object is - passed), falls back to the default inferred from the - environment. - - :type _http: :class:`~requests.Session` - :param _http: (Optional) HTTP object to make requests. Can be any object - that defines ``request()`` with the same interface as - :meth:`requests.Session.request`. If not passed, an - ``_http`` object is created that is bound to the - ``credentials`` for the current object. - This parameter should be considered private, and could - change in the future. - """ - - SCOPE = ('https://www.googleapis.com/auth/cloud-platform',) - """The scopes required for authenticating as an API consumer.""" - - _CONNECTION_CLASSES = { - 'v1': Connection, - 'v1beta2': V1Beta2Connection, - } - - def __init__(self, credentials=None, api_version='v1', _http=None): - - # Add a deprecation warning for this class. - warnings.warn( - 'This client class and objects that derive from it have been ' - 'deprecated. Use `google.cloud.language.LanguageServiceClient` ' - '(provided by this package) instead. This client will be removed ' - 'in a future release.', - DeprecationWarning, - ) - - super(Client, self).__init__( - credentials=credentials, _http=_http) - ConnectionClass = self._CONNECTION_CLASSES[api_version] - self._connection = ConnectionClass(self) - - def document_from_text(self, content, **kwargs): - """Create a plain text document bound to this client. - - :type content: str - :param content: The document plain text content. - - :type kwargs: dict - :param kwargs: Remaining keyword arguments to be passed along to the - :class:`~google.cloud.language.document.Document` - constructor. - - :rtype: :class:`~google.cloud.language.document.Document` - :returns: A plain-text document bound to this client. - :raises: :class:`~exceptions.TypeError` if ``doc_type`` is passed as a - keyword argument. - """ - if 'doc_type' in kwargs: - raise TypeError('Cannot pass doc_type') - return Document(self, content=content, - doc_type=Document.PLAIN_TEXT, **kwargs) - - def document_from_html(self, content, **kwargs): - """Create an HTML document bound to this client. - - :type content: str - :param content: The document HTML text content. - - :type kwargs: dict - :param kwargs: Remaining keyword arguments to be passed along to the - :class:`~google.cloud.language.document.Document` - constructor. - - :rtype: :class:`~google.cloud.language.document.Document` - :returns: An HTML document bound to this client. - :raises: :class:`~exceptions.TypeError` if ``doc_type`` is passed as a - keyword argument. - """ - if 'doc_type' in kwargs: - raise TypeError('Cannot pass doc_type') - return Document(self, content=content, - doc_type=Document.HTML, **kwargs) - - def document_from_gcs_url(self, gcs_url, - doc_type=Document.PLAIN_TEXT, **kwargs): - """Create a Cloud Storage document bound to this client. - - :type gcs_url: str - :param gcs_url: The URL of the Google Cloud Storage object - holding the content. Of the form - ``gs://{bucket}/{blob-name}``. - - :type doc_type: str - :param doc_type: (Optional) The type of text in the document. - Defaults to plain text. Can also be specified - as HTML via :attr:`~.Document.HTML`. - - :type kwargs: dict - :param kwargs: Remaining keyword arguments to be passed along to the - :class:`~google.cloud.language.document.Document` - constructor. - - :rtype: :class:`~google.cloud.language.document.Document` - :returns: A document bound to this client. - """ - return Document(self, gcs_url=gcs_url, doc_type=doc_type, **kwargs) - - @functools.wraps(document_from_gcs_url) - def document_from_url(self, *args, **kwargs): - """Deprecated equivalent to document_from_gcs_url. - - DEPRECATED: 2017-02-06 - """ - warnings.warn('The `document_from_url` method is deprecated; use ' - '`document_from_gcs_url` instead.', DeprecationWarning) - return self.document_from_gcs_url(*args, **kwargs) diff --git a/language/google/cloud/language/document.py b/language/google/cloud/language/document.py deleted file mode 100644 index f350fcb6c63b..000000000000 --- a/language/google/cloud/language/document.py +++ /dev/null @@ -1,324 +0,0 @@ -# Copyright 2016-2017 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Definition for Google Cloud Natural Language API documents. - -A document is used to hold text to be analyzed and annotated. -""" - -import collections -import sys - -from google.cloud.language import api_responses -from google.cloud.language.entity import Entity -from google.cloud.language.sentiment import Sentiment -from google.cloud.language.sentence import Sentence -from google.cloud.language.syntax import Token - - -Annotations = collections.namedtuple( - 'Annotations', - ['sentences', 'tokens', 'sentiment', 'entities', 'language']) -"""Annotations for a document. - -:type sentences: list -:param sentences: List of :class:`.Sentence` in a document. - -:type tokens: list -:param tokens: List of :class:`.Token` from a document. - -:type sentiment: :class:`Sentiment` -:param sentiment: The sentiment of a document. - -:type entities: list -:param entities: List of :class:`~.language.entity.Entity` - found in a document. - -:type language: str -:param language: The language used for the annotation. -""" - - -class Encoding(object): - """The encoding type used to calculate offsets. - - Represents the text encoding that the caller uses to process the output. - The API provides the beginning offsets for various outputs, such as tokens - and mentions. - """ - - NONE = 'NONE' - """Unspecified encoding type.""" - - UTF8 = 'UTF8' - """UTF-8 encoding type.""" - - UTF16 = 'UTF16' - """UTF-16 encoding type.""" - - UTF32 = 'UTF32' - """UTF-32 encoding type.""" - - @classmethod - def get_default(cls): - """Return the appropriate default encoding on this system. - - :rtype: str - :returns: The correct default encoding on this system. - """ - if sys.maxunicode == 65535: - return cls.UTF16 - return cls.UTF32 - - -class Document(object): - """Document to send to Google Cloud Natural Language API. - - Represents either plain text or HTML, and the content is either - stored on the document or referred to in a Google Cloud Storage - object. - - :type client: :class:`~google.cloud.language.client.Client` - :param client: A client which holds credentials and other - configuration. - - :type content: str - :param content: (Optional) The document text content (either plain - text or HTML). - - :type gcs_url: str - :param gcs_url: (Optional) The URL of the Google Cloud Storage object - holding the content. Of the form - ``gs://{bucket}/{blob-name}``. - - :type doc_type: str - :param doc_type: (Optional) The type of text in the document. - Defaults to plain text. Can be one of - :attr:`~.Document.PLAIN_TEXT` or - or :attr:`~.Document.HTML`. - - :type language: str - :param language: (Optional) The language of the document text. - Defaults to None (auto-detect). - - :type encoding: str - :param encoding: (Optional) The encoding of the document text. - Defaults to UTF-8. Can be one of - :attr:`~.Encoding.UTF8`, :attr:`~.Encoding.UTF16` - or :attr:`~.Encoding.UTF32`. - - :raises: :class:`~exceptions.ValueError` both ``content`` and ``gcs_url`` - are specified or if neither are specified. - """ - - TYPE_UNSPECIFIED = 'TYPE_UNSPECIFIED' - """Unspecified document type.""" - - PLAIN_TEXT = 'PLAIN_TEXT' - """Plain text document type.""" - - HTML = 'HTML' - """HTML document type.""" - - def __init__(self, client, content=None, gcs_url=None, doc_type=PLAIN_TEXT, - language=None, encoding=Encoding.get_default()): - if content is not None and gcs_url is not None: - raise ValueError('A Document cannot contain both local text and ' - 'a link to text in a Google Cloud Storage object') - if content is None and gcs_url is None: - raise ValueError('A Document must contain either local text or a ' - 'link to text in a Google Cloud Storage object') - self.client = client - self.content = content - self.gcs_url = gcs_url - self.doc_type = doc_type - self.language = language - self.encoding = encoding - - def _to_dict(self): - """Helper to convert the current document into a dictionary. - - To be used when constructing requests. - - :rtype: dict - :returns: The Document value as a JSON dictionary. - """ - info = { - 'type': self.doc_type, - } - if self.language is not None: - info['language'] = self.language - if self.content is not None: - info['content'] = self.content - elif self.gcs_url is not None: - info['gcsContentUri'] = self.gcs_url - return info - - def analyze_entities(self): - """Analyze the entities in the current document. - - Finds named entities (currently finds proper names as of August 2016) - in the text, entity types, salience, mentions for each entity, and - other properties. - - .. _analyzeEntities: https://cloud.google.com/natural-language/\ - reference/rest/v1/documents/analyzeEntities - - See `analyzeEntities`_. - - :rtype: :class:`~.language.entity.EntityResponse` - :returns: A representation of the entity response. - """ - data = { - 'document': self._to_dict(), - 'encodingType': self.encoding, - } - api_response = self.client._connection.api_request( - method='POST', path='analyzeEntities', data=data) - return api_responses.EntityResponse.from_api_repr(api_response) - - def analyze_entity_sentiment(self): - """Analyze the entity sentiment. - - Finds entities, similar to `AnalyzeEntities` in the text and - analyzes sentiment associated with each entity and its mentions. - - :rtype: :class:`~language.entity.EntitySentimentResponse` - :returns: A representation of the entity sentiment response. - """ - # Sanity check: Not available on v1. - if self.client._connection.API_VERSION == 'v1': - raise NotImplementedError( - 'The `analyze_entity_sentiment` method is only available ' - 'on the Natural Language 1.1 beta. Use version="v1beta2" ' - 'as a keyword argument to the constructor.', - ) - - # Perform the API request. - data = { - 'document': self._to_dict(), - 'encodingType': self.encoding, - } - api_response = self.client._connection.api_request( - method='POST', path='analyzeEntitySentiment', data=data) - return api_responses.EntityResponse.from_api_repr(api_response) - - def analyze_sentiment(self): - """Analyze the sentiment in the current document. - - .. _analyzeSentiment: https://cloud.google.com/natural-language/\ - reference/rest/v1/documents/analyzeSentiment - - See `analyzeSentiment`_. - - :rtype: :class:`.SentimentResponse` - :returns: A representation of the sentiment response. - """ - data = {'document': self._to_dict()} - api_response = self.client._connection.api_request( - method='POST', path='analyzeSentiment', data=data) - return api_responses.SentimentResponse.from_api_repr(api_response) - - def analyze_syntax(self): - """Analyze the syntax in the current document. - - .. _analyzeSyntax: https://cloud.google.com/natural-language/\ - reference/rest/v1/documents/analyzeSyntax - - See `analyzeSyntax`_. - - :rtype: list - :returns: A list of :class:`~.language.syntax.Token` returned from - the API. - """ - data = { - 'document': self._to_dict(), - 'encodingType': self.encoding, - } - api_response = self.client._connection.api_request( - method='POST', path='analyzeSyntax', data=data) - return api_responses.SyntaxResponse.from_api_repr(api_response) - - def annotate_text(self, include_syntax=True, include_entities=True, - include_sentiment=True): - """Advanced natural language API: document syntax and other features. - - Includes the full functionality of :meth:`analyze_entities` and - :meth:`analyze_sentiment`, enabled by the flags - ``include_entities`` and ``include_sentiment`` respectively. - - In addition ``include_syntax`` adds a new feature that analyzes - the document for semantic and syntacticinformation. - - .. note:: - - This API is intended for users who are familiar with machine - learning and need in-depth text features to build upon. - - .. _annotateText: https://cloud.google.com/natural-language/\ - reference/rest/v1/documents/annotateText - - See `annotateText`_. - - :type include_syntax: bool - :param include_syntax: (Optional) Flag to enable syntax analysis - of the current document. - - :type include_entities: bool - :param include_entities: (Optional) Flag to enable entity extraction - from the current document. - - :type include_sentiment: bool - :param include_sentiment: (Optional) Flag to enable sentiment - analysis of the current document. - - :rtype: :class:`Annotations` - :returns: A tuple of each of the four values returned from the API: - sentences, tokens, sentiment and entities. - """ - features = {} - if include_syntax: - features['extractSyntax'] = True - if include_entities: - features['extractEntities'] = True - if include_sentiment: - features['extractDocumentSentiment'] = True - - data = { - 'document': self._to_dict(), - 'features': features, - 'encodingType': self.encoding, - } - api_response = self.client._connection.api_request( - method='POST', path='annotateText', data=data) - - sentences = [Sentence.from_api_repr(sentence) - for sentence in api_response['sentences']] - tokens = [Token.from_api_repr(token) - for token in api_response['tokens']] - sentiment_info = api_response.get('documentSentiment') - if sentiment_info is None: - sentiment = None - else: - sentiment = Sentiment.from_api_repr(sentiment_info) - entities = [Entity.from_api_repr(entity) - for entity in api_response['entities']] - annotations = Annotations( - entities=entities, - language=api_response.get('language'), - sentences=sentences, - sentiment=sentiment, - tokens=tokens, - ) - return annotations diff --git a/language/google/cloud/language/entity.py b/language/google/cloud/language/entity.py deleted file mode 100644 index 991232f19461..000000000000 --- a/language/google/cloud/language/entity.py +++ /dev/null @@ -1,190 +0,0 @@ -# Copyright 2016-2017 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Definition for Google Cloud Natural Language API entities. - -An entity is used to describe a proper name extracted from text. -""" - -from google.cloud.language.sentiment import Sentiment - - -class EntityType(object): - """List of possible entity types.""" - - UNKNOWN = 'UNKNOWN' - """Unknown entity type.""" - - PERSON = 'PERSON' - """Person entity type.""" - - LOCATION = 'LOCATION' - """Location entity type.""" - - ORGANIZATION = 'ORGANIZATION' - """Organization entity type.""" - - EVENT = 'EVENT' - """Event entity type.""" - - WORK_OF_ART = 'WORK_OF_ART' - """Work of art entity type.""" - - CONSUMER_GOOD = 'CONSUMER_GOOD' - """Consumer good entity type.""" - - OTHER = 'OTHER' - """Other entity type (i.e. known but not classified).""" - - -class MentionType(object): - """List of possible mention types.""" - - TYPE_UNKNOWN = 'TYPE_UNKNOWN' - """Unknown mention type""" - - PROPER = 'PROPER' - """Proper name""" - - COMMON = 'COMMON' - """Common noun (or noun compound)""" - - -class Mention(object): - """A Google Cloud Natural Language API mention. - - Represents a mention for an entity in the text. Currently, proper noun - mentions are supported. - """ - def __init__(self, text, mention_type): - self.text = text - self.mention_type = mention_type - - def __str__(self): - return str(self.text) - - @classmethod - def from_api_repr(cls, payload): - """Convert a Mention from the JSON API into an :class:`Mention`. - - :param payload: dict - :type payload: The value from the backend. - - :rtype: :class:`Mention` - :returns: The mention parsed from the API representation. - """ - text = TextSpan.from_api_repr(payload['text']) - mention_type = payload['type'] - return cls(text, mention_type) - - -class TextSpan(object): - """A span of text from Google Cloud Natural Language API. - - Represents a word or phrase of text, as well as its offset - from the original document. - """ - def __init__(self, content, begin_offset): - self.content = content - self.begin_offset = begin_offset - - def __str__(self): - """Return the string representation of this TextSpan. - - :rtype: str - :returns: The text content - """ - return self.content - - @classmethod - def from_api_repr(cls, payload): - """Convert a TextSpan from the JSON API into an :class:`TextSpan`. - - :param payload: dict - :type payload: The value from the backend. - - :rtype: :class:`TextSpan` - :returns: The text span parsed from the API representation. - """ - content = payload['content'] - begin_offset = payload['beginOffset'] - return cls(content=content, begin_offset=begin_offset) - - -class Entity(object): - """A Google Cloud Natural Language API entity. - - Represents a phrase in 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. - - .. _Entity message: https://cloud.google.com/natural-language/\ - reference/rest/v1/Entity - .. _EntityType enum: https://cloud.google.com/natural-language/\ - reference/rest/v1/Entity#Type - - See `Entity message`_. - - :type name: str - :param name: The name / phrase identified as the entity. - - :type entity_type: str - :param entity_type: The type of the entity. See `EntityType enum`_. - - :type metadata: dict - :param metadata: The metadata associated with the entity. - Wikipedia URLs and Knowledge Graph MIDs are - provided, if available. The associated keys are - "wikipedia_url" and "mid", respectively. - - :type salience: float - :param salience: The prominence of the entity / phrase within the text - containing it. - - :type mentions: list - :param mentions: List of strings that mention the entity. - - :type sentiment: :class:`~.language.sentiment.Sentiment` - :params sentiment: The sentiment; sent only on `analyze_entity_sentiment` - calls. - """ - - def __init__(self, name, entity_type, metadata, salience, mentions, - sentiment): - self.name = name - self.entity_type = entity_type - self.metadata = metadata - self.salience = salience - self.mentions = mentions - self.sentiment = sentiment - - @classmethod - def from_api_repr(cls, payload): - """Convert an Entity from the JSON API into an :class:`Entity`. - - :param payload: dict - :type payload: The value from the backend. - - :rtype: :class:`Entity` - :returns: The entity parsed from the API representation. - """ - name = payload['name'] - entity_type = payload['type'] - metadata = payload['metadata'] - salience = payload['salience'] - mentions = [Mention.from_api_repr(val) for val in payload['mentions']] - sentiment = None - if payload.get('sentiment'): - sentiment = Sentiment.from_api_repr(payload['sentiment']) - return cls(name, entity_type, metadata, salience, mentions, sentiment) diff --git a/language/google/cloud/language/sentence.py b/language/google/cloud/language/sentence.py deleted file mode 100644 index 386162ee7010..000000000000 --- a/language/google/cloud/language/sentence.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright 2017 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Representation of Sentence objects.""" - -from google.cloud.language.sentiment import Sentiment - - -class Sentence(object): - """A Google Cloud Natural Language API sentence object. - - .. _Sentence message: https://cloud.google.com/natural-language/reference\ - /rest/v1/documents/annotateText#Sentence - - See `Sentence message`_. - - :type content: str - :param content: The text that the sentence is composed of. - - :type begin: int - :param begin: The beginning offset of the sentence in the original - document according to the encoding type specified - in the API request. - - :type sentiment: :class:`~google.cloud.language.sentiment.Sentiment` - :param sentiment: - (Optional) For calls to - :meth:`~google.cloud.language.document.Document.annotate_text` where - ``include_sentiment`` is set to true, this field will contain the - sentiment for the sentence. - """ - def __init__(self, content, begin, sentiment=None): - self.content = content - self.begin = begin - self.sentiment = sentiment - - @classmethod - def from_api_repr(cls, payload): - """Convert a sentence from the JSON API into a :class:`Sentence`. - - :param payload: dict - :type payload: The value from the backend. - - :rtype: :class:`Sentence` - :returns: The sentence parsed from the API representation. - """ - text_span = payload['text'] - - # The sentence may or may not have a sentiment; only attempt the - # typecast if one is present. - sentiment = None - if payload.get('sentiment') is not None: - sentiment = Sentiment.from_api_repr(payload['sentiment']) - - # Return a Sentence object. - return cls(text_span['content'], text_span['beginOffset'], - sentiment=sentiment) diff --git a/language/google/cloud/language/sentiment.py b/language/google/cloud/language/sentiment.py deleted file mode 100644 index 2c56f9d1ee87..000000000000 --- a/language/google/cloud/language/sentiment.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Definition for Google Cloud Natural Language API sentiment. - -Sentiment is the response to an ``analyzeSentiment`` request. -""" - - -class Sentiment(object): - """A Google Cloud Natural Language API sentiment object. - - .. _Sentiment message: https://cloud.google.com/natural-language/\ - reference/rest/v1/Sentiment - .. _Sentiment basics: https://cloud.google.com/natural-language/\ - docs/basics#sentiment-analysis-values - - See `Sentiment message`_ and `Sentiment basics`_. - - :type score: float - :param score: Score of the sentiment in the ``[-1.0, 1.0]`` range. - Larger numbers represent more positive sentiments. - - :type magnitude: float - :param magnitude: A non-negative number in the ``[0, +inf)`` range, which - represents the absolute magnitude of sentiment - regardless of score (positive or negative). - """ - - def __init__(self, score, magnitude): - self.score = score - self.magnitude = magnitude - - @classmethod - def from_api_repr(cls, payload): - """Convert a Sentiment from the JSON API into a :class:`Sentiment`. - - :param payload: dict - :type payload: The value from the backend. - - :rtype: :class:`Sentiment` - :returns: The sentiment parsed from the API representation. - """ - score = payload.get('score', None) - magnitude = payload['magnitude'] - return cls(score, magnitude) diff --git a/language/google/cloud/language/syntax.py b/language/google/cloud/language/syntax.py deleted file mode 100644 index 037a6a74f298..000000000000 --- a/language/google/cloud/language/syntax.py +++ /dev/null @@ -1,253 +0,0 @@ -# Copyright 2016-2017 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Google Cloud Natural Language API helpers for tokenized text. - -The ``annotateText`` method, when used with the "syntax" feature, -breaks a document down into tokens and sentences. -""" - - -class PartOfSpeech(object): - """A Google Cloud Natural Language API Part of speech object. - - These are the grammatical categories of the matched token in - the sentence. https://cloud.google.com/natural-language/docs\ - /reference/rest/v1/Token#PartOfSpeech - - :type aspect: str - :param aspect: The grammatical aspect. https://cloud.google\ - .com/natural-language/docs/reference/rest/v1/\ - Token#Aspect - - :type reciprocity: str - :param reciprocity: The grammatical reciprocity. https://\ - cloud.google.com/natural-language/docs/reference\ - /rest/v1/Token#Reciprocity - - :type case: str - :param case: The grammatical case. https://cloud.google.com/\ - natural-language/docs/reference/rest/v1/Token#Case - - :type mood: str - :param mood: The grammatical mood. https://cloud.google.com/\ - natural-language/docs/reference/rest/v1/Token#Mood - - :type tag: str - :param tag: The part of speech tag. https://cloud.google.com/natural\ - -language/docs/reference/rest/v1/Token#Tag - - :type person: str - :param person: The grammatical person. https://cloud.google.com/\ - natural-language/docs/reference/rest/v1/Token#Person - - :type number: str - :param number: The grammatical number. https://cloud.google.com/natural\ - -language/docs/reference/rest/v1/Token#Number - - :type tense: str - :param tense: The grammatical tense. https://cloud.google.com/natural\ - -language/docs/reference/rest/v1/Token#Tense - - :type form: str - :param form: The grammatical form. https://cloud.google.com/natural\ - -language/docs/reference/rest/v1/Token#Form - - :type proper: str - :param proper: The grammatical properness. https://cloud.google.com/\ - natural-language/docs/reference/rest/v1/Token#Proper - - :type voice: str - :param voice: The grammatical voice. https://cloud.google.com/\ - natural-language/docs/reference/rest/v1/Token#Voice - - :type gender: str - :param gender: The grammatical gender. https://cloud.google.com/\ - natural-language/docs/reference/rest/v1/Token#Gender - """ - - UNKNOWN = 'UNKNOWN' - """Unknown part of speech.""" - - ADJECTIVE = 'ADJ' - """Part of speech: Adjective.""" - - ADPOSITION = 'ADP' - """Adposition (preposition and postposition).""" - - ADVERB = 'ADV' - """Adverb.""" - - CONJUNCTION = 'CONJ' - """Conjunction.""" - - DETERMINER = 'DET' - """Determiner.""" - - NOUN = 'NOUN' - """Noun (common and proper).""" - - CARDINAL_NUMBER = 'NUM' - """Cardinal number.""" - - PRONOUN = 'PRON' - """Pronoun.""" - - PARTICIPLE = 'PRT' - """Particle or other function word.""" - - PUNCTUATION = 'PUNCT' - """Punctuation.""" - - VERB = 'VERB' - """Verb (all tenses and modes).""" - - OTHER = 'X' - """Other: foreign words, typos, abbreviations.""" - - AFFIX = 'AFFIX' - """Affix.""" - - _REVERSE_MAP = { - 'UNKNOWN': 'UNKNOWN', - 'ADJ': 'ADJECTIVE', - 'ADP': 'ADPOSITION', - 'ADV': 'ADVERB', - 'CONJ': 'CONJUNCTION', - 'DET': 'DETERMINER', - 'NOUN': 'NOUN', - 'NUM': 'CARDINAL_NUMBER', - 'PRON': 'PRONOUN', - 'PRT': 'PARTICIPLE', - 'PUNCT': 'PUNCTUATION', - 'VERB': 'VERB', - 'X': 'OTHER', - 'AFFIX': 'AFFIX', - } - - def __init__(self, aspect, reciprocity, case, mood, tag, person, - number, tense, form, proper, voice, gender): - self.aspect = aspect - self.reciprocity = reciprocity - self.case = case - self.mood = mood - self.tag = tag - self.person = person - self.number = number - self.tense = tense - self.form = form - self.proper = proper - self.voice = voice - self.gender = gender - - @classmethod - def from_api_repr(cls, payload): - return PartOfSpeech(aspect=payload['aspect'], - reciprocity=payload['reciprocity'], - case=payload['case'], - mood=payload['mood'], - tag=payload['tag'], - person=payload['person'], - number=payload['number'], - tense=payload['tense'], - form=payload['form'], - proper=payload['proper'], - voice=payload['voice'], - gender=payload['gender']) - - @classmethod - def reverse(cls, tag): - """Reverses the API's enum name for the one on this class. - - For example:: - - >>> PartOfSpeech.OTHER - 'X' - >>> PartOfSpeech.reverse('X') - 'OTHER' - - :rtype: str - :returns: The attribute name corresponding to the API part of - speech enum. - """ - return cls._REVERSE_MAP[tag] - - -class Token(object): - """A Google Cloud Natural Language API token object. - - .. _Token message: https://cloud.google.com/natural-language/reference\ - /rest/v1/documents/annotateText#Token - .. _Lemma: https://en.wikipedia.org/wiki/Lemma_(morphology) - .. _Label enum: https://cloud.google.com/natural-language/reference/\ - rest/v1/documents/annotateText#Label - - See `Token message`_. - - :type text_content: str - :param text_content: The text that the token is composed of. - - :type text_begin: int - :param text_begin: The beginning offset of the content in the original - document according to the encoding type specified - in the API request. - - :type part_of_speech: PartOfSpeech - :param part_of_speech: An object representing the Part of Speech of the - token with it's properties. - - :type edge_index: int - :param edge_index: 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 ``edge_index`` is - its own index. - - :type edge_label: str - :param edge_label: See `Label enum`_. - - :type lemma: str - :param lemma: The `Lemma`_ of the token. - """ - - def __init__(self, text_content, text_begin, part_of_speech, - edge_index, edge_label, lemma): - self.text_content = text_content - self.text_begin = text_begin - self.part_of_speech = part_of_speech - self.edge_index = edge_index - self.edge_label = edge_label - self.lemma = lemma - - @classmethod - def from_api_repr(cls, payload): - """Convert a token from the JSON API into a :class:`Token`. - - :param payload: dict - :type payload: The value from the backend. - - :rtype: :class:`Token` - :returns: The token parsed from the API representation. - """ - text_span = payload['text'] - text_content = text_span['content'] - text_begin = text_span['beginOffset'] - part_of_speech = PartOfSpeech.from_api_repr(payload['partOfSpeech']) - edge = payload['dependencyEdge'] - edge_index = edge['headTokenIndex'] - edge_label = edge['label'] - lemma = payload['lemma'] - return cls(text_content, text_begin, part_of_speech, - edge_index, edge_label, lemma) diff --git a/language/nox.py b/language/nox.py index 43212b1e8f38..3c72f603844d 100644 --- a/language/nox.py +++ b/language/nox.py @@ -38,9 +38,12 @@ def unit_tests(session, python_version): session.install('-e', '.') # Run py.test against the unit tests. - session.run('py.test', '--quiet', - '--cov=google.cloud.language', '--cov=tests.unit', '--cov-append', - '--cov-config=.coveragerc', '--cov-report=', '--cov-fail-under=97', + session.run( + 'py.test', '--quiet', + '--cov=google.cloud.language_v1', + '--cov=google.cloud.language_v1beta2', + '--cov-append', '--cov-config=.coveragerc', + '--cov-report=', '--cov-fail-under=97', 'tests/unit', ) @@ -67,7 +70,7 @@ def system_tests(session, python_version): session.install('.') # Run py.test against the system tests. - session.run('py.test', '--quiet', 'tests/system.py') + session.run('py.test', '--quiet', 'tests/system/') @nox.session diff --git a/language/tests/system.py b/language/tests/system.py deleted file mode 100644 index 0d1321aff268..000000000000 --- a/language/tests/system.py +++ /dev/null @@ -1,152 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -from google.cloud import exceptions -from google.cloud import language -from google.cloud import storage - -from test_utils.system import unique_resource_id -from test_utils.retry import RetryErrors - - -class Config(object): - """Run-time configuration to be modified at set-up. - - This is a mutable stand-in to allow test set-up to modify - global state. - """ - CLIENT = None - TEST_BUCKET = None - - -def setUpModule(): - Config.CLIENT = language.Client() - # Now create a bucket for GCS stored content. - storage_client = storage.Client() - bucket_name = 'new' + unique_resource_id() - Config.TEST_BUCKET = storage_client.bucket(bucket_name) - # 429 Too Many Requests in case API requests rate-limited. - retry_429 = RetryErrors(exceptions.TooManyRequests) - retry_429(Config.TEST_BUCKET.create)() - - -def tearDownModule(): - # 409 Conflict if the bucket is full. - # 429 Too Many Requests in case API requests rate-limited. - bucket_retry = RetryErrors( - (exceptions.TooManyRequests, exceptions.Conflict)) - bucket_retry(Config.TEST_BUCKET.delete)(force=True) - - -class TestLanguage(unittest.TestCase): - - NAME1 = 'Michelangelo Caravaggio' - NAME2 = 'Italian' - NAME3 = 'The Calling of Saint Matthew' - TEXT_CONTENT = '%s, %s painter, is known for %r.' % (NAME1, NAME2, NAME3) - - def setUp(self): - self.to_delete_by_case = [] - - def tearDown(self): - for value in self.to_delete_by_case: - value.delete() - - def _check_analyze_entities_result(self, entities): - from google.cloud.language.entity import EntityType - - self.assertEqual(len(entities), 3) - entity1, entity2, entity3 = entities - # Verify entity 1. - self.assertEqual(entity1.name, self.NAME1) - self.assertEqual(entity1.entity_type, EntityType.PERSON) - self.assertGreater(entity1.salience, 0.0) - # Other mentions may occur, e.g. "painter". - self.assertIn(entity1.name, [str(i) for i in entity1.mentions]) - self.assertEqual(entity1.metadata['wikipedia_url'], - 'https://en.wikipedia.org/wiki/Caravaggio') - self.assertIsInstance(entity1.metadata, dict) - # Verify entity 2. - self.assertEqual(entity2.name, self.NAME2) - self.assertEqual(entity2.entity_type, EntityType.LOCATION) - self.assertGreater(entity2.salience, 0.0) - self.assertEqual([str(i) for i in entity2.mentions], [entity2.name]) - self.assertEqual(entity2.metadata['wikipedia_url'], - 'https://en.wikipedia.org/wiki/Italy') - self.assertIsInstance(entity2.metadata, dict) - # Verify entity 3. - self.assertEqual(entity3.name, self.NAME3) - choices = (EntityType.EVENT, EntityType.WORK_OF_ART) - self.assertIn(entity3.entity_type, choices) - self.assertGreater(entity3.salience, 0.0) - self.assertEqual([str(i) for i in entity3.mentions], [entity3.name]) - wiki_url = ('https://en.wikipedia.org/wiki/' - 'The_Calling_of_St_Matthew_(Caravaggio)') - self.assertEqual(entity3.metadata['wikipedia_url'], wiki_url) - self.assertIsInstance(entity3.metadata, dict) - - def test_analyze_entities(self): - document = Config.CLIENT.document_from_text(self.TEXT_CONTENT) - response = document.analyze_entities() - self.assertEqual(response.language, 'en') - self._check_analyze_entities_result(response.entities) - - def test_analyze_entities_from_blob(self): - # Upload the text to a blob. - bucket_name = Config.TEST_BUCKET.name - blob_name = 'document.txt' - blob = Config.TEST_BUCKET.blob(blob_name) - self.to_delete_by_case.append(blob) # Clean-up. - blob.upload_from_string(self.TEXT_CONTENT) - - # Create a document referencing that blob. - gcs_url = 'gs://%s/%s' % (bucket_name, blob_name) - document = Config.CLIENT.document_from_url(gcs_url) - entities = document.analyze_entities().entities - self._check_analyze_entities_result(entities) - - def test_analyze_sentiment(self): - positive_msg = 'Jogging is fun' - document = Config.CLIENT.document_from_text(positive_msg) - sentiment = document.analyze_sentiment().sentiment - self.assertTrue(0.0 < sentiment.score < 1.0) - self.assertTrue(0.0 < sentiment.magnitude < 1.5) - - def _verify_token(self, token, text_content, part_of_speech, lemma): - from google.cloud.language.syntax import Token - - self.assertIsInstance(token, Token) - self.assertEqual(token.text_content, text_content) - self.assertEqual(token.part_of_speech.tag, part_of_speech) - self.assertEqual(token.lemma, lemma) - - def _check_analyze_syntax_result(self, tokens): - from google.cloud.language.syntax import PartOfSpeech - - self.assertEqual(len(tokens), 3) - token1, token2, token3 = tokens - # Verify token 1. - self._verify_token(token1, 'Jogging', PartOfSpeech.NOUN, 'Jogging') - # Verify token 2. - self._verify_token(token2, 'is', PartOfSpeech.VERB, 'be') - # Verify token 3. - self._verify_token(token3, 'fun', PartOfSpeech.ADJECTIVE, 'fun') - - def test_analyze_syntax(self): - positive_msg = 'Jogging is fun' - document = Config.CLIENT.document_from_text(positive_msg) - tokens = document.analyze_syntax().tokens - self._check_analyze_syntax_result(tokens) diff --git a/language/tests/system/gapic/v1/test_system_language_service_v1.py b/language/tests/system/gapic/v1/test_system_language_service_v1.py new file mode 100644 index 000000000000..a665ba033d37 --- /dev/null +++ b/language/tests/system/gapic/v1/test_system_language_service_v1.py @@ -0,0 +1,30 @@ +# Copyright 2017, Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import time +import unittest + +from google.cloud import language_v1 +from google.cloud.language_v1 import enums +from google.cloud.language_v1.proto import language_service_pb2 + + +class TestSystemLanguageService(unittest.TestCase): + def test_analyze_sentiment(self): + + client = language_v1.LanguageServiceClient() + content = 'Hello, world!' + type_ = enums.Document.Type.PLAIN_TEXT + document = {'content': content, 'type': type_} + response = client.analyze_sentiment(document) diff --git a/language/tests/unit/test__http.py b/language/tests/unit/test__http.py deleted file mode 100644 index 0b5ffd8ea9c6..000000000000 --- a/language/tests/unit/test__http.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -import mock - - -class TestConnection(unittest.TestCase): - - @staticmethod - def _get_target_class(): - from google.cloud.language._http import Connection - - return Connection - - def _make_one(self, *args, **kw): - return self._get_target_class()(*args, **kw) - - def test_build_api_url(self): - conn = self._make_one(object()) - uri = '/'.join([ - conn.API_BASE_URL, - conn.API_VERSION, - 'documents', - ]) - method = 'annotateText' - uri += ':' + method - self.assertEqual(conn.build_api_url(method), uri) - - def test_extra_headers(self): - import requests - - from google.cloud import _http as base_http - from google.cloud.language import _http as MUT - - http = mock.create_autospec(requests.Session, instance=True) - response = requests.Response() - response.status_code = 200 - data = b'brent-spiner' - response._content = data - http.request.return_value = response - client = mock.Mock(_http=http, spec=['_http']) - - conn = self._make_one(client) - req_data = 'req-data-boring' - result = conn.api_request( - 'GET', '/rainbow', data=req_data, expect_json=False) - self.assertEqual(result, data) - - expected_headers = { - 'Accept-Encoding': 'gzip', - base_http.CLIENT_INFO_HEADER: MUT._CLIENT_INFO, - 'User-Agent': conn.USER_AGENT, - } - expected_uri = conn.build_api_url('/rainbow') - http.request.assert_called_once_with( - data=req_data, - headers=expected_headers, - method='GET', - url=expected_uri, - ) diff --git a/language/tests/unit/test_api_responses.py b/language/tests/unit/test_api_responses.py deleted file mode 100644 index 4b79ec923fee..000000000000 --- a/language/tests/unit/test_api_responses.py +++ /dev/null @@ -1,208 +0,0 @@ -# Copyright 2017 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from copy import copy -import unittest - - -class TestEntityResponse(unittest.TestCase): - ENTITY_DICT = { - 'mentions': [{ - 'text': {'content': 'Italian', 'beginOffset': 0}, - 'type': 'PROPER', - }], - 'metadata': {'wikipedia_url': 'http://en.wikipedia.org/wiki/Italy'}, - 'name': 'Italian', - 'salience': 0.15, - 'type': 'LOCATION', - } - - def test_constructor(self): - from google.cloud.language.api_responses import EntityResponse - from google.cloud.language.entity import Entity - - entity_response = EntityResponse( - entities=[Entity.from_api_repr(self.ENTITY_DICT)], - language='en', - ) - self._verify_entity_response(entity_response) - - def test_api_repr_factory(self): - from google.cloud.language.api_responses import EntityResponse - - entity_response = EntityResponse.from_api_repr({ - 'entities': [self.ENTITY_DICT], - 'language': 'en', - }) - self._verify_entity_response(entity_response) - - def _verify_entity_response(self, entity_response): - from google.cloud.language.entity import EntityType - from google.cloud.language.entity import Mention - - self.assertEqual(len(entity_response.entities), 1) - entity = entity_response.entities[0] - self.assertEqual(entity.name, 'Italian') - self.assertEqual(len(entity.mentions), 1) - self.assertIsInstance(entity.mentions[0], Mention) - self.assertEqual(str(entity.mentions[0]), 'Italian') - self.assertTrue(entity.metadata['wikipedia_url'].endswith('Italy')) - self.assertAlmostEqual(entity.salience, 0.15) - self.assertEqual(entity.entity_type, EntityType.LOCATION) - self.assertEqual(entity_response.language, 'en') - - -class TestSentimentResponse(unittest.TestCase): - SENTIMENT_DICT = { - 'score': 0.4, - 'magnitude': 3.14159, - } - SENTENCE_DICT = { - 'text': { - 'beginOffset': 0, - 'content': 'It is hailing in Wales.', - }, - 'sentiment': SENTIMENT_DICT, - } - - def test_constructor(self): - from google.cloud.language.api_responses import SentimentResponse - from google.cloud.language.sentence import Sentence - from google.cloud.language.sentiment import Sentiment - - sentiment_response = SentimentResponse( - language='en', - sentences=[Sentence.from_api_repr(self.SENTENCE_DICT)], - sentiment=Sentiment.from_api_repr(self.SENTIMENT_DICT), - ) - - self._verify_sentiment_response(sentiment_response) - - def test_api_repr_factory(self): - from google.cloud.language.api_responses import SentimentResponse - - sentiment_response = SentimentResponse.from_api_repr({ - 'documentSentiment': self.SENTIMENT_DICT, - 'language': 'en', - 'sentences': [self.SENTENCE_DICT], - }) - - self._verify_sentiment_response(sentiment_response) - - def _verify_sentiment_response(self, sentiment_response): - from google.cloud.language.sentiment import Sentiment - - self.assertEqual(sentiment_response.language, 'en') - self.assertEqual(len(sentiment_response.sentences), 1) - sentence = sentiment_response.sentences[0] - self.assertEqual(sentence.begin, 0) - self.assertEqual(sentence.content, 'It is hailing in Wales.') - self.assertIsInstance(sentence.sentiment, Sentiment) - self.assertAlmostEqual(sentiment_response.sentiment.score, 0.4) - self.assertAlmostEqual(sentiment_response.sentiment.magnitude, 3.14159) - - -class TestSyntaxResponse(unittest.TestCase): - SENTENCE_DICT = copy(TestSentimentResponse.SENTENCE_DICT) - aspect = 'ASPECT_UNKNOWN' - reciprocity = 'RECIPROCITY_UNKNOWN' - case = 'NOMINATIVE' - mood = 'MOOD_UNKNOWN' - tag = 'PRON' - person = 'FIRST' - number = 'SINGULAR' - tense = 'TENSE_UNKNOWN' - form = 'FORM_UNKNOWN' - proper = 'PROPER_UNKNOWN' - voice = 'VOICE_UNKNOWN' - gender = 'GENDER_UNKNOWN' - TOKEN_DICT = { - 'dependencyEdge': { - 'headTokenIndex': 0, - 'label': 'NSUBJ', - }, - 'lemma': 'it', - 'partOfSpeech': { - 'aspect': aspect, - 'reciprocity': reciprocity, - 'case': case, - 'mood': mood, - 'tag': tag, - 'person': person, - 'number': number, - 'tense': tense, - 'form': form, - 'proper': proper, - 'voice': voice, - 'gender': gender - }, - 'text': { - 'beginOffset': 0, - 'content': 'It' - }, - } - - def test_constructor(self): - from google.cloud.language.api_responses import SyntaxResponse - from google.cloud.language.sentence import Sentence - from google.cloud.language.syntax import Token - - syntax_response = SyntaxResponse( - language='en', - sentences=[Sentence.from_api_repr(self.SENTENCE_DICT)], - tokens=[Token.from_api_repr(self.TOKEN_DICT)], - ) - - self._verify_syntax_response(syntax_response) - - def test_api_repr_factory(self): - from google.cloud.language.api_responses import SyntaxResponse - - syntax_response = SyntaxResponse.from_api_repr({ - 'language': 'en', - 'sentences': [self.SENTENCE_DICT], - 'tokens': [self.TOKEN_DICT], - }) - - self._verify_syntax_response(syntax_response) - - def _verify_syntax_response(self, syntax_response): - from google.cloud.language.sentiment import Sentiment - - self.assertEqual(syntax_response.language, 'en') - - self.assertEqual(len(syntax_response.sentences), 1) - sentence = syntax_response.sentences[0] - self.assertEqual(sentence.begin, 0) - self.assertEqual(sentence.content, 'It is hailing in Wales.') - self.assertIsInstance(sentence.sentiment, Sentiment) - self.assertEqual(len(syntax_response.tokens), 1) - token = syntax_response.tokens[0] - self.assertEqual(token.text_content, 'It') - self.assertEqual(token.text_begin, 0) - self.assertEqual(token.part_of_speech.aspect, 'ASPECT_UNKNOWN') - self.assertEqual(token.part_of_speech.reciprocity, 'RECIPROCITY_UNKNOWN') - self.assertEqual(token.part_of_speech.case, 'NOMINATIVE') - self.assertEqual(token.part_of_speech.mood, 'MOOD_UNKNOWN') - self.assertEqual(token.part_of_speech.tag, 'PRON') - self.assertEqual(token.part_of_speech.person, 'FIRST') - self.assertEqual(token.part_of_speech.number, 'SINGULAR') - self.assertEqual(token.part_of_speech.tense, 'TENSE_UNKNOWN') - self.assertEqual(token.part_of_speech.form, 'FORM_UNKNOWN') - self.assertEqual(token.part_of_speech.proper, 'PROPER_UNKNOWN') - self.assertEqual(token.part_of_speech.voice, 'VOICE_UNKNOWN') - self.assertEqual(token.part_of_speech.gender, 'GENDER_UNKNOWN') - self.assertEqual(token.edge_index, 0) - self.assertEqual(token.edge_label, 'NSUBJ') - self.assertEqual(token.lemma, 'it') diff --git a/language/tests/unit/test_client.py b/language/tests/unit/test_client.py deleted file mode 100644 index fe8684e75fe8..000000000000 --- a/language/tests/unit/test_client.py +++ /dev/null @@ -1,146 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -import mock - - -def make_mock_credentials(): - from google.auth import credentials - - credentials = mock.Mock(spec=credentials.Credentials) - return credentials - - -class TestClient(unittest.TestCase): - - @staticmethod - def _get_target_class(): - from google.cloud.language.client import Client - - return Client - - def _make_one(self, *args, **kw): - return self._get_target_class()(*args, **kw) - - def test_ctor(self): - from google.cloud.language._http import Connection - - creds = make_mock_credentials() - http = object() - client = self._make_one(credentials=creds, _http=http) - self.assertIsInstance(client._connection, Connection) - self.assertIs(client._connection.credentials, creds) - self.assertIs(client._connection.http, http) - - def test_document_from_text_factory(self): - from google.cloud.language.document import Document - - creds = make_mock_credentials() - client = self._make_one(credentials=creds, _http=object()) - - content = 'abc' - language = 'es' - document = client.document_from_text(content, language=language) - self.assertIsInstance(document, Document) - self.assertIs(document.client, client) - self.assertEqual(document.content, content) - # Test the default arg. - self.assertEqual(document.doc_type, Document.PLAIN_TEXT) - # Test the kwargs as well. - self.assertEqual(document.language, language) - - def test_document_from_text_factory_failure(self): - creds = make_mock_credentials() - client = self._make_one(credentials=creds, _http=object()) - - with self.assertRaises(TypeError): - client.document_from_text('abc', doc_type='foo') - - def test_document_from_html_factory(self): - from google.cloud.language.document import Document - - creds = make_mock_credentials() - client = self._make_one(credentials=creds, _http=object()) - - content = 'abc' - language = 'ja' - document = client.document_from_html(content, language=language) - self.assertIsInstance(document, Document) - self.assertIs(document.client, client) - self.assertEqual(document.content, content) - # Test the default arg. - self.assertEqual(document.doc_type, Document.HTML) - # Test the kwargs as well. - self.assertEqual(document.language, language) - - def test_document_from_html_factory_failure(self): - creds = make_mock_credentials() - client = self._make_one(credentials=creds, _http=object()) - - with self.assertRaises(TypeError): - client.document_from_html('abc', doc_type='foo') - - def test_document_from_gcs_url_factory(self): - from google.cloud.language.document import Document - - creds = make_mock_credentials() - client = self._make_one(credentials=creds, _http=object()) - - gcs_url = 'gs://my-text-bucket/sentiment-me.txt' - document = client.document_from_gcs_url(gcs_url) - self.assertIsInstance(document, Document) - self.assertIs(document.client, client) - self.assertIsNone(document.content) - self.assertEqual(document.gcs_url, gcs_url) - self.assertEqual(document.doc_type, Document.PLAIN_TEXT) - - def test_document_from_gcs_url_factory_explicit(self): - from google.cloud.language.document import Document - from google.cloud.language.document import Encoding - - creds = make_mock_credentials() - client = self._make_one(credentials=creds, _http=object()) - - encoding = Encoding.UTF32 - gcs_url = 'gs://my-text-bucket/sentiment-me.txt' - document = client.document_from_gcs_url(gcs_url, - doc_type=Document.HTML, - encoding=encoding) - self.assertIsInstance(document, Document) - self.assertIs(document.client, client) - self.assertIsNone(document.content) - self.assertEqual(document.gcs_url, gcs_url) - self.assertEqual(document.doc_type, Document.HTML) - self.assertEqual(document.encoding, encoding) - - def test_document_from_url_deprecation(self): - import warnings - - creds = make_mock_credentials() - client = self._make_one(credentials=creds, _http=object()) - - Client = self._get_target_class() - with mock.patch.object(Client, 'document_from_gcs_url') as dfgu: - with mock.patch.object(warnings, 'warn') as warn: - client.document_from_url(gcs_url='gs://bogus') - - # Establish that the warning happened and sent a - # DeprecationWarning. - self.assertEqual(warn.call_count, 1) - self.assertEqual(warn.mock_calls[0][1][1], DeprecationWarning) - - # Establish that the new (renamed) method is called. - dfgu.assert_called_once_with(gcs_url='gs://bogus') diff --git a/language/tests/unit/test_document.py b/language/tests/unit/test_document.py deleted file mode 100644 index 0b12d0955309..000000000000 --- a/language/tests/unit/test_document.py +++ /dev/null @@ -1,682 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -ANNOTATE_NAME = 'Moon' -ANNOTATE_CONTENT = 'A cow jumped over the %s.' % (ANNOTATE_NAME,) -ANNOTATE_SCORE = 1 -ANNOTATE_MAGNITUDE = 0.2 -ANNOTATE_SALIENCE = 0.11793101 -ANNOTATE_WIKI_URL = 'http://en.wikipedia.org/wiki/Natural_satellite' - - -def _make_token_json(name, part_of_speech, head, edge_label): - token_dict = { - 'text': { - 'content': name, - 'beginOffset': -1, - }, - 'partOfSpeech': { - 'aspect': 'ASPECT_UNKNOWN', - 'reciprocity': 'RECIPROCITY_UNKNOWN', - 'case': 'NOMINATIVE', - 'mood': 'MOOD_UNKNOWN', - 'tag': part_of_speech, - 'person': 'FIRST', - 'number': 'SINGULAR', - 'tense': 'TENSE_UNKNOWN', - 'form': 'FORM_UNKNOWN', - 'proper': 'PROPER_UNKNOWN', - 'voice': 'VOICE_UNKNOWN', - 'gender': 'GENDER_UNKNOWN', - }, - 'dependencyEdge': { - 'headTokenIndex': head, - 'label': edge_label, - }, - 'lemma': name, - } - return token_dict - - -def _get_token_and_sentences(include_syntax): - from google.cloud.language.syntax import PartOfSpeech - - if include_syntax: - token_info = [ - ('A', PartOfSpeech.DETERMINER, 1, 'DET'), - ('cow', PartOfSpeech.NOUN, 2, 'NSUBJ'), - ('jumped', PartOfSpeech.VERB, 2, 'ROOT'), - ('over', PartOfSpeech.ADPOSITION, 2, 'PREP'), - ('the', PartOfSpeech.DETERMINER, 5, 'DET'), - (ANNOTATE_NAME, PartOfSpeech.NOUN, 3, 'POBJ'), - ('.', PartOfSpeech.PUNCTUATION, 2, 'P'), - ] - sentences = [ - { - 'text': { - 'content': ANNOTATE_CONTENT, - 'beginOffset': -1, - }, - }, - ] - else: - token_info = [] - sentences = [] - - return token_info, sentences - - -def _get_entities(include_entities): - from google.cloud.language.entity import EntityType - - if include_entities: - entities = [ - { - 'name': ANNOTATE_NAME, - 'type': EntityType.LOCATION, - 'metadata': { - 'wikipedia_url': ANNOTATE_WIKI_URL, - }, - 'salience': ANNOTATE_SALIENCE, - 'mentions': [ - { - 'text': { - 'content': ANNOTATE_NAME, - 'beginOffset': -1 - }, - 'type': 'TYPE_UNKNOWN', - } - ] - }, - ] - else: - entities = [] - - return entities - - -def make_mock_client(response, api_version='v1'): - import mock - from google.cloud.language.client import Client - - connection = mock.Mock(spec=Client._CONNECTION_CLASSES[api_version]) - connection.API_VERSION = api_version - connection.api_request.return_value = response - return mock.Mock(_connection=connection, spec=Client) - - -class TestEncoding(unittest.TestCase): - def test_default_low_maxunicode(self): - import sys - import mock - - from google.cloud.language.document import Encoding - - with mock.patch.dict(sys.__dict__, maxunicode=65535): - self.assertEqual(Encoding.get_default(), Encoding.UTF16) - with mock.patch.dict(sys.__dict__, maxunicode=1114111): - self.assertEqual(Encoding.get_default(), Encoding.UTF32) - - -class TestDocument(unittest.TestCase): - @staticmethod - def _get_target_class(): - from google.cloud.language.document import Document - - return Document - - def _make_one(self, *args, **kw): - return self._get_target_class()(*args, **kw) - - def test_constructor_defaults(self): - import google.cloud.language.document as MUT - - client = object() - content = 'abc' - document = self._make_one(client, content) - self.assertIs(document.client, client) - self.assertEqual(document.content, content) - self.assertIsNone(document.gcs_url) - self.assertIsNone(document.language) - self.assertEqual(document.doc_type, MUT.Document.PLAIN_TEXT) - self.assertEqual(document.encoding, MUT.Encoding.get_default()) - - def test_constructor_explicit(self): - import google.cloud.language.document as MUT - - client = object() - gcs_url = 'gs://some-bucket/some-obj.html' - language = 'ja' - document = self._make_one(client, gcs_url=gcs_url, - doc_type=MUT.Document.HTML, - language=language, - encoding=MUT.Encoding.UTF32) - self.assertIs(document.client, client) - self.assertIsNone(document.content) - self.assertEqual(document.gcs_url, gcs_url) - self.assertEqual(document.doc_type, MUT.Document.HTML) - self.assertEqual(document.language, language) - self.assertEqual(document.encoding, MUT.Encoding.UTF32) - - def test_constructor_explicit_language(self): - client = object() - content = 'abc' - document = self._make_one(client, content, language='en-US') - self.assertEqual(document.language, 'en-US') - self.assertEqual(document._to_dict()['language'], 'en-US') - - def test_constructor_no_text(self): - with self.assertRaises(ValueError): - self._make_one(None, content=None, gcs_url=None) - - def test_constructor_text_and_gcs(self): - with self.assertRaises(ValueError): - self._make_one(None, content='abc', - gcs_url='gs://some-bucket/some-obj.txt') - - def test__to_dict_with_content(self): - klass = self._get_target_class() - content = 'Hello World' - document = self._make_one(None, content=content) - info = document._to_dict() - self.assertEqual(info, { - 'content': content, - 'type': klass.PLAIN_TEXT, - }) - - def test__to_dict_with_gcs(self): - klass = self._get_target_class() - gcs_url = 'gs://some-bucket/some-obj.html' - document = self._make_one(None, gcs_url=gcs_url) - info = document._to_dict() - self.assertEqual(info, { - 'gcsContentUri': gcs_url, - 'type': klass.PLAIN_TEXT, - }) - - def test__to_dict_with_no_content(self): - klass = self._get_target_class() - document = self._make_one(None, content='') - document.content = None # Manually unset the content. - info = document._to_dict() - self.assertEqual(info, { - 'type': klass.PLAIN_TEXT, - }) - - def _verify_entity(self, entity, name, entity_type, wiki_url, salience, - sentiment=None): - from google.cloud.language.entity import Entity - - self.assertIsInstance(entity, Entity) - self.assertEqual(entity.name, name) - self.assertEqual(entity.entity_type, entity_type) - if wiki_url: - self.assertEqual(entity.metadata, {'wikipedia_url': wiki_url}) - else: - self.assertEqual(entity.metadata, {}) - self.assertEqual(entity.salience, salience) - self.assertEqual(len(entity.mentions), 1) - self.assertEqual(entity.mentions[0].text.content, name) - if sentiment: - self.assertEqual(entity.sentiment.score, sentiment.score) - self.assertAlmostEqual(entity.sentiment.magnitude, - sentiment.magnitude) - - @staticmethod - def _expected_data(content, encoding_type=None, - extract_sentiment=False, - extract_entities=False, - extract_syntax=False): - from google.cloud.language.document import Document - - expected = { - 'document': { - 'type': Document.PLAIN_TEXT, - 'content': content, - }, - } - if encoding_type is not None: - expected['encodingType'] = encoding_type - if extract_sentiment: - features = expected.setdefault('features', {}) - features['extractDocumentSentiment'] = True - if extract_entities: - features = expected.setdefault('features', {}) - features['extractEntities'] = True - if extract_syntax: - features = expected.setdefault('features', {}) - features['extractSyntax'] = True - return expected - - def test_analyze_entities(self): - from google.cloud.language.document import Encoding - from google.cloud.language.entity import EntityType - - name1 = 'R-O-C-K' - name2 = 'USA' - content = name1 + ' in the ' + name2 - wiki2 = 'http://en.wikipedia.org/wiki/United_States' - salience1 = 0.91391456 - salience2 = 0.086085409 - response = { - 'entities': [ - { - 'name': name1, - 'type': EntityType.OTHER, - 'metadata': {}, - 'salience': salience1, - 'mentions': [ - { - 'text': { - 'content': name1, - 'beginOffset': -1 - }, - 'type': 'TYPE_UNKNOWN', - } - ] - }, - { - 'name': name2, - 'type': EntityType.LOCATION, - 'metadata': {'wikipedia_url': wiki2}, - 'salience': salience2, - 'mentions': [ - { - 'text': { - 'content': name2, - 'beginOffset': -1, - }, - 'type': 'PROPER', - }, - ], - }, - ], - 'language': 'en-US', - } - client = make_mock_client(response) - document = self._make_one(client, content) - - entity_response = document.analyze_entities() - self.assertEqual(len(entity_response.entities), 2) - entity1 = entity_response.entities[0] - self._verify_entity(entity1, name1, EntityType.OTHER, - None, salience1) - entity2 = entity_response.entities[1] - self._verify_entity(entity2, name2, EntityType.LOCATION, - wiki2, salience2) - - # Verify the request. - expected = self._expected_data( - content, encoding_type=Encoding.get_default()) - client._connection.api_request.assert_called_once_with( - path='analyzeEntities', method='POST', data=expected) - - def test_analyze_entity_sentiment_v1_error(self): - client = make_mock_client({}) - document = self._make_one(client, 'foo bar baz') - with self.assertRaises(NotImplementedError): - entity_response = document.analyze_entity_sentiment() - - def test_analyze_entity_sentiment(self): - from google.cloud.language.document import Encoding - from google.cloud.language.entity import EntityType - from google.cloud.language.sentiment import Sentiment - - name1 = 'R-O-C-K' - name2 = 'USA' - content = name1 + ' in the ' + name2 - wiki2 = 'http://en.wikipedia.org/wiki/United_States' - salience1 = 0.91391456 - salience2 = 0.086085409 - sentiment = Sentiment(score=0.15, magnitude=42) - response = { - 'entities': [ - { - 'name': name1, - 'type': EntityType.OTHER, - 'metadata': {}, - 'salience': salience1, - 'mentions': [ - { - 'text': { - 'content': name1, - 'beginOffset': -1 - }, - 'type': 'TYPE_UNKNOWN', - } - ], - 'sentiment': { - 'score': 0.15, - 'magnitude': 42, - } - }, - { - 'name': name2, - 'type': EntityType.LOCATION, - 'metadata': {'wikipedia_url': wiki2}, - 'salience': salience2, - 'mentions': [ - { - 'text': { - 'content': name2, - 'beginOffset': -1, - }, - 'type': 'PROPER', - }, - ], - 'sentiment': { - 'score': 0.15, - 'magnitude': 42, - } - }, - ], - 'language': 'en-US', - } - client = make_mock_client(response, api_version='v1beta2') - document = self._make_one(client, content) - - entity_response = document.analyze_entity_sentiment() - self.assertEqual(len(entity_response.entities), 2) - entity1 = entity_response.entities[0] - self._verify_entity(entity1, name1, EntityType.OTHER, - None, salience1, sentiment) - entity2 = entity_response.entities[1] - self._verify_entity(entity2, name2, EntityType.LOCATION, - wiki2, salience2, sentiment) - - # Verify the request. - expected = self._expected_data( - content, encoding_type=Encoding.get_default()) - client._connection.api_request.assert_called_once_with( - path='analyzeEntitySentiment', method='POST', data=expected) - - def _verify_sentiment(self, sentiment, score, magnitude): - from google.cloud.language.sentiment import Sentiment - - self.assertIsInstance(sentiment, Sentiment) - self.assertEqual(sentiment.score, score) - self.assertEqual(sentiment.magnitude, magnitude) - - def test_analyze_sentiment(self): - from google.cloud.language.api_responses import SentimentResponse - - content = 'All the pretty horses.' - score = 1 - magnitude = 0.6 - response = { - 'documentSentiment': { - 'score': score, - 'magnitude': magnitude, - }, - 'language': 'en-US', - } - client = make_mock_client(response) - document = self._make_one(client, content) - - sentiment_response = document.analyze_sentiment() - self.assertIsInstance(sentiment_response, SentimentResponse) - self._verify_sentiment(sentiment_response.sentiment, score, magnitude) - - # Verify the request. - expected = self._expected_data(content) - client._connection.api_request.assert_called_once_with( - path='analyzeSentiment', method='POST', data=expected) - - def _verify_token(self, token, text_content, part_of_speech_tag, lemma): - from google.cloud.language.syntax import Token - - self.assertIsInstance(token, Token) - self.assertEqual(token.text_content, text_content) - self.assertEqual(token.part_of_speech.tag, part_of_speech_tag) - self.assertEqual(token.lemma, lemma) - - def test_analyze_syntax(self): - from google.cloud.language.api_responses import SyntaxResponse - from google.cloud.language.document import Encoding - from google.cloud.language.syntax import PartOfSpeech - - name1 = 'R-O-C-K' - name2 = 'USA' - content = name1 + ' in the ' + name2 - response = { - 'sentences': [ - { - 'text': { - 'content': 'R-O-C-K in the USA', - 'beginOffset': -1, - }, - 'sentiment': None, - } - ], - 'tokens': [ - { - 'text': { - 'content': 'R-O-C-K', - 'beginOffset': -1, - }, - 'partOfSpeech': { - 'aspect': 'ASPECT_UNKNOWN', - 'reciprocity': 'RECIPROCITY_UNKNOWN', - 'case': 'CASE_UNKNOWN', - 'mood': 'MOOD_UNKNOWN', - 'tag': 'NOUN', - 'person': 'PERSON_UNKNOWN', - 'number': 'SINGULAR', - 'tense': 'TENSE_UNKNOWN', - 'form': 'FORM_UNKNOWN', - 'proper': 'PROPER', - 'voice': 'VOICE_UNKNOWN', - 'gender': 'GENDER_UNKNOWN' - }, - 'dependencyEdge': { - 'headTokenIndex': 0, - 'label': 'ROOT', - }, - 'lemma': 'R-O-C-K', - }, - { - 'text': { - 'content': 'in', - 'beginOffset': -1, - }, - 'partOfSpeech': { - 'aspect': 'ASPECT_UNKNOWN', - 'reciprocity': 'RECIPROCITY_UNKNOWN', - 'case': 'CASE_UNKNOWN', - 'mood': 'MOOD_UNKNOWN', - 'tag': 'ADP', - 'person': 'PERSON_UNKNOWN', - 'number': 'NUMBER_UNKNOWN', - 'tense': 'TENSE_UNKNOWN', - 'form': 'FORM_UNKNOWN', - 'proper': 'PROPER_UNKNOWN', - 'voice': 'VOICE_UNKNOWN', - 'gender': 'GENDER_UNKNOWN' - }, - 'dependencyEdge': { - 'headTokenIndex': 0, - 'label': 'PREP', - }, - 'lemma': 'in', - }, - { - 'text': { - 'content': 'the', - 'beginOffset': -1, - }, - 'partOfSpeech': { - 'aspect': 'ASPECT_UNKNOWN', - 'reciprocity': 'RECIPROCITY_UNKNOWN', - 'case': 'CASE_UNKNOWN', - 'mood': 'MOOD_UNKNOWN', - 'tag': 'DET', - 'person': 'PERSON_UNKNOWN', - 'number': 'NUMBER_UNKNOWN', - 'tense': 'TENSE_UNKNOWN', - 'form': 'FORM_UNKNOWN', - 'proper': 'PROPER_UNKNOWN', - 'voice': 'VOICE_UNKNOWN', - 'gender': 'GENDER_UNKNOWN' - }, - 'dependencyEdge': { - 'headTokenIndex': 3, - 'label': 'DET', - }, - 'lemma': 'the', - }, - { - 'text': { - 'content': 'USA', - 'beginOffset': -1, - }, - 'partOfSpeech': { - 'aspect': 'ASPECT_UNKNOWN', - 'reciprocity': 'RECIPROCITY_UNKNOWN', - 'case': 'CASE_UNKNOWN', - 'mood': 'MOOD_UNKNOWN', - 'tag': 'NOUN', - 'person': 'PERSON_UNKNOWN', - 'number': 'SINGULAR', - 'tense': 'TENSE_UNKNOWN', - 'form': 'FORM_UNKNOWN', - 'proper': 'PROPER', - 'voice': 'VOICE_UNKNOWN', - 'gender': 'GENDER_UNKNOWN' - }, - 'dependencyEdge': { - 'headTokenIndex': 1, - 'label': 'POBJ', - }, - 'lemma': 'USA', - }, - ], - 'language': 'en-US', - } - client = make_mock_client(response) - document = self._make_one(client, content) - - syntax_response = document.analyze_syntax() - self.assertIsInstance(syntax_response, SyntaxResponse) - - tokens = syntax_response.tokens - self.assertEqual(len(tokens), 4) - token1 = tokens[0] - self._verify_token(token1, name1, PartOfSpeech.NOUN, name1) - token2 = tokens[1] - self._verify_token(token2, 'in', PartOfSpeech.ADPOSITION, 'in') - token3 = tokens[2] - self._verify_token(token3, 'the', PartOfSpeech.DETERMINER, 'the') - token4 = tokens[3] - self._verify_token(token4, name2, PartOfSpeech.NOUN, name2) - - # Verify the request. - expected = self._expected_data( - content, encoding_type=Encoding.get_default()) - client._connection.api_request.assert_called_once_with( - path='analyzeSyntax', method='POST', data=expected) - - def _verify_sentences(self, include_syntax, annotations): - from google.cloud.language.sentence import Sentence - - if include_syntax: - self.assertEqual(len(annotations.sentences), 1) - sentence = annotations.sentences[0] - self.assertIsInstance(sentence, Sentence) - self.assertEqual(sentence.content, ANNOTATE_CONTENT) - self.assertEqual(sentence.begin, -1) - else: - self.assertEqual(annotations.sentences, []) - - def _verify_tokens(self, annotations, token_info): - from google.cloud.language.syntax import Token - - self.assertEqual(len(annotations.tokens), len(token_info)) - for token, info in zip(annotations.tokens, token_info): - self.assertIsInstance(token, Token) - self.assertEqual(token.text_content, info[0]) - self.assertEqual(token.text_begin, -1) - self.assertEqual(token.part_of_speech.tag, info[1]) - self.assertEqual(token.edge_index, info[2]) - self.assertEqual(token.edge_label, info[3]) - self.assertEqual(token.lemma, info[0]) - - def _annotate_text_helper(self, include_sentiment, - include_entities, include_syntax): - from google.cloud.language.document import Annotations - from google.cloud.language.document import Encoding - from google.cloud.language.entity import EntityType - - token_info, sentences = _get_token_and_sentences(include_syntax) - entities = _get_entities(include_entities) - tokens = [_make_token_json(*info) for info in token_info] - response = { - 'sentences': sentences, - 'tokens': tokens, - 'entities': entities, - 'language': 'en-US', - } - if include_sentiment: - response['documentSentiment'] = { - 'score': ANNOTATE_SCORE, - 'magnitude': ANNOTATE_MAGNITUDE, - } - - client = make_mock_client(response) - document = self._make_one(client, ANNOTATE_CONTENT) - - annotations = document.annotate_text( - include_syntax=include_syntax, include_entities=include_entities, - include_sentiment=include_sentiment) - self.assertIsInstance(annotations, Annotations) - # Sentences - self._verify_sentences(include_syntax, annotations) - # Token - self._verify_tokens(annotations, token_info) - # Sentiment - if include_sentiment: - self._verify_sentiment(annotations.sentiment, - ANNOTATE_SCORE, ANNOTATE_MAGNITUDE) - else: - self.assertIsNone(annotations.sentiment) - # Entity - if include_entities: - self.assertEqual(len(annotations.entities), 1) - entity = annotations.entities[0] - self._verify_entity(entity, ANNOTATE_NAME, EntityType.LOCATION, - ANNOTATE_WIKI_URL, ANNOTATE_SALIENCE) - else: - self.assertEqual(annotations.entities, []) - - # Verify the request. - expected = self._expected_data( - ANNOTATE_CONTENT, encoding_type=Encoding.get_default(), - extract_sentiment=include_sentiment, - extract_entities=include_entities, - extract_syntax=include_syntax) - client._connection.api_request.assert_called_once_with( - path='annotateText', method='POST', data=expected) - - def test_annotate_text(self): - self._annotate_text_helper(True, True, True) - - def test_annotate_text_sentiment_only(self): - self._annotate_text_helper(True, False, False) - - def test_annotate_text_entities_only(self): - self._annotate_text_helper(False, True, False) - - def test_annotate_text_syntax_only(self): - self._annotate_text_helper(False, False, True) diff --git a/language/tests/unit/test_entity.py b/language/tests/unit/test_entity.py deleted file mode 100644 index 45c7b5dec3b4..000000000000 --- a/language/tests/unit/test_entity.py +++ /dev/null @@ -1,180 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - - -class TestEntity(unittest.TestCase): - - @staticmethod - def _get_target_class(): - from google.cloud.language.entity import Entity - - return Entity - - def _make_one(self, *args, **kw): - return self._get_target_class()(*args, **kw) - - def test_constructor_defaults(self): - from google.cloud.language.entity import Mention - from google.cloud.language.entity import MentionType - from google.cloud.language.entity import TextSpan - - name = 'Italian' - entity_type = 'LOCATION' - wiki_url = 'http://en.wikipedia.org/wiki/Italy' - metadata = { - 'foo': 'bar', - 'wikipedia_url': wiki_url, - } - salience = 0.19960518 - mentions = [Mention( - mention_type=MentionType.PROPER, - text=TextSpan(content='Italian', begin_offset=0), - )] - sentiment = None - entity = self._make_one(name, entity_type, metadata, - salience, mentions, sentiment) - self.assertEqual(entity.name, name) - self.assertEqual(entity.entity_type, entity_type) - self.assertEqual(entity.metadata, metadata) - self.assertEqual(entity.salience, salience) - self.assertEqual(entity.mentions, mentions) - - def test_from_api_repr(self): - from google.cloud.language.entity import EntityType - from google.cloud.language.entity import Mention - from google.cloud.language.entity import MentionType - from google.cloud.language.sentiment import Sentiment - - klass = self._get_target_class() - name = 'Italy' - entity_type = EntityType.LOCATION - salience = 0.223 - wiki_url = 'http://en.wikipedia.org/wiki/Italy' - mention1 = 'Italy' - mention2 = 'To Italy' - mention3 = 'From Italy' - payload = { - 'name': name, - 'type': entity_type, - 'salience': salience, - 'metadata': {'wikipedia_url': wiki_url}, - 'mentions': [ - {'text': {'content': mention1, 'beginOffset': 3}, - 'type': 'PROPER'}, - {'text': {'content': mention2, 'beginOffset': 5}, - 'type': 'PROPER'}, - {'text': {'content': mention3, 'beginOffset': 8}, - 'type': 'PROPER'}, - ], - } - entity = klass.from_api_repr(payload) - self.assertEqual(entity.name, name) - self.assertEqual(entity.entity_type, entity_type) - self.assertEqual(entity.salience, salience) - self.assertEqual(entity.metadata, {'wikipedia_url': wiki_url}) - - # Assert that we got back Mention objects for each mention. - self.assertIsInstance(entity.mentions[0], Mention) - self.assertIsInstance(entity.mentions[1], Mention) - self.assertIsInstance(entity.mentions[2], Mention) - - # Assert that the text (and string coercison) are correct. - self.assertEqual([str(i) for i in entity.mentions], - [mention1, mention2, mention3]) - - # Assert that the begin offsets are preserved. - self.assertEqual([i.text.begin_offset for i in entity.mentions], - [3, 5, 8]) - - # Assert that the mention types are preserved. - for mention in entity.mentions: - self.assertEqual(mention.mention_type, MentionType.PROPER) - - # Assert that there is no sentiment. - self.assertIs(entity.sentiment, None) - - # Assert that there *is* sentiment if it is provided. - payload_with_sentiment = dict(payload, sentiment={ - 'magnitude': 42, - 'score': 0.15, - }) - entity_with_sentiment = klass.from_api_repr(payload_with_sentiment) - self.assertIsInstance(entity_with_sentiment.sentiment, Sentiment) - sentiment = entity_with_sentiment.sentiment - self.assertEqual(sentiment.magnitude, 42) - self.assertAlmostEqual(sentiment.score, 0.15) - - -class TestMention(unittest.TestCase): - PAYLOAD = { - 'text': {'content': 'Greece', 'beginOffset': 42}, - 'type': 'PROPER', - } - - def test_constructor(self): - from google.cloud.language.entity import Mention - from google.cloud.language.entity import MentionType - from google.cloud.language.entity import TextSpan - - mention = Mention( - text=TextSpan(content='snails', begin_offset=90), - mention_type=MentionType.COMMON, - ) - - self.assertIsInstance(mention.text, TextSpan) - self.assertEqual(mention.text.content, 'snails') - self.assertEqual(mention.text.begin_offset, 90) - self.assertEqual(mention.mention_type, MentionType.COMMON) - - def test_from_api_repr(self): - from google.cloud.language.entity import Mention - from google.cloud.language.entity import MentionType - from google.cloud.language.entity import TextSpan - - mention = Mention.from_api_repr(self.PAYLOAD) - - self.assertIsInstance(mention, Mention) - self.assertIsInstance(mention.text, TextSpan) - self.assertEqual(mention.text.content, 'Greece') - self.assertEqual(mention.text.begin_offset, 42) - self.assertEqual(mention.mention_type, MentionType.PROPER) - - def test_dunder_str(self): - from google.cloud.language.entity import Mention - - mention = Mention.from_api_repr(self.PAYLOAD) - self.assertEqual(str(mention), 'Greece') - - -class TestTextSpan(unittest.TestCase): - def test_constructor(self): - from google.cloud.language.entity import TextSpan - - text = TextSpan(content='Winston Churchill', begin_offset=1945) - self.assertIsInstance(text, TextSpan) - self.assertEqual(text.content, str(text), 'Winston Churchill') - self.assertEqual(text.begin_offset, 1945) - - def test_from_api_repr(self): - from google.cloud.language.entity import TextSpan - - text = TextSpan.from_api_repr({ - 'beginOffset': 1953, - 'content': 'Queen Elizabeth', - }) - self.assertIsInstance(text, TextSpan) - self.assertEqual(text.content, str(text), 'Queen Elizabeth') - self.assertEqual(text.begin_offset, 1953) diff --git a/language/tests/unit/test_sentence.py b/language/tests/unit/test_sentence.py deleted file mode 100644 index 8c04f1ff4a78..000000000000 --- a/language/tests/unit/test_sentence.py +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright 2017 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - - -class TestSentence(unittest.TestCase): - - @staticmethod - def _get_target_class(): - from google.cloud.language.sentence import Sentence - - return Sentence - - def _make_one(self, *args, **kw): - return self._get_target_class()(*args, **kw) - - def test_constructor(self): - content = "All the king's horses." - begin = 11 - sentence = self._make_one(content, begin) - self.assertEqual(sentence.content, content) - self.assertEqual(sentence.begin, begin) - - def test_from_api_repr(self): - klass = self._get_target_class() - content = 'All the pretty horses.' - begin = -1 - payload = { - 'text': { - 'content': content, - 'beginOffset': begin, - }, - } - sentence = klass.from_api_repr(payload) - self.assertEqual(sentence.content, content) - self.assertEqual(sentence.begin, begin) - self.assertIsNone(sentence.sentiment) - - def test_from_api_repr_with_sentiment(self): - from google.cloud.language.sentiment import Sentiment - - klass = self._get_target_class() - content = 'All the pretty horses.' - begin = -1 - score = 0.5 - magnitude = 0.5 - payload = { - 'text': { - 'content': content, - 'beginOffset': begin, - }, - 'sentiment': { - 'score': score, - 'magnitude': magnitude, - } - } - sentence = klass.from_api_repr(payload) - self.assertEqual(sentence.content, content) - self.assertEqual(sentence.begin, begin) - self.assertIsInstance(sentence.sentiment, Sentiment) - self.assertEqual(sentence.sentiment.score, score) - self.assertEqual(sentence.sentiment.magnitude, magnitude) diff --git a/language/tests/unit/test_sentiment.py b/language/tests/unit/test_sentiment.py deleted file mode 100644 index b02254ed7592..000000000000 --- a/language/tests/unit/test_sentiment.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - - -class TestSentiment(unittest.TestCase): - - @staticmethod - def _get_target_class(): - from google.cloud.language.sentiment import Sentiment - - return Sentiment - - def _make_one(self, *args, **kw): - return self._get_target_class()(*args, **kw) - - def test_constructor(self): - score = 1 - magnitude = 2.3 - sentiment = self._make_one(score, magnitude) - self.assertEqual(sentiment.score, score) - self.assertEqual(sentiment.magnitude, magnitude) - - def test_from_api_repr(self): - klass = self._get_target_class() - score = -1 - magnitude = 5.55 - payload = { - 'score': score, - 'magnitude': magnitude, - } - sentiment = klass.from_api_repr(payload) - self.assertEqual(sentiment.score, score) - self.assertEqual(sentiment.magnitude, magnitude) diff --git a/language/tests/unit/test_syntax.py b/language/tests/unit/test_syntax.py deleted file mode 100644 index 387257353ccb..000000000000 --- a/language/tests/unit/test_syntax.py +++ /dev/null @@ -1,226 +0,0 @@ -# Copyright 2016 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - - -class TestPartOfSpeech(unittest.TestCase): - @staticmethod - def _get_target_class(): - from google.cloud.language.syntax import PartOfSpeech - - return PartOfSpeech - - def test_reverse(self): - klass = self._get_target_class() - for attr in dir(klass): - if attr.startswith('_'): - continue - if attr.islower(): - continue - value = getattr(klass, attr) - result = klass.reverse(value) - self.assertEqual(result, attr) - - def _make_one(self, *args, **kw): - return self._get_target_class()(*args, **kw) - - def test_constructor(self): - - aspect = 'ASPECT_UNKNOWN' - reciprocity = 'RECIPROCITY_UNKNOWN' - case = 'NOMINATIVE' - mood = 'MOOD_UNKNOWN' - tag = 'PRON' - person = 'FIRST' - number = 'SINGULAR' - tense = 'TENSE_UNKNOWN' - form = 'FORM_UNKNOWN' - proper = 'PROPER_UNKNOWN' - voice = 'VOICE_UNKNOWN' - gender = 'GENDER_UNKNOWN' - - pos = self._make_one(aspect, reciprocity, case, mood, tag, person, - number, tense, form, proper, voice, gender) - self.assertEqual(pos.aspect, aspect) - self.assertEqual(pos.reciprocity, reciprocity) - self.assertEqual(pos.case, case) - self.assertEqual(pos.mood, mood) - self.assertEqual(pos.tag, tag) - self.assertEqual(pos.person, person) - self.assertEqual(pos.number, number) - self.assertEqual(pos.tense, tense) - self.assertEqual(pos.form, form) - self.assertEqual(pos.proper, proper) - self.assertEqual(pos.voice, voice) - self.assertEqual(pos.gender, gender) - - def test_from_api_repr(self): - klass = self._get_target_class() - aspect = 'ASPECT_UNKNOWN' - reciprocity = 'RECIPROCITY_UNKNOWN' - case = 'NOMINATIVE' - mood = 'MOOD_UNKNOWN' - tag = 'PRON' - person = 'FIRST' - number = 'SINGULAR' - tense = 'TENSE_UNKNOWN' - form = 'FORM_UNKNOWN' - proper = 'PROPER_UNKNOWN' - voice = 'VOICE_UNKNOWN' - gender = 'GENDER_UNKNOWN' - payload = { - 'aspect': aspect, - 'reciprocity': reciprocity, - 'case': case, - 'mood': mood, - 'tag': tag, - 'person': person, - 'number': number, - 'tense': tense, - 'form': form, - 'proper': proper, - 'voice': voice, - 'gender': gender - } - pos = klass.from_api_repr(payload) - self.assertEqual(pos.aspect, aspect) - self.assertEqual(pos.reciprocity, reciprocity) - self.assertEqual(pos.case, case) - self.assertEqual(pos.mood, mood) - self.assertEqual(pos.tag, tag) - self.assertEqual(pos.person, person) - self.assertEqual(pos.number, number) - self.assertEqual(pos.tense, tense) - self.assertEqual(pos.form, form) - self.assertEqual(pos.proper, proper) - self.assertEqual(pos.voice, voice) - self.assertEqual(pos.gender, gender) - - -class TestToken(unittest.TestCase): - @staticmethod - def _get_target_class(): - from google.cloud.language.syntax import Token - - return Token - - def _make_one(self, *args, **kw): - return self._get_target_class()(*args, **kw) - - def test_constructor(self): - from google.cloud.language.syntax import PartOfSpeech - - text_content = 'All' - text_begin = -1 - aspect = 'ASPECT_UNKNOWN' - reciprocity = 'RECIPROCITY_UNKNOWN' - case = 'NOMINATIVE' - mood = 'MOOD_UNKNOWN' - tag = 'PRON' - person = 'FIRST' - number = 'SINGULAR' - tense = 'TENSE_UNKNOWN' - form = 'FORM_UNKNOWN' - proper = 'PROPER_UNKNOWN' - voice = 'VOICE_UNKNOWN' - gender = 'GENDER_UNKNOWN' - part_of_speech = PartOfSpeech(aspect, reciprocity, case, mood, tag, person, - number, tense, form, proper, voice, gender) - edge_index = 3 - edge_label = 'PREDET' - lemma = text_content - token = self._make_one(text_content, text_begin, part_of_speech, - edge_index, edge_label, lemma) - self.assertEqual(token.text_content, text_content) - self.assertEqual(token.text_begin, text_begin) - self.assertEqual(token.part_of_speech.aspect, part_of_speech.aspect) - self.assertEqual(token.part_of_speech.reciprocity, part_of_speech.reciprocity) - self.assertEqual(token.part_of_speech.case, part_of_speech.case) - self.assertEqual(token.part_of_speech.mood, part_of_speech.mood) - self.assertEqual(token.part_of_speech.tag, part_of_speech.tag) - self.assertEqual(token.part_of_speech.person, part_of_speech.person) - self.assertEqual(token.part_of_speech.number, part_of_speech.number) - self.assertEqual(token.part_of_speech.tense, part_of_speech.tense) - self.assertEqual(token.part_of_speech.form, part_of_speech.form) - self.assertEqual(token.part_of_speech.proper, part_of_speech.proper) - self.assertEqual(token.part_of_speech.voice, part_of_speech.voice) - self.assertEqual(token.part_of_speech.gender, part_of_speech.gender) - self.assertEqual(token.edge_index, edge_index) - self.assertEqual(token.edge_label, edge_label) - self.assertEqual(token.lemma, lemma) - - def test_from_api_repr(self): - klass = self._get_target_class() - text_content = 'pretty' - text_begin = -1 - aspect = 'ASPECT_UNKNOWN' - reciprocity = 'RECIPROCITY_UNKNOWN' - case = 'NOMINATIVE' - mood = 'MOOD_UNKNOWN' - tag = 'PRON' - person = 'FIRST' - number = 'SINGULAR' - tense = 'TENSE_UNKNOWN' - form = 'FORM_UNKNOWN' - proper = 'PROPER_UNKNOWN' - voice = 'VOICE_UNKNOWN' - gender = 'GENDER_UNKNOWN' - part_of_speech = { - 'aspect': aspect, - 'reciprocity': reciprocity, - 'case': case, - 'mood': mood, - 'tag': tag, - 'person': person, - 'number': number, - 'tense': tense, - 'form': form, - 'proper': proper, - 'voice': voice, - 'gender': gender - } - edge_index = 3 - edge_label = 'AMOD' - lemma = text_content - payload = { - 'text': { - 'content': text_content, - 'beginOffset': text_begin, - }, - 'partOfSpeech': part_of_speech, - 'dependencyEdge': { - 'headTokenIndex': edge_index, - 'label': edge_label, - }, - 'lemma': lemma, - } - token = klass.from_api_repr(payload) - self.assertEqual(token.text_content, text_content) - self.assertEqual(token.text_begin, text_begin) - self.assertEqual(token.part_of_speech.aspect, part_of_speech['aspect']) - self.assertEqual(token.part_of_speech.reciprocity, part_of_speech['reciprocity']) - self.assertEqual(token.part_of_speech.case, part_of_speech['case']) - self.assertEqual(token.part_of_speech.mood, part_of_speech['mood']) - self.assertEqual(token.part_of_speech.tag, part_of_speech['tag']) - self.assertEqual(token.part_of_speech.person, part_of_speech['person']) - self.assertEqual(token.part_of_speech.number, part_of_speech['number']) - self.assertEqual(token.part_of_speech.tense, part_of_speech['tense']) - self.assertEqual(token.part_of_speech.form, part_of_speech['form']) - self.assertEqual(token.part_of_speech.proper, part_of_speech['proper']) - self.assertEqual(token.part_of_speech.voice, part_of_speech['voice']) - self.assertEqual(token.part_of_speech.gender, part_of_speech['gender']) - self.assertEqual(token.edge_index, edge_index) - self.assertEqual(token.edge_label, edge_label) - self.assertEqual(token.lemma, lemma) From e49c5813f6ccee56e7974c6953a738933079f098 Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Fri, 15 Sep 2017 11:03:03 -0700 Subject: [PATCH 4/4] Natural Language 0.29.0 (#3972) --- language/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/setup.py b/language/setup.py index 139b9e936076..97e8b9dd4d5b 100644 --- a/language/setup.py +++ b/language/setup.py @@ -61,7 +61,7 @@ setup( name='google-cloud-language', - version='0.28.0', + version='0.29.0', description='Python Client for Google Cloud Natural Language', long_description=README, namespace_packages=[