Analyze text.

        Analyzes text, HTML, or a public webpage for the following features:
        - Categories
        - Concepts
        - Emotion
        - Entities
        - Keywords
        - Metadata
        - Relations
        - Semantic roles
        - Sentiment
        - Syntax (Experimental).

        :param Features features: Specific features to analyze the document for.
        :param str text: The plain text to analyze. One of the `text`, `html`, or `url`
        parameters is required.
        :param str html: The HTML file to analyze. One of the `text`, `html`, or `url`
        parameters is required.
        :param str url: The webpage to analyze. One of the `text`, `html`, or `url`
        parameters is required.
        :param bool clean: Set this to `false` to disable webpage cleaning. To learn more
        about webpage cleaning, see the [Analyzing
        webpages](https://cloud.ibm.com/docs/services/natural-language-understanding/analyzing-webpages.html)
        documentation.
        :param str xpath: An [XPath
        query](https://cloud.ibm.com/docs/services/natural-language-understanding/analyzing-webpages.html#xpath)
        to perform on `html` or `url` input. Results of the query will be appended to the
        cleaned webpage text before it is analyzed. To analyze only the results of the
        XPath query, set the `clean` parameter to `false`.
        :param bool fallback_to_raw: Whether to use raw HTML content if text cleaning
        fails.
        :param bool return_analyzed_text: Whether or not to return the analyzed text.
        :param str language: ISO 639-1 code that specifies the language of your text. This
        overrides automatic language detection. Language support differs depending on the
        features you include in your analysis. See [Language
        support](https://www.bluemix.net/docs/services/natural-language-understanding/language-support.html)
        for more information.
        :param int limit_text_characters: Sets the maximum number of characters that are
        processed by the service.
        :param dict headers: A `dict` containing the request headers
        :return: A `DetailedResponse` containing the result, headers and HTTP status code.
        :rtype: DetailedResponse

def analyze(self,
                features,
                text=None,
                html=None,
                url=None,
                clean=None,
                xpath=None,
                fallback_to_raw=None,
                return_analyzed_text=None,
                language=None,
                limit_text_characters=None,
                **kwargs):
        """
        Analyze text.

        Analyzes text, HTML, or a public webpage for the following features:
        - Categories
        - Concepts
        - Emotion
        - Entities
        - Keywords
        - Metadata
        - Relations
        - Semantic roles
        - Sentiment
        - Syntax (Experimental).

        :param Features features: Specific features to analyze the document for.
        :param str text: The plain text to analyze. One of the `text`, `html`, or `url`
        parameters is required.
        :param str html: The HTML file to analyze. One of the `text`, `html`, or `url`
        parameters is required.
        :param str url: The webpage to analyze. One of the `text`, `html`, or `url`
        parameters is required.
        :param bool clean: Set this to `false` to disable webpage cleaning. To learn more
        about webpage cleaning, see the [Analyzing
        webpages](https://cloud.ibm.com/docs/services/natural-language-understanding/analyzing-webpages.html)
        documentation.
        :param str xpath: An [XPath
        query](https://cloud.ibm.com/docs/services/natural-language-understanding/analyzing-webpages.html#xpath)
        to perform on `html` or `url` input. Results of the query will be appended to the
        cleaned webpage text before it is analyzed. To analyze only the results of the
        XPath query, set the `clean` parameter to `false`.
        :param bool fallback_to_raw: Whether to use raw HTML content if text cleaning
        fails.
        :param bool return_analyzed_text: Whether or not to return the analyzed text.
        :param str language: ISO 639-1 code that specifies the language of your text. This
        overrides automatic language detection. Language support differs depending on the
        features you include in your analysis. See [Language
        support](https://www.bluemix.net/docs/services/natural-language-understanding/language-support.html)
        for more information.
        :param int limit_text_characters: Sets the maximum number of characters that are
        processed by the service.
        :param dict headers: A `dict` containing the request headers
        :return: A `DetailedResponse` containing the result, headers and HTTP status code.
        :rtype: DetailedResponse
        """

        if features is None:
            raise ValueError('features must be provided')
        features = self._convert_model(features, Features)

        headers = {}
        if 'headers' in kwargs:
            headers.update(kwargs.get('headers'))
        sdk_headers = get_sdk_headers('natural-language-understanding', 'V1',
                                      'analyze')
        headers.update(sdk_headers)

        params = {'version': self.version}

        data = {
            'features': features,
            'text': text,
            'html': html,
            'url': url,
            'clean': clean,
            'xpath': xpath,
            'fallback_to_raw': fallback_to_raw,
            'return_analyzed_text': return_analyzed_text,
            'language': language,
            'limit_text_characters': limit_text_characters
        }

        url = '/v1/analyze'
        response = self.request(
            method='POST',
            url=url,
            headers=headers,
            params=params,
            json=data,
            accept_json=True)
        return response