|
@@ -1,80 +0,0 @@
|
|
|
-import logging
|
|
|
-
|
|
|
-from kalliope.core.NeuronModule import NeuronModule, InvalidParameterException
|
|
|
-import wikipedia
|
|
|
-
|
|
|
-logging.basicConfig()
|
|
|
-logger = logging.getLogger("kalliope")
|
|
|
-
|
|
|
-
|
|
|
-class Wikipedia_searcher(NeuronModule):
|
|
|
- def __init__(self, **kwargs):
|
|
|
- # we don't need the TTS cache for this neuron
|
|
|
- cache = kwargs.get('cache', None)
|
|
|
- if cache is None:
|
|
|
- cache = False
|
|
|
- kwargs["cache"] = cache
|
|
|
- super(Wikipedia_searcher, self).__init__(**kwargs)
|
|
|
-
|
|
|
- # get parameters form the neuron
|
|
|
- self.query = kwargs.get('query', None)
|
|
|
- self.language = kwargs.get('language', None)
|
|
|
- self.sentences = kwargs.get('sentences', None)
|
|
|
-
|
|
|
- self.may_refer = None
|
|
|
- self.returncode = None
|
|
|
- self.message = None
|
|
|
-
|
|
|
- # check parameters
|
|
|
- if self._is_parameters_ok():
|
|
|
- # set the language
|
|
|
- wikipedia.set_lang(self.language)
|
|
|
- # do the summary search
|
|
|
- try:
|
|
|
- summary = wikipedia.summary(self.query, auto_suggest=True, sentences=self.sentences)
|
|
|
- # if we are here, no exception raised, we got a summary
|
|
|
- self.returncode = "SummaryFound"
|
|
|
- except wikipedia.exceptions.DisambiguationError, e:
|
|
|
- # Exception raised when a page resolves to a Disambiguation page.
|
|
|
- # The options property contains a list of titles of Wikipedia pages that the query may refer to.
|
|
|
- self.may_refer = e.options
|
|
|
- # Removing duplicates in lists.
|
|
|
- self.may_refer = list(set(self.may_refer))
|
|
|
- self.returncode = "DisambiguationError"
|
|
|
- summary = ""
|
|
|
- except wikipedia.exceptions.PageError:
|
|
|
- # Exception raised when no Wikipedia matched a query.
|
|
|
- self.returncode = "PageError"
|
|
|
- summary = ""
|
|
|
-
|
|
|
- self.message = {
|
|
|
- "summary": summary,
|
|
|
- "may_refer": self.may_refer,
|
|
|
- "returncode": self.returncode
|
|
|
- }
|
|
|
- logger.debug("Wikipedia returned message: %s" % str(self.message))
|
|
|
-
|
|
|
- self.say(self.message)
|
|
|
-
|
|
|
- def _is_parameters_ok(self):
|
|
|
- """
|
|
|
- Check if received parameters are ok to perform operations in the neuron
|
|
|
- :return: true if parameters are ok, raise an exception otherwise
|
|
|
-
|
|
|
- .. raises:: InvalidParameterException
|
|
|
- """
|
|
|
-
|
|
|
- if self.query is None:
|
|
|
- raise InvalidParameterException("Wikipedia needs a query")
|
|
|
- if self.language is None:
|
|
|
- raise InvalidParameterException("Wikipedia needs a language")
|
|
|
-
|
|
|
- valid_language = wikipedia.languages().keys()
|
|
|
- if self.language not in valid_language:
|
|
|
- raise InvalidParameterException("Wikipedia needs a valid language: %s" % valid_language)
|
|
|
-
|
|
|
- if self.sentences is not None:
|
|
|
- if not isinstance(self.sentences, int):
|
|
|
- raise InvalidParameterException("Number of sentences must be an integer")
|
|
|
-
|
|
|
- return True
|