1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import logging
- from 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
|