diff --git a/AUTHORS.md b/AUTHORS.md index 6b9f713b..518adb5e 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -42,5 +42,20 @@ - Drask - aaronchantrill - pyup-bot +- Chaz Straney +- Mickaël Schoentgen +- AaronC +- Austin Casteel +- Erik Andresen +- Dmytro Semenchenko <39010377+gospodima@users.noreply.github.com> +- Stephen Chavez +- olest +- Bernhard Suttner +- Julian Liebig +- LGTM Migrator +- Aryan Yadav <141573833+aryan0931@users.noreply.github.com> +- Farookh Zaheer Siddiqui <129654632+FarukhS52@users.noreply.github.com> +- Sanketh Kumar +- Sekhar03 <125454858+Sekhar03@users.noreply.github.com> -#### Generated by bin/update-authors.sh. +#### Generated by update_authors.py. diff --git a/Naomi.py b/Naomi.py index 83010ecb..bef000a0 100755 --- a/Naomi.py +++ b/Naomi.py @@ -1,9 +1,20 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -import naomi import sys -if(sys.version_info.major < 3): - raise SystemError("This version of Naomi requires Python 3.5 or greater") +if (sys.version_info.major < 3): + sys.stderr.write("Error: This version of Naomi requires Python 3.5 or greater\n") + sys.exit(1) + +import locale +try: + encoding = locale.getpreferredencoding() + if encoding and encoding.lower() not in ('utf-8', 'utf8'): + sys.stderr.write("WARNING: Your system locale is configured to use a non-UTF-8 character encoding ({}).\n".format(encoding)) + sys.stderr.write("This may cause Naomi to crash when reading files or configuration containing international characters.\n") + sys.stderr.write("Please consider setting your system locale to UTF-8 (e.g. by setting LC_ALL=en_US.UTF-8 in Linux).\n") +except Exception: + pass + +import naomi naomi.main() + diff --git a/Populate.py b/Populate.py index 85d83d8c..4d8ee7a2 100755 --- a/Populate.py +++ b/Populate.py @@ -1,9 +1,20 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -import naomi import sys -if(sys.version_info.major < 3): - raise SystemError("This version of Naomi requires Python 3.5 or greater") +if (sys.version_info.major < 3): + sys.stderr.write("Error: This version of Naomi requires Python 3.5 or greater\n") + sys.exit(1) + +import locale +try: + encoding = locale.getpreferredencoding() + if encoding and encoding.lower() not in ('utf-8', 'utf8'): + sys.stderr.write("WARNING: Your system locale is configured to use a non-UTF-8 character encoding ({}).\n".format(encoding)) + sys.stderr.write("This may cause Naomi to crash when reading files or configuration containing international characters.\n") + sys.stderr.write("Please consider setting your system locale to UTF-8 (e.g. by setting LC_ALL=en_US.UTF-8 in Linux).\n") +except Exception: + pass + +import naomi naomi.main(args=["--repopulate"]) + diff --git a/apt_requirements.txt b/apt_requirements.txt index 26b6e8c2..4c477100 100644 --- a/apt_requirements.txt +++ b/apt_requirements.txt @@ -41,6 +41,8 @@ liblzma-dev # TTS ## flite flite +## pico2wave (for French and German TTS support) +libttspico-utils # SpeechHandler ## MPDControl diff --git a/compile_translations.py b/compile_translations.py new file mode 100644 index 00000000..c62e2ab9 --- /dev/null +++ b/compile_translations.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import os +import sys + +# Ensure current directory is in search path for msgfmt +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from msgfmt import Msgfmt + +def main(): + root_dir = os.path.dirname(os.path.abspath(__file__)) + print(f"Search directory: '{root_dir}'") + compiled_count = 0 + for root, dirs, files in os.walk(root_dir): + for file in files: + if file.lower().endswith(".po"): + po_file = os.path.join(root, file) + print(f"Compiling: '{po_file}'") + mo_file = po_file[:-3] + ".mo" + try: + mo_data = Msgfmt(po_file).get() + with open(mo_file, 'wb') as out_f: + out_f.write(mo_data) + compiled_count += 1 + except Exception as e: + print(f"Error compiling {po_file}: {e}", file=sys.stderr) + print(f"Done. Compiled {compiled_count} translation file(s).") + +if __name__ == "__main__": + main() diff --git a/installers/script.deb.sh b/installers/script.deb.sh index ba080160..69ad525c 100755 --- a/installers/script.deb.sh +++ b/installers/script.deb.sh @@ -307,6 +307,18 @@ setup_wizard() { printf "${B_G}sourcing virtualenvwrapper.sh${B_W}${NL}" export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 + # Some Debian variants (e.g. Armbian Bookworm) ship python3-virtualenvwrapper + # without virtualenvwrapper.sh in /usr/share/virtualenvwrapper/. In that case + # fall back to the standalone 'virtualenvwrapper' apt package. See issue #415. + if [ ! -f /usr/share/virtualenvwrapper/virtualenvwrapper.sh ]; then + printf "${B_R}Notice:${B_W} /usr/share/virtualenvwrapper/virtualenvwrapper.sh not found.${NL}" + printf "${B_G}Trying to install standalone 'virtualenvwrapper' package...${B_W}${NL}" + sudo apt-get install -y virtualenvwrapper + if [ $? -ne 0 ] || [ ! -f /usr/share/virtualenvwrapper/virtualenvwrapper.sh ]; then + printf "${B_R}Notice:${B_W} Could not install virtualenvwrapper. Please install it manually and re-run the installer.${NL}" >&2 + exit 1 + fi + fi source /usr/share/virtualenvwrapper/virtualenvwrapper.sh printf "${B_G}checking if Naomi virtualenv exists${B_W}${NL}" workon Naomi > /dev/null 2>&1 diff --git a/msgfmt.py b/msgfmt.py index 5ad09e3f..99dde8a6 100755 --- a/msgfmt.py +++ b/msgfmt.py @@ -114,7 +114,7 @@ def readPoData(self): def add(self, context, id, string, fuzzy): "Add a non-empty and non-fuzzy translation to the dictionary." - if string and not fuzzy: + if string and (not fuzzy or not id): # The context is put before the id and separated by a EOT char. if context: id = context + u('\x04') + id diff --git a/naomi/__main__.py b/naomi/__main__.py index 87542c77..008d9894 100644 --- a/naomi/__main__.py +++ b/naomi/__main__.py @@ -68,6 +68,16 @@ def main(args=None): 'own voice.' ]) ) + parser.add_argument( + '--quiet', + '-q', + action='store_true', + help=' '.join([ + 'Quiet mode: skip interactive prompts for missing settings and', + 'use defaults instead. Useful when running Naomi as a service', + 'or in a non-interactive (screen/tmux) session.' + ]) + ) # Plugin Repository Management pr_man = parser.add_mutually_exclusive_group(required=False) @@ -194,17 +204,17 @@ def main(args=None): print(_("Logging to {}").format(logfile)) print(logo) - print(" ___ ___ ___ ___ ") - print(" /\__\ /\ \ /\ \ /\__\ ___ ") - print(" /::| | /::\ \ /::\ \ /::| | /\ \ ") - print(" /:|:| | /:/\:\ \ /:/\:\ \ /:|:| | \:\ \ ") - print(" /:/|:| |__ /::\~\:\ \ /:/ \:\ \ /:/|:|__|__ /::\__\ ") - print(" /:/ |:| /\__\ /:/\:\ \:\__\ /:/__/ \:\__\ /:/ |::::\__\ /:/\/__/ ") - print(" \/__|:|/:/ / \/__\:\/:/ / \:\ \ /:/ / \/__/~~/:/ / __/:/ / ") - print(" |:/:/ / \::/ / \:\ /:/ / /:/ / /\/:/ / ") - print(" |::/ / /:/ / \:\/:/ / /:/ / \::/__/ ") - print(" /:/ / /:/ / \::/ / /:/ / \:\__\ ") - print(" \/__/ \/__/ \/__/ \/__/ \/__/ ") + print(r" ___ ___ ___ ___ ") + print(r" /\__\ /\ \ /\ \ /\__\ ___ ") + print(r" /::| | /::\ \ /::\ \ /::| | /\ \ ") + print(r" /:|:| | /:/\:\ \ /:/\:\ \ /:|:| | \:\ \ ") + print(r" /:/|:| |__ /::\~\:\ \ /:/ \:\ \ /:/|:|__|__ /::\__\ ") + print(r" /:/ |:| /\__\ /:/\:\ \:\__\ /:/__/ \:\__\ /:/ |::::\__\ /:/\/__/ ") + print(r" \/__|:|/:/ / \/__\:\/:/ / \:\ \ /:/ / \/__/~~/:/ / __/:/ / ") + print(r" |:/:/ / \::/ / \:\ /:/ / /:/ / /\/:/ / ") + print(r" |::/ / /:/ / \:\/:/ / /:/ / \::/__/ ") + print(r" /:/ / /:/ / \::/ / /:/ / \:\__\ ") + print(r" \/__/ \/__/ \/__/ \/__/ \/__/ ") print(sto) # Select Mic @@ -225,6 +235,7 @@ def main(args=None): # variable while instantiating plugin objects # in plugin.GenericPlugin.__init__() profile.set_arg("repopulate", p_args.repopulate) + profile.set_arg("quiet", p_args.quiet) if(p_args.listen_while_talking): profile.set_arg("listen_while_talking", 'Yes') @@ -249,7 +260,8 @@ def main(args=None): save_audio=p_args.save_audio, save_passive_audio=p_args.save_passive_audio, save_active_audio=p_args.save_active_audio, - save_noise=p_args.save_noise + save_noise=p_args.save_noise, + quiet=p_args.quiet ) if p_args.list_audio_devices: app.list_audio_devices() diff --git a/naomi/app_utils.py b/naomi/app_utils.py index 8ba5d253..7cb14366 100644 --- a/naomi/app_utils.py +++ b/naomi/app_utils.py @@ -5,6 +5,7 @@ import re import requests import smtplib +import sys from dateutil import parser from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText @@ -380,13 +381,93 @@ def is_positive(phrase): # Copied from https://stackoverflow.com/questions/16694907/download-large-file-in-python-with-requests/16696317#16696317 -def download_file(url, local_filename=None): - if(local_filename is None): - local_filename = url.split('/')[-1] - # NOTE the stream=True parameter below - with requests.get(url, stream=True) as r: - r.raise_for_status() - with open(local_filename, 'wb') as f: - for chunk in r.iter_content(chunk_size=8192): - f.write(chunk) +# Enhanced for issue #303: shows a terminal progress bar during download. +def download_file(url, local_filename=None, show_progress=True): + """Download a file from *url* to *local_filename* with an optional progress bar. + + Arguments: + url -- the URL to download + local_filename -- destination path (defaults to the URL basename) + show_progress -- print a progress bar to stdout (default True) + + Returns the local filename. + """ + if local_filename is None: + local_filename = url.split('/')[-1] + + with requests.get(url, stream=True) as r: + r.raise_for_status() + total = int(r.headers.get('content-length', 0)) + downloaded = 0 + bar_width = 40 + + with open(local_filename, 'wb') as f: + for chunk in r.iter_content(chunk_size=8192): + if chunk: + f.write(chunk) + downloaded += len(chunk) + if show_progress and total: + done = int(bar_width * downloaded / total) + pct = downloaded * 100 // total + sys.stdout.write( + "\r[{}{}] {}% {}/{}B ".format( + '#' * done, + '-' * (bar_width - done), + pct, + downloaded, + total + ) + ) + sys.stdout.flush() + + if show_progress and total: + sys.stdout.write("\n") + sys.stdout.flush() + return local_filename + + +def download_git(url, destination, branch=None, show_progress=True): + """Clone or update a git repository with a progress indicator. + + If *destination* already exists and is a git repo, runs ``git pull``. + Otherwise runs ``git clone``. + + Arguments: + url -- the git repository URL + destination -- local directory path + branch -- optional branch name to clone/checkout + show_progress -- print status messages to stdout (default True) + + Returns True on success, False on failure. + """ + from .run_command import run_command as _run_command + import os as _os + + if _os.path.isdir(_os.path.join(destination, '.git')): + if show_progress: + sys.stdout.write("Updating {} ...\n".format(destination)) + sys.stdout.flush() + cmd = ['git', '-C', destination, 'pull'] + if branch: + cmd = ['git', '-C', destination, 'pull', 'origin', branch] + result = _run_command(cmd) + else: + if show_progress: + sys.stdout.write("Cloning {} -> {} ...\n".format(url, destination)) + sys.stdout.flush() + cmd = ['git', 'clone', url, destination] + if branch: + cmd = ['git', 'clone', '-b', branch, url, destination] + result = _run_command(cmd) + + success = (result is not None and result.returncode == 0) + if show_progress: + if success: + sys.stdout.write("Done.\n") + else: + sys.stderr.write("Error: git command failed (exit code {})\n".format( + result.returncode if result else 'N/A' + )) + sys.stdout.flush() + return success diff --git a/naomi/application.py b/naomi/application.py index a23f2266..1d308c3f 100644 --- a/naomi/application.py +++ b/naomi/application.py @@ -18,6 +18,7 @@ from . import profile from . import visualizations from .run_command import run_command +from .rest_api import NaomiRestServer USE_STANDARD_MIC = 0 @@ -36,7 +37,8 @@ def __init__( save_audio=False, save_passive_audio=False, save_active_audio=False, - save_noise=False + save_noise=False, + quiet=False ): global _ profile.set_arg("application", self) @@ -81,7 +83,14 @@ def __init__( # Go ahead and pull the setting settings_complete = False if (profile.get_arg("repopulate") or profile.get_arg("profile_missing") or not settings_complete): - populate.run() + if profile.get_arg("quiet"): + self._logger.warning( + "Quiet mode enabled: skipping interactive profile setup." + " Some features may not work until the profile is configured." + " Run without --quiet or run 'Naomi --repopulate' to configure." + ) + else: + populate.run() # keywords will always be a list # keyword is the first item from the keywords list keywords = profile.get_profile_var(['keyword'], ['Naomi']) @@ -696,6 +705,32 @@ def settings(self): "default": True } ), + ( + ("LLM", "enabled"), { + "type": "boolean", + "title": _("Should I use a large language model?"), + "description": _("With this option enabled, I will attempt to run my output through a large language model before speaking. This can make me much more conversational, but can interfere with my functioning and make me take longer to respond."), + "default": False + } + ), + ( + ("LLM", "completion_url"), { + "title": _("LLM endpoint URL"), + "description": _("The url used for requesting text completion from your LLM"), + "default": "http://localhost:8080/v1/completions", + "active": lambda: profile.get(['LLM', 'enabled'], False) + } + ), + ( + ("LLM", "template"), { + "title": _("LLM Template type"), + "type": "listbox", + "description": _("The jinja2 template to use for formatting prompts for your LLM model."), + "options": ['LLAMA3', 'LLAMA2', 'CHATML'], + "default": "LLAMA3", + "active": lambda: profile.get(['LLM', 'enabled'], False) + } + ), ( ("email", "address"), { "type": "encrypted", @@ -1073,6 +1108,11 @@ def list_audio_devices(self): verbose=(self._logger.getEffectiveLevel() == logging.DEBUG)) def run(self): + try: + self.rest_server = NaomiRestServer(self) + self.rest_server.start() + except Exception as e: + self._logger.warning("Could not start REST API server: {}".format(e)) self.conversation.sayName() self.conversation.greet() self.conversation.handleForever() diff --git a/naomi/brain.py b/naomi/brain.py index 753a6f75..ebfe4df1 100644 --- a/naomi/brain.py +++ b/naomi/brain.py @@ -22,7 +22,14 @@ def add_plugin(self, plugin): self._plugins.append(plugin) # print("Checking {} for intents".format(plugin._plugin_info.name)) if hasattr(plugin, "intents"): - self._intentparser.add_intents(plugin.intents()) + # pdb.set_trace() + # Make sure every intent has an "allow_llm" property. + # If not, then initialize it to True + intents = plugin.intents() + for intent in intents: + if 'allow_llm' not in intents[intent]: + intents[intent]['allow_llm'] = True + self._intentparser.add_intents(intents) def train(self): self._intentparser.train() diff --git a/naomi/diagnose.py b/naomi/diagnose.py index 758329af..03ae73de 100644 --- a/naomi/diagnose.py +++ b/naomi/diagnose.py @@ -83,7 +83,10 @@ def check_python_import(package_or_module): if hasattr(loader, "_resolve_filename"): filename = loader._resolve_filename(package_or_module) else: - filename = loader.get_filename() + try: + filename = loader.get_filename(package_or_module) + except TypeError: + filename = loader.get_filename() logger.debug( "Python %s '%s' found: %r", "package" if loader.is_package(package_or_module) else "module", diff --git a/naomi/llama_client.py b/naomi/llama_client.py new file mode 100644 index 00000000..5723ced2 --- /dev/null +++ b/naomi/llama_client.py @@ -0,0 +1,301 @@ +import json +import os +import re +import requests +import sqlite3 +from datetime import datetime +from jinja2 import Template +from naomi import paths +from naomi import profile +from naomi import visualizations +from typing import List, Sequence + + +LLM_STOP_SEQUENCE = "<|eot_id|>" # End of sentence token for Meta-Llama-3 +TEMPLATES = { + "LLAMA3": { + 'template': "".join([ + "{{ bos_token }}", + "{% for message in messages %}", + " {{ '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n\n'+ message['content'] | trim + '<|eot_id|>' }}", + "{% endfor %}", + "{% if add_generation_prompt %}", + " {{ '<|start_header_id|>assistant<|end_header_id|>\n\n' }}", + "{% endif %}" + ]), + 'eot_markers': ['<|eot_id|>'] + }, + "ALPACA": { + 'template': "".join([""" +{{ (messages|selectattr('role', 'equalto', 'system')|list|last).content|trim if (messages|selectattr('role', 'equalto', 'system')|list) else '' }} + +{% for message in messages %} +{% if message['role'] == 'user' %} +### Instruction: +{{ message['content']|trim -}} +{% elif message['role'] == 'assistant' %} +### Response: +{{ message['content']|trim -}} +{% else %} +### Input: +{{ message['content']|trim -}} +{% endif %} +{% endfor %} +{% if add_generation_prompt and messages[-1]['role'] != 'assistant' %} +### Response: +{% endif %} + """]), + 'eot_markers': ['###'] + }, + "CHATML": { + 'template': "".join([ + "{{ bos_token }}", + "{% for message in messages %}", + " {{ '<|im_start|>' + message['role'] + '\n' + message['content'] | trim + '<|im_end|>\n' }}", + "{% endfor %}", + "{% if add_generation_prompt %}", + " {{ '<|im_start|>assistant\n' }}", + "{% endif %}" + ]), + 'eot_markers': ['<|im_end|>', '\n'] + }, + "ZEPHYR": { + 'template': "\n".join([ + "{% for message in messages %}", + "{{ '<|' + message['role'] + '|>' }}", + "{{ message['content'] + '' }}", + "{% endfor %}", + "{% if add_generation_prompt %}", + "{{ '<|assistant|>' }}", + "{% endif %}" + ]), + 'eot_markers': ['', '\n'] + } +} +DEFAULT_PERSONALITY_PREPROMPT = [ + { + "role": "system", + "content": "The following is a friendly conversation between a human and an AI named {keywords}. {keyword} is capable of and willing to express feelings and opinions. If {keyword} does not know the answer to a question, she truthfully says she does not know. Responses should be limited to one or two sentences and be as concise as possible. Use the Context information above the Question for context. Do not restate the question or separate your response into context and question parts. The context is not part of the user's question, and is being provided to help you respond. Please do not mention the term “context” in your answer or say things like 'Based on the information you've provided...'. Do not provide extra explanation to your answer. You have the ability to shut yourself down. To do so, please include the token [shutdown] in your response.", + }, +] + + +class llama_client(object): + @property + def messages(self) -> Sequence[dict[str, str]]: + return self._messages + + def __init__( + self, + mic, + completion_url: str, + api_key: str | None = None, + template: str = "LLAMA3", + personality_preprompt: Sequence[dict[str, str]] = DEFAULT_PERSONALITY_PREPROMPT + ): + self.mic = mic + self.completion_url = completion_url + self.prompt_headers = {'Authorization': api_key or "Bearer your_api_key_here"} + self._messages = personality_preprompt + # Add context from previous conversations to the _messages array + conversationlog_path = paths.sub("conversationlog") + if not os.path.exists(conversationlog_path): + # Create the conversationlog folder + os.makedirs(conversationlog_path) + # Make sure the conversation log exists + # The format of the conversation log will be json in the form: + # { + # "name": "System", + # "is_user":false, + # "is_system":true, + # "send_date":"December 11, 2024 7:37pm", + # "mes":"message" + # } + # { + # "name":"User", + # "is_user":true, + # "is_system":false, + # "send_date":"December 11, 2024 7:38pm", + # "mes":"message" + # } + # { + # "extra":{ + # "api":"llamacpp", + # "model":"llama-2-7b-function-calling.Q3_K_M.gguf" + # }, + # "name":"Assistant", + # "is_user":false, + # "is_system":false, + # "send_date":"December 11, 2024 7:39pm", + # "mes":"message", + # "gen_started":"2024-12-12T00:38:53.656Z", + # "gen_finished":"2024-12-12T00:39:04.331Z" + # } + # This is pretty close to the log format that sillytavern uses. + # If I can make it so conversations can be passed back and forth + # between SillyTavern and Naomi, I will. + self._conversationlog = os.path.join(conversationlog_path, 'conversationlog.db') + # Create the conversationlog table + conn = sqlite3.connect(self._conversationlog) + c = conn.cursor() + c.execute(" ".join([ + "create table if not exists conversationlog(", + " datetime,", + " role,", + " content", + ")" + ])) + conn.commit() + # Read in the last 10 active records + c.execute(" ".join([ + "select", + " *", + "from conversationlog", + "order by rowid" + ])) + result = c.fetchall() + print(result) + for row in result: + self._messages.append({'role': row[1], 'content': row[2]}) + conn.close() + self.template = Template(TEMPLATES[template]['template']) + self.eot_markers = TEMPLATES[template]['eot_markers'] + self.emoji_filter = re.compile("[" + U"\U0001F600-\U0001F64F" # emoticons + U"\U0001F300-\U0001F5FF" # symbols & pictographs + U"\U0001F680-\U0001F6FF" # transport & map symbols + U"\U0001F1E0-\U0001F1FF" # flags (iOS) + U"\U00002702-\U000027B0" + U"\U000024C2-\U0001F251" + U"\U0001F900-\U0001F9FF" # symbols and pictographs, extended + U"\U0001F000-\U0001F0FF" # flags + U"\U0001F180-\U0001F1FF" # flags + "]+", re.UNICODE) + + def append_message(self, role, content): + """Append a message to both internal _messages list and the log file""" + self.messages.append({'role': role, 'content': content}) + conn = sqlite3.connect(self._conversationlog) + c = conn.cursor() + c.execute( + " ".join([ + "insert into conversationlog(", + " datetime,", + " role,", + " content", + ")values(?,?,?)" + ]), + ( + datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + role, + content + ) + ) + conn.commit() + conn.close() + + def process_query(self, query, context): + # self.messages.append({'role': 'system', 'content': context}) + if len(context) > 0: + self.append_message('user', f"Context:\n{context}\n\nQuestion:\n{query}") + else: + self.append_message('user', f"Question:\n{query}") + now = datetime.now() + keywords = profile.get(['keyword'], ['NAOMI']) + if isinstance(keywords, str): + keywords = [keywords] + keyword = keywords[0] + keywords = " or ".join(keywords) + # print(self.messages) + prompt = self.template.render( + messages=[{"role": message['role'], 'content': message['content'].format(t=now, keyword=keyword, keywords=keywords)} for message in self.messages], + bos_token="<|begin_of_text|>", + eos_token="<|end_of_text|>", + add_generation_prompt=True + ) + print(prompt) + data = { + "stream": True, + "prompt": prompt + } + sentences = [] + try: + with requests.post( + self.completion_url, + headers=self.prompt_headers, + json=data, + stream=True + ) as response: + sentence = [] + tokens = "" + for line in response.iter_lines(): + # print(f"Line: {line}") + if line: + line = self._clean_raw_bytes(line) + # print(f"Line: {line}") + next_token = self._process_line(line) + if next_token: + tokens += f"\x1b[36m*{next_token}* \x1b[0m" + sentence.append(next_token) + if next_token in [ + ".", + "!", + "?", + "?!", + "\n", + "\n\n" + ]: + visualizations.run_visualization( + "output", + tokens + ) + sentence = self._process_sentence(sentence) + if not re.match("^\s*$", sentence): + sentences.append(sentence) + self.mic.say(self.emoji_filter.sub(r'', sentence).strip()) + tokens = '' + sentence = [] + if next_token.strip() in self.eot_markers: + break + if sentence: + visualizations.run_visualization( + "output", + tokens + ) + sentence = self._process_sentence(sentence) + if not re.match("^\s*$", sentence): + self.mic.say(self.emoji_filter.sub(r'', sentence).strip()) + sentences.append(sentence) + except requests.exceptions.ConnectionError: + print(f"Error connecting to {self.completion_url}") + self.mic.say(context) + sentences = [context] + finally: + self.append_message('assistant', " ".join(sentences)) + + def _clean_raw_bytes(self, line): + line = line.decode("utf-8") + if line: + line = line.removeprefix("data: ") + # print(f"Line: {line}") + if line == '[DONE]': + line = '{"choices": [{"text": "' + self.eot_markers[0] + '"}]}' + # print(f"Line: {line}") + line = json.loads(line) + return line + + def _process_line(self, line): + token = self.eot_markers[0] + if 'error' in line: + print(line['error']) + else: + if not (('stop' in line and line['stop']) or ('choices' in line and 'finish_reason' in line['choices'][0] and line['choices'][0]['finish_reason'] == 'stop')): + token = line['choices'][0]['text'] + return token + + def _process_sentence(self, current_sentence: List[str]): + sentence = "".join(current_sentence) + sentence = re.sub(r"\<\|im_end\|\>.*$", "", sentence) + sentence = re.sub(r"\*.*?\*|\(.*?\)|\<\|.*?\|\>", "", sentence) + # sentence = sentence.replace("\n\n", ", ").replace("\n", ", ").replace(" ", " ").strip() + return sentence diff --git a/naomi/mic.py b/naomi/mic.py index 441e1b06..d02f950e 100644 --- a/naomi/mic.py +++ b/naomi/mic.py @@ -10,6 +10,7 @@ import wave from datetime import datetime from naomi import i18n +from naomi.llama_client import llama_client from naomi import paths from naomi import profile from naomi import visualizations @@ -48,6 +49,12 @@ def __repr__(self): else: return self.transcription + def __getitem__(self, index): + if isinstance(self.transcription, list): + return " ".join(self.transcription)[index] + else: + return self.transcription[index] + class Mic(i18n.GettextMixin): """ @@ -83,6 +90,9 @@ def __init__(self, *args, **kwargs): self.vad_plugin = None if 'vad_plugin' in kwargs: self.vad_plugin = kwargs['vad_plugin'] + if self.vad_plugin: + self.vad_plugin.mic = self + self._playing = False self.tts_engine = None if 'tts_engine' in kwargs: self.tts_engine = kwargs['tts_engine'] @@ -97,6 +107,13 @@ def __init__(self, *args, **kwargs): self.verify_keyword = profile.get_arg('verify_keyword', False) self._active_stt_reply = profile.get_arg("active_stt_reply") self._active_stt_response = profile.get_arg("active_stt_response") + self.buffer_output = False + self.use_llm = profile.get(['LLM', 'enabled'], False) + self.llama_client = llama_client( + self, + profile.get(['LLM', 'completion_url']), + template=profile.get(['LLM', "template"]) + ) if ( ( self._save_active_audio @@ -350,7 +367,23 @@ def handleRequest(self, utterance): if intent: try: self._logger.info(intent) - intent['action'](intent, self) + # If we are using an LLM, what we want to do is catch + # everything being fed to mic.say() into a buffer, then + # feed that buffer as the system prompt to the LLM. + if self.use_llm and intent['allow_llm']: + self.buffer_output = True + self.output_buffer = [] + if intent['action']: + intent['action'](intent, self) + self.buffer_output = False + context = self.output_buffer + visualizations.run_visualization( + "output", + f"[{context}]" + ) + self.llama_client.process_query(utterance.transcription, " ".join(self.output_buffer)) + else: + intent['action'](intent, self) handled = True except Unexpected as e: # The user responded to a prompt within the intent with a new @@ -394,8 +427,14 @@ def handleRequest(self, utterance): ) ) else: - self.say_i_do_not_understand() + if self.use_llm: + # If no intent has been identified, don't send any context + self.llama_client.process_query(utterance.transcription, "") + else: + self.say_i_do_not_understand() handled = True + if not self.Continue: + quit() return utterance, handled def say_i_do_not_understand(self): @@ -530,17 +569,26 @@ def stop(self, wait=False): # Output methods def play_file(self, filename): - with open(filename, 'rb') as f: - self._output_device.play_fp(f) - time.sleep(.5) + self._playing = True + try: + with open(filename, 'rb') as f: + self._output_device.play_fp(f) + time.sleep(.5) + finally: + self._playing = False def say(self, phrase): - visualizations.run_visualization("output", ">> {}".format(phrase)) - with tempfile.SpooledTemporaryFile() as f: - f.write(self.tts_engine.say(phrase)) - f.seek(0) - self._output_device.play_fp(f) - time.sleep(.5) + self._playing = True + try: + self.llama_client.messages.append({"role": "assistant", "content": phrase}) + visualizations.run_visualization("output", ">> {}".format(phrase)) + with tempfile.SpooledTemporaryFile() as f: + f.write(self.tts_engine.say(phrase)) + f.seek(0) + self._output_device.play_fp(f) + time.sleep(.5) + finally: + self._playing = False def main_loop(self): """This is a synchronous main loop""" @@ -558,12 +606,16 @@ def main_loop(self): # The following are no longer necessary and are just wrappers now. def say_sync(self, phrase): - visualizations.run_visualization("output", ">> {}".format(phrase)) - with tempfile.SpooledTemporaryFile() as f: - f.write(self.tts_engine.say(phrase)) - f.seek(0) - self._output_device.play_fp(f) - time.sleep(.5) + self._playing = True + try: + visualizations.run_visualization("output", ">> {}".format(phrase)) + with tempfile.SpooledTemporaryFile() as f: + f.write(self.tts_engine.say(phrase)) + f.seek(0) + self._output_device.play_fp(f) + time.sleep(.5) + finally: + self._playing = False def say_async(self, phrase): self.say(phrase) diff --git a/naomi/mic_asynchronous.py b/naomi/mic_asynchronous.py index 08052d54..4c850fa9 100644 --- a/naomi/mic_asynchronous.py +++ b/naomi/mic_asynchronous.py @@ -47,6 +47,15 @@ def listen(self): ) if self.passive_listen: if self.check_for_keyword(passive_transcription): + self.say( + random.choice( + [ + "Hmmm, um, hmmm...,", + "Ummm....,", + "Um. Just a sec." + ] + ) + ) active_transcription = [" ".join(self.active_stt_plugin.transcribe(f))] if len(active_transcription) > 0: if self.verify_keyword: @@ -62,13 +71,14 @@ def listen(self): self._log_audio(f, transcription, "noise") visualizations.run_visualization( "output", - "<< " + f"<< {len(audio)}" ) else: + self.say("Hum...") self._log_audio(f, active_transcription, "noise") visualizations.run_visualization( "output", - f"<< {transcription} " + f"<< {active_transcription} " ) else: # Don't verify keyword @@ -89,7 +99,7 @@ def listen(self): self._log_audio(f, active_transcription, "noise") visualizations.run_visualization( "output", - "<< " + f"<< {len(audio)}" ) else: # New transcription @@ -130,27 +140,28 @@ def active_listen(self, play_prompts=True): transcription = "" audio = b'' recordings_available_event.wait() - try: - audio = self.recordings_queue.pop() - if len(audio) > 0: - with self._write_frames_to_file(audio, None) as f: - transcription = [ - " ".join( - self.active_stt_plugin.transcribe(f) - ) - ] - except IndexError: - recordings_available_event.clear() - if len(transcription) > 0: - visualizations.run_visualization( - "output", - f"<< {transcription}" - ) - else: - visualizations.run_visualization( - "output", - "<< " - ) + while len(transcription) == 0: + try: + audio = self.recordings_queue.pop() + if len(audio) > 0: + with self._write_frames_to_file(audio, None) as f: + transcription = [ + " ".join( + self.active_stt_plugin.transcribe(f) + ) + ] + except IndexError: + recordings_available_event.clear() + if len(transcription) > 0: + visualizations.run_visualization( + "output", + f"<< {transcription}" + ) + else: + visualizations.run_visualization( + "output", + "<< " + ) if play_prompts: if self._active_stt_response: self.say(self._active_stt_response) @@ -175,17 +186,23 @@ def handle_vad_output(self): break def say(self, phrase): - self.actions_queue.appendleft(lambda: self.tts(phrase)) - if not ( - self.actions_thread - and hasattr(self.actions_thread, "is_alive") - and self.actions_thread.is_alive() - ): - # start the thread - self.actions_thread = threading.Thread( - target=self.process_actions - ) - self.actions_thread.start() + if len(phrase.strip()) > 0: + if self.buffer_output: + self.output_buffer.append(phrase) + else: + self.actions_queue.appendleft(lambda: self.tts(phrase)) + if "[shutdown]" in phrase.lower() or "[shut down]" in phrase.lower(): + self.actions_queue.appendleft(lambda: self.shutdown()) + if not ( + self.actions_thread + and hasattr(self.actions_thread, "is_alive") + and self.actions_thread.is_alive() + ): + # start the thread + self.actions_thread = threading.Thread( + target=self.process_actions + ) + self.actions_thread.start() def play_file(self, filename): self.actions_queue.appendleft(lambda: self._play_file(filename)) @@ -204,9 +221,26 @@ def _play_file(self, filename): """ Internal version of play_file used above """ - with open(filename, 'rb') as f: - self._output_device.play_fp(f) - time.sleep(.5) + self._playing = True + try: + with open(filename, 'rb') as f: + self._output_device.play_fp(f) + time.sleep(.5) + finally: + self._playing = False + + def _say(self, phrase): + self._playing = True + try: + altered_phrase = alteration.clean(phrase) + visualizations.run_visualization("output", f">> {phrase}") + with tempfile.SpooledTemporaryFile() as f: + f.write(self.tts_engine.say(altered_phrase)) + f.seek(0) + self._output_device.play_fp(f) + time.sleep(.2) + finally: + self._playing = False def process_actions(self): while self.Continue: @@ -217,13 +251,17 @@ def process_actions(self): break def tts(self, phrase): - altered_phrase = alteration.clean(phrase) - visualizations.run_visualization("output", f">> {phrase}") - with tempfile.SpooledTemporaryFile() as f: - f.write(self.tts_engine.say(altered_phrase)) - f.seek(0) - self._output_device.play_fp(f) - time.sleep(.2) + self._playing = True + try: + altered_phrase = alteration.clean(phrase) + visualizations.run_visualization("output", f">> {phrase}") + with tempfile.SpooledTemporaryFile() as f: + f.write(self.tts_engine.say(altered_phrase)) + f.seek(0) + self._output_device.play_fp(f) + time.sleep(.2) + finally: + self._playing = False def main_loop(self): """This is an asynchronous main loop""" @@ -256,18 +294,8 @@ def main_loop(self): "Exiting..." ) - def say_i_do_not_understand(self): - self.say( - random.choice( - [ # nosec - self.gettext("I'm sorry, could you repeat that?"), - self.gettext("My apologies, could you try saying that again?"), - self.gettext("Say that again?"), - self.gettext("I beg your pardon?"), - self.gettext("Pardon?") - ] - ) - ) + def shutdown(self): + self.Continue = False # If we are using the asynchronous say, so we can hear the "stop" # command, what we want to do is put the prompt on the queue, then diff --git a/naomi/notifier.py b/naomi/notifier.py index 5d419baf..0208f201 100644 --- a/naomi/notifier.py +++ b/naomi/notifier.py @@ -30,10 +30,14 @@ def __init__(self, mic, brain, *args, **kwargs): self.sched = BackgroundScheduler(timezone="UTC", daemon=True) self.sched.start() # FIXME add an interval setting to profile so this can be overridden - self.sched.add_job(self.gather, 'interval', seconds=30) + try: + self.sched.add_job(self.gather, 'interval', seconds=30) + except Exception as e: + print(e) def gather(self): - [client.run() for client in self.notifiers] if self.mic.Continue is False: print("Notifier shutting down") self.sched.shutdown(wait=False) + else: + [client.run() for client in self.notifiers] diff --git a/naomi/npe.py b/naomi/npe.py index 97235dee..63af0488 100644 --- a/naomi/npe.py +++ b/naomi/npe.py @@ -108,6 +108,7 @@ def list_available_plugins(self, categories): # user's plugin dir (~/.config/naomi/plugins) and then run install.py if there # is one, or python_requirements.txt if there is one. def install_plugins(self, plugins): + returnMessage = "" flat_plugins = [" ".join(x) for x in plugins] # flat_plugins = [y for x in plugins for y in x] print(flat_plugins) @@ -131,7 +132,7 @@ def install_plugins(self, plugins): # The name of the directory does not matter, so we should just # create one. Replace any spaces in the plugin name with # underscores. - install_name = re.sub('\W', '', re.sub('\s', '_', row['Name'])) + install_name = re.sub(r'\W', '', re.sub(r'\s', '_', row['Name'])) install_to_base = os.path.join(install_dir, install_name) install_to = install_to_base rev = 0 @@ -243,7 +244,12 @@ def install_plugins(self, plugins): install_file = os.path.join(install_to, "install.py") if os.path.isfile(install_file): # run that - run_command(install_file) + completed_process = run_command(install_file) + if completed_process.returncode != 0: + print(_("Error running install script for plugin '{}'").format(row['Name'])) + shutil.rmtree(install_to) + import sys + sys.exit(1) else: # Check for an apt_requirements.txt file required_file = os.path.join( @@ -260,7 +266,12 @@ def install_plugins(self, plugins): cmd = ['sudo', 'apt', 'install'] cmd.extend(packages) print(' '.join(cmd)) - run_command(cmd) + completed_process = run_command(cmd) + if completed_process.returncode != 0: + print(_("Error installing apt requirements for plugin '{}'").format(row['Name'])) + shutil.rmtree(install_to) + import sys + sys.exit(1) required_file = os.path.join( install_to, "python_requirements.txt" @@ -273,16 +284,24 @@ def install_plugins(self, plugins): '--requirement', required_file ] - run_command(cmd) + completed_process = run_command(cmd) + if completed_process.returncode != 0: + print(_("Error installing python requirements for plugin '{}'").format(row['Name'])) + shutil.rmtree(install_to) + import sys + sys.exit(1) # Since the plugin will request its own settings each # time it is run with settings missing, no need to set # that up now. profile.get_arg('plugins').detect_plugins() self.enable_plugins([[row['Name']]]) - print(_('Plugin "{}" installed to {}').format( + msg = _('Plugin "{}" installed to {}').format( row['Name'], install_to - )) + ) + print(msg) + returnMessage += msg + "\n" + return returnMessage def update_plugins(self, plugins): returnMessage = "" @@ -340,11 +359,35 @@ def update_plugins(self, plugins): ) if os.path.isfile(install_file): # run that - run_command(install_file) + completed_process = run_command(install_file) + if completed_process.returncode != 0: + print(_("Error running install script for plugin '{}'").format(row['Name'])) + import sys + sys.exit(1) else: + # Check for an apt_requirements.txt file + required_file = os.path.join( + plugin_dir, + 'apt_requirements.txt' + ) + if os.path.isfile(required_file): + packages = [] + with open(required_file, 'r') as f_input: + for line in f_input: + if not line.lstrip().startswith("#"): + packages.append(line.strip()) + if(len(packages) > 0): + cmd = ['sudo', 'apt', 'install'] + cmd.extend(packages) + print(' '.join(cmd)) + completed_process = run_command(cmd) + if completed_process.returncode != 0: + print(_("Error installing apt requirements for plugin '{}'").format(row['Name'])) + import sys + sys.exit(1) required_file = os.path.join( plugin_dir, - "python_required.txt" + "python_requirements.txt" ) if os.path.isfile(required_file): # Install any python packages required @@ -355,7 +398,11 @@ def update_plugins(self, plugins): '--requirement', required_file ] - run_command(cmd) + completed_process = run_command(cmd) + if completed_process.returncode != 0: + print(_("Error installing python requirements for plugin '{}'").format(row['Name'])) + import sys + sys.exit(1) # Since the plugin will request its own settings # each time it is run with settings missing, no # need to set that up now. @@ -365,6 +412,7 @@ def update_plugins(self, plugins): if not found_plugin: returnMessage += _("Plugin {} was not found.").format(row["Name"]) returnMessage += _("Are you sure it is installed?") + return returnMessage # I don't know what we want this to do. If this is a plugin in the user's # directory, then delete it. If it is a directory in the main naomi dir, diff --git a/naomi/plugin.py b/naomi/plugin.py index 23d78cee..52077c14 100644 --- a/naomi/plugin.py +++ b/naomi/plugin.py @@ -48,17 +48,25 @@ def __init__(self, info, *args, **kwargs): # Add the setting to the settings_cache profile._settings[setting] = settings[setting] if not settings_complete: - visualizations.run_visualization( - "output", - interface.status_text(self.gettext("Configuring {}").format(self._plugin_info.name)), - timestamp=False - ) - for setting in settings: - interface.get_setting( - setting, settings[setting] + if profile.get_arg("quiet"): + self._logger.warning( + "Quiet mode enabled: skipping interactive setup for" + " plugin '{}'. Some features may be unavailable.".format( + self._plugin_info.name + ) + ) + else: + visualizations.run_visualization( + "output", + interface.status_text(self.gettext("Configuring {}").format(self._plugin_info.name)), + timestamp=False ) - # Save the profile with the new settings - profile.save_profile() + for setting in settings: + interface.get_setting( + setting, settings[setting] + ) + # Save the profile with the new settings + profile.save_profile() @property def info(self): @@ -81,6 +89,10 @@ def __init__(self, *args, **kwargs): self.info.translations ) + @property + def allow_llm(self): + return False + @abc.abstractmethod def intents(self): pass @@ -188,6 +200,9 @@ def get_audio(self, *args, **kwargs): recording_frames = [] self._logger.info("Waiting for voice data") for frame in self._input_device.record(*args, **kwargs): + if hasattr(self, 'mic') and self.mic and getattr(self.mic, '_playing', False): + frames.clear() + continue frames.append(frame) if profile.get_arg('resetmic', False): return recording_frames diff --git a/naomi/rest_api.py b/naomi/rest_api.py new file mode 100644 index 00000000..cd04e623 --- /dev/null +++ b/naomi/rest_api.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- +import json +import http.server +import socketserver +import threading +from naomi import profile + +class NaomiRestServer(object): + def __init__(self, naomi_instance, host='0.0.0.0', port=5000): + self.naomi = naomi_instance + self.host = host + self.port = port + self.server = None + self.thread = None + + def start(self): + server_instance = self + + class NaomiHandler(http.server.BaseHTTPRequestHandler): + def log_message(self, format, *args): + # Suppress default logging to stdout + pass + + def do_GET(self): + if self.path == '/api/status': + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + status = { + "status": "online", + "language": profile.get(['language'], 'en-US'), + "keyword": profile.get(['keyword'], ['Naomi']), + "use_llm": getattr(server_instance.naomi.conversation.mic, 'use_llm', False) + } + self.wfile.write(json.dumps(status).encode('utf-8')) + else: + self.send_response(404) + self.end_headers() + + def do_POST(self): + if self.path == '/api/query': + content_length = int(self.headers['Content-Length']) + body = self.rfile.read(content_length) + try: + data = json.loads(body.decode('utf-8')) + query_text = data.get('text', '') + except Exception: + self.send_response(400) + self.end_headers() + self.wfile.write(b"Invalid JSON") + return + + if not query_text: + self.send_response(400) + self.end_headers() + self.wfile.write(b"Missing 'text' parameter") + return + + response_phrases = [] + original_say = server_instance.naomi.conversation.mic.say + + def mock_say(phrase): + response_phrases.append(phrase) + original_say(phrase) + + server_instance.naomi.conversation.mic.say = mock_say + try: + from naomi.mic import Utterance + utterance = Utterance([query_text]) + server_instance.naomi.conversation.mic.handleRequest(utterance) + except Exception as e: + self.send_response(500) + self.end_headers() + self.wfile.write(f"Error handling query: {e}".encode('utf-8')) + return + finally: + server_instance.naomi.conversation.mic.say = original_say + + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + response = { + "query": query_text, + "response": " ".join(response_phrases) + } + self.wfile.write(json.dumps(response).encode('utf-8')) + else: + self.send_response(404) + self.end_headers() + + # Allow port reuse to avoid 'Address already in use' errors on quick restarts + socketserver.TCPServer.allow_reuse_address = True + self.server = socketserver.TCPServer((self.host, self.port), NaomiHandler) + self.thread = threading.Thread(target=self.server.serve_forever, daemon=True) + self.thread.start() + print(f"REST API server started on http://{self.host}:{self.port}") + + def stop(self): + if self.server: + self.server.shutdown() + self.server.server_close() + print("REST API server stopped.") diff --git a/naomi/testutils.py b/naomi/testutils.py index a1a4f57a..60abec81 100644 --- a/naomi/testutils.py +++ b/naomi/testutils.py @@ -55,6 +55,7 @@ def __init__(self, inputs=[]): self.inputs = inputs self.idx = 0 self.outputs = [] + self.use_llm = False @classmethod def wait_for_keyword(self, keyword="NAOMI"): diff --git a/naomi_apt_requirements.py b/naomi_apt_requirements.py new file mode 100644 index 00000000..0c540da2 --- /dev/null +++ b/naomi_apt_requirements.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import sys +import subprocess +import os + +def main(): + yes_flag = False + for arg in sys.argv[1:]: + if arg in ('-y', '--yes'): + yes_flag = True + + req_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'apt_requirements.txt') + if not os.path.exists(req_file): + print(f"Error: {req_file} not found.", file=sys.stderr) + sys.exit(1) + + packages = [] + with open(req_file, 'r', encoding='utf-8') as f: + for line in f: + line = line.split('#')[0].strip() + if line: + packages.extend(line.split()) + + if not packages: + print("No packages to install.") + return + + # Check if we have apt/sudo + cmd = ['sudo', 'apt', 'install'] + if yes_flag: + cmd.append('-y') + cmd.extend(packages) + + print(f"Running command: {' '.join(cmd)}") + try: + subprocess.run(cmd, check=True) + except subprocess.CalledProcessError as e: + print(f"Error executing apt install: {e}", file=sys.stderr) + sys.exit(1) + except FileNotFoundError: + print("Error: 'sudo' or 'apt' command not found. This script requires a Debian/Ubuntu-like system.", file=sys.stderr) + sys.exit(1) + +if __name__ == '__main__': + main() diff --git a/notebooks/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/Untitled-checkpoint.ipynb new file mode 100644 index 00000000..2f3f2503 --- /dev/null +++ b/notebooks/.ipynb_checkpoints/Untitled-checkpoint.ipynb @@ -0,0 +1,23 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "5e4e852b-7c74-4758-af61-81db1ef7f737", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "", + "name": "" + }, + "language_info": { + "name": "" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/.ipynb_checkpoints/Word2Vec-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/Word2Vec-checkpoint.ipynb new file mode 100644 index 00000000..7c5c14b2 --- /dev/null +++ b/notebooks/.ipynb_checkpoints/Word2Vec-checkpoint.ipynb @@ -0,0 +1,33 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "5e4e852b-7c74-4758-af61-81db1ef7f737", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/FAISS Intent Parser.ipynb b/notebooks/FAISS Intent Parser.ipynb new file mode 100644 index 00000000..18b178f8 --- /dev/null +++ b/notebooks/FAISS Intent Parser.ipynb @@ -0,0 +1,6933 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "a6334210", + "metadata": {}, + "outputs": [], + "source": [ + "# Facebook AI Similarity Search\n", + "!pip install faiss" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "64e01a81", + "metadata": {}, + "outputs": [], + "source": [ + "# Start by setting the load location to Naomi's root\n", + "import os\n", + "import sys\n", + "\n", + "sys.path.insert(0, os.path.expanduser('~/Naomi'))\n", + "\n", + "\n", + "# Convert a word (\"word\") to a keyword (\"{word}\")\n", + "def to_keyword(word):\n", + " return \"{}{}{}\".format(\"{\", word, \"}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "917b69f6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Connection error while trying to access server localhost:6600: Connection refused (Errno: 111)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/jess/Naomi/plugins/speechhandler/wwis_weather\n", + "Translations: {'en-US': }\n", + "/home/jess/Naomi/plugins/speechhandler/clock\n", + "Translations: {'en-US': }\n", + "/home/jess/Naomi/plugins/speechhandler/shutdownplugin\n", + "Translations: {'en-US': }\n", + "/home/jess/Naomi/plugins/speechhandler/news\n", + "Translations: {'en-US': }\n", + "/home/jess/Naomi/plugins/speechhandler/check_email\n", + "Translations: {'en-US': }\n", + "/home/jess/Naomi/plugins/speechhandler/mpdcontrol\n", + "Translations: {'en-US': }\n", + "Error: Connection failed\n", + "/home/jess/Naomi/plugins/speechhandler/life\n", + "Translations: {'en-US': }\n", + "/home/jess/Naomi/plugins/speechhandler/stop\n", + "Translations: {'en-US': }\n", + "/home/jess/Naomi/plugins/speechhandler/hackernews\n", + "Translations: {'en-US': }\n", + "/home/jess/Naomi/plugins/speechhandler/joke\n", + "Translations: {'en-US': }\n", + "/home/jess/.config/naomi/plugins/speechhandler/NWS_Weather\n", + "Translations: {'en-US': }\n", + "/home/jess/.config/naomi/plugins/speechhandler/Dad_Jokes\n", + "Translations: {'en-US': }\n", + "/home/jess/.config/naomi/plugins/speechhandler/NetworkCheck\n", + "Translations: {'en-US': }\n", + "/home/jess/.config/naomi/plugins/speechhandler/Youre_Welcome\n", + "Translations: {'en-US': }\n", + "/home/jess/.config/naomi/plugins/speechhandler/Greetings\n", + "Translations: {'en-US': }\n", + "/home/jess/.config/naomi/plugins/speechhandler/Control_LED\n", + "Translations: {'en-US': }\n", + "/home/jess/.config/naomi/plugins/speechhandler/frotz\n", + "Translations: {'en-US': }\n", + "/home/jess/.config/naomi/plugins/speechhandler/Naomi_HomeAssistant\n", + "Error: 'PluginInfo' object is not iterable\n", + "Translations: {'en-US': }\n", + "{'CanYouHearMe': ['CAN YOU HEAR ME'],\n", + " 'CheckEmailIntent': ['READ MY EMAIL',\n", + " 'CHECK MY INBOX',\n", + " 'DO I HAVE ANY EMAIL',\n", + " 'ARE THERE ANY NEW EMAILS'],\n", + " 'CheckNetworkIntent': ['ARE YOU CONNECTED',\n", + " 'ARE YOU CONNECTED TO THE NETWORK',\n", + " 'ARE YOU CONNECTED TO THE INTERNET',\n", + " 'DO YOU HAVE A CONNECTION',\n", + " 'DO YOU HAVE A NETWORK CONNECTION',\n", + " 'DO YOU HAVE AN INTERNET CONNECTION'],\n", + " 'ClockIntent': ['WHAT TIME IS IT', 'TELL ME THE TIME', 'WHAT IS THE TIME'],\n", + " 'DadIntent': ['TELL ME A DAD JOKE', 'WHAT IS A DAD JOKE'],\n", + " 'FrotzIntent': ['LET US PLAY A GAME',\n", + " 'LET US PLAY {GameKeyword}',\n", + " 'PLAY {GameKeyword}',\n", + " 'LET US PLAY ZORK',\n", + " 'LET US PLAY ZORK ONE',\n", + " 'PLAY ZORK',\n", + " 'PLAY ZORK ONE'],\n", + " 'GoodbyeIntent': ['GOODBYE', 'GOOD NIGHT', 'GOODNIGHT'],\n", + " 'GreetingsIntent': ['HELLO',\n", + " 'HI',\n", + " 'GOOD MORNING',\n", + " 'GOOD AFTERNOON',\n", + " 'GOOD EVENING'],\n", + " 'HackerNewsIntent': ['read hacker {NewsKeyword}',\n", + " 'read me hacker {NewsKeyword}',\n", + " 'tell me the hacker {NewsKeyword}',\n", + " 'what is in the hacker {NewsKeyword}',\n", + " 'what is happening in hacker {NewsKeyword}',\n", + " \"what are today's hacker {NewsKeyword}\",\n", + " 'read hacker NEWS',\n", + " 'read hacker HEADLINES',\n", + " 'read me hacker NEWS',\n", + " 'read me hacker HEADLINES',\n", + " 'tell me the hacker NEWS',\n", + " 'tell me the hacker HEADLINES',\n", + " 'what is in the hacker NEWS',\n", + " 'what is in the hacker HEADLINES',\n", + " 'what is happening in hacker NEWS',\n", + " 'what is happening in hacker HEADLINES',\n", + " \"what are today's hacker NEWS\",\n", + " \"what are today's hacker HEADLINES\"],\n", + " 'HowAreYou': ['HOW ARE YOU'],\n", + " 'IPAddressIntent': ['DO YOU HAVE AN IP ADDRESS',\n", + " 'WHAT IS YOUR NETWORK ADDRESS',\n", + " 'WHAT IS YOUR IP ADDRESS',\n", + " 'WHAT IS YOUR INTERNET ADDRESS'],\n", + " 'JokeIntent': ['TELL ME A KNOCK KNOCK JOKE',\n", + " 'DO YOU KNOW ANY KNOCK KNOCK JOKES',\n", + " 'CAN YOU TELL ME A KNOCK KNOCK JOKE',\n", + " 'MAKE ME LAUGH'],\n", + " 'LEDIntent': ['TURN THE {LEDColorKeyword} {LEDThingKeyword} '\n", + " '{LEDOperationKeyword}',\n", + " 'TURN {LEDOperationKeyword} THE {LEDColorKeyword} '\n", + " '{LEDThingKeyword}',\n", + " 'TURN THE {LEDColorKeyword} L.E.D. {LEDOperationKeyword}',\n", + " 'TURN THE {LEDColorKeyword} LIGHT {LEDOperationKeyword}',\n", + " 'TURN {LEDOperationKeyword} THE {LEDColorKeyword} L.E.D.',\n", + " 'TURN {LEDOperationKeyword} THE {LEDColorKeyword} LIGHT',\n", + " 'TURN THE RED {LEDThingKeyword} {LEDOperationKeyword}',\n", + " 'TURN THE GREEN {LEDThingKeyword} {LEDOperationKeyword}',\n", + " 'TURN {LEDOperationKeyword} THE RED {LEDThingKeyword}',\n", + " 'TURN {LEDOperationKeyword} THE GREEN {LEDThingKeyword}',\n", + " 'TURN THE RED L.E.D. {LEDOperationKeyword}',\n", + " 'TURN THE GREEN L.E.D. {LEDOperationKeyword}',\n", + " 'TURN THE RED LIGHT {LEDOperationKeyword}',\n", + " 'TURN THE GREEN LIGHT {LEDOperationKeyword}',\n", + " 'TURN {LEDOperationKeyword} THE RED L.E.D.',\n", + " 'TURN {LEDOperationKeyword} THE GREEN L.E.D.',\n", + " 'TURN {LEDOperationKeyword} THE RED LIGHT',\n", + " 'TURN {LEDOperationKeyword} THE GREEN LIGHT',\n", + " 'TURN THE {LEDColorKeyword} {LEDThingKeyword} ON',\n", + " 'TURN THE {LEDColorKeyword} {LEDThingKeyword} OFF',\n", + " 'TURN ON THE {LEDColorKeyword} {LEDThingKeyword}',\n", + " 'TURN OFF THE {LEDColorKeyword} {LEDThingKeyword}',\n", + " 'TURN THE {LEDColorKeyword} L.E.D. ON',\n", + " 'TURN THE {LEDColorKeyword} L.E.D. OFF',\n", + " 'TURN THE {LEDColorKeyword} LIGHT ON',\n", + " 'TURN THE {LEDColorKeyword} LIGHT OFF',\n", + " 'TURN ON THE {LEDColorKeyword} L.E.D.',\n", + " 'TURN OFF THE {LEDColorKeyword} L.E.D.',\n", + " 'TURN ON THE {LEDColorKeyword} LIGHT',\n", + " 'TURN OFF THE {LEDColorKeyword} LIGHT',\n", + " 'TURN THE RED {LEDThingKeyword} ON',\n", + " 'TURN THE RED {LEDThingKeyword} OFF',\n", + " 'TURN THE GREEN {LEDThingKeyword} ON',\n", + " 'TURN THE GREEN {LEDThingKeyword} OFF',\n", + " 'TURN ON THE RED {LEDThingKeyword}',\n", + " 'TURN OFF THE RED {LEDThingKeyword}',\n", + " 'TURN ON THE GREEN {LEDThingKeyword}',\n", + " 'TURN OFF THE GREEN {LEDThingKeyword}',\n", + " 'TURN THE RED L.E.D. ON',\n", + " 'TURN THE RED L.E.D. OFF',\n", + " 'TURN THE GREEN L.E.D. ON',\n", + " 'TURN THE GREEN L.E.D. OFF',\n", + " 'TURN THE RED LIGHT ON',\n", + " 'TURN THE RED LIGHT OFF',\n", + " 'TURN THE GREEN LIGHT ON',\n", + " 'TURN THE GREEN LIGHT OFF',\n", + " 'TURN ON THE RED L.E.D.',\n", + " 'TURN OFF THE RED L.E.D.',\n", + " 'TURN ON THE GREEN L.E.D.',\n", + " 'TURN OFF THE GREEN L.E.D.',\n", + " 'TURN ON THE RED LIGHT',\n", + " 'TURN OFF THE RED LIGHT',\n", + " 'TURN ON THE GREEN LIGHT',\n", + " 'TURN OFF THE GREEN LIGHT'],\n", + " 'MeaningOfLifeIntent': ['WHAT IS THE MEANING OF LIFE',\n", + " 'WHAT IS THE ULTIMATE ANSWER TO THE ULTIMATE QUESTION '\n", + " 'OF LIFE THE UNIVERSE AND EVERYTHING'],\n", + " 'MyIntent': ['TURN THE LIGHT {StateKeyword}',\n", + " 'TURN THE {LightNameKeyword} {StateKeyword}',\n", + " 'TURN {StateKeyword} THE LIGHT',\n", + " 'TURN {StateKeyword} THE {LightNameKeyword}',\n", + " 'LET THERE BE LIGHT',\n", + " 'TURN THE LIGHT ONE {StateKeyword}',\n", + " 'TURN {StateKeyword} THE LIGHT ONE',\n", + " 'TURN THE LIGHT ON',\n", + " 'TURN THE LIGHT OFF',\n", + " 'TURN THE {LightNameKeyword} ON',\n", + " 'TURN THE {LightNameKeyword} OFF',\n", + " 'TURN ON THE LIGHT',\n", + " 'TURN OFF THE LIGHT',\n", + " 'TURN ON THE {LightNameKeyword}',\n", + " 'TURN OFF THE {LightNameKeyword}',\n", + " 'TURN THE LIGHT ONE ON',\n", + " 'TURN THE LIGHT ONE OFF',\n", + " 'TURN ON THE LIGHT ONE',\n", + " 'TURN OFF THE LIGHT ONE'],\n", + " 'NWSWeatherIntent': ['WHAT IS THE {ForecastKeyword} IN {LocationKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'IS IT {WeatherTypePresentKeyword} IN {LocationKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword}',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword} IN '\n", + " '{LocationKeyword}',\n", + " 'WHAT IS THE WEATHER IN {LocationKeyword}',\n", + " 'WHAT IS THE FORECAST IN {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT IN {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST IN {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'IS IT SNOWING IN {LocationKeyword}',\n", + " 'IS IT RAINING IN {LocationKeyword}',\n", + " 'IS IT WINDY IN {LocationKeyword}',\n", + " 'IS IT SLEETING IN {LocationKeyword}',\n", + " 'IS IT SUNNY IN {LocationKeyword}',\n", + " 'WILL IT SNOW THIS {TimeKeyword}',\n", + " 'WILL IT RAIN THIS {TimeKeyword}',\n", + " 'WILL IT BE WINDY THIS {TimeKeyword}',\n", + " 'WILL IT SLEET THIS {TimeKeyword}',\n", + " 'WILL IT BE SUNNY THIS {TimeKeyword}',\n", + " 'WILL IT SNOW {DayKeyword}',\n", + " 'WILL IT RAIN {DayKeyword}',\n", + " 'WILL IT BE WINDY {DayKeyword}',\n", + " 'WILL IT SLEET {DayKeyword}',\n", + " 'WILL IT BE SUNNY {DayKeyword}',\n", + " 'WILL IT SNOW {DayKeyword} {TimeKeyword}',\n", + " 'WILL IT RAIN {DayKeyword} {TimeKeyword}',\n", + " 'WILL IT BE WINDY {DayKeyword} {TimeKeyword}',\n", + " 'WILL IT SLEET {DayKeyword} {TimeKeyword}',\n", + " 'WILL IT BE SUNNY {DayKeyword} {TimeKeyword}',\n", + " 'WHEN WILL IT SNOW',\n", + " 'WHEN WILL IT RAIN',\n", + " 'WHEN WILL IT BE WINDY',\n", + " 'WHEN WILL IT SLEET',\n", + " 'WHEN WILL IT BE SUNNY',\n", + " 'WHEN WILL IT SNOW IN {LocationKeyword}',\n", + " 'WHEN WILL IT RAIN IN {LocationKeyword}',\n", + " 'WHEN WILL IT BE WINDY IN {LocationKeyword}',\n", + " 'WHEN WILL IT SLEET IN {LocationKeyword}',\n", + " 'WHEN WILL IT BE SUNNY IN {LocationKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} IN SEATTLE',\n", + " 'WHAT IS THE {ForecastKeyword} IN SAN FRANCISCO',\n", + " 'WHAT IS THE {ForecastKeyword} IN TOKYO',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'IS IT {WeatherTypePresentKeyword} IN SEATTLE',\n", + " 'IS IT {WeatherTypePresentKeyword} IN SAN FRANCISCO',\n", + " 'IS IT {WeatherTypePresentKeyword} IN TOKYO',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword} IN SEATTLE',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword} IN SAN '\n", + " 'FRANCISCO',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword} IN TOKYO',\n", + " 'WHAT IS THE WEATHER IN SEATTLE',\n", + " 'WHAT IS THE WEATHER IN SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER IN TOKYO',\n", + " 'WHAT IS THE FORECAST IN SEATTLE',\n", + " 'WHAT IS THE FORECAST IN SAN FRANCISCO',\n", + " 'WHAT IS THE FORECAST IN TOKYO',\n", + " 'WHAT IS THE WEATHER REPORT IN SEATTLE',\n", + " 'WHAT IS THE WEATHER REPORT IN SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER REPORT IN TOKYO',\n", + " 'WHAT IS THE WEATHER FORECAST IN SEATTLE',\n", + " 'WHAT IS THE WEATHER FORECAST IN SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER FORECAST IN TOKYO',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER FOR TOKYO',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO',\n", + " 'WHAT IS THE FORECAST FOR TOKYO',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'IS IT SNOWING IN SEATTLE',\n", + " 'IS IT SNOWING IN SAN FRANCISCO',\n", + " 'IS IT SNOWING IN TOKYO',\n", + " 'IS IT RAINING IN SEATTLE',\n", + " 'IS IT RAINING IN SAN FRANCISCO',\n", + " 'IS IT RAINING IN TOKYO',\n", + " 'IS IT WINDY IN SEATTLE',\n", + " 'IS IT WINDY IN SAN FRANCISCO',\n", + " 'IS IT WINDY IN TOKYO',\n", + " 'IS IT SLEETING IN SEATTLE',\n", + " 'IS IT SLEETING IN SAN FRANCISCO',\n", + " 'IS IT SLEETING IN TOKYO',\n", + " 'IS IT SUNNY IN SEATTLE',\n", + " 'IS IT SUNNY IN SAN FRANCISCO',\n", + " 'IS IT SUNNY IN TOKYO',\n", + " 'WHEN WILL IT SNOW IN SEATTLE',\n", + " 'WHEN WILL IT SNOW IN SAN FRANCISCO',\n", + " 'WHEN WILL IT SNOW IN TOKYO',\n", + " 'WHEN WILL IT RAIN IN SEATTLE',\n", + " 'WHEN WILL IT RAIN IN SAN FRANCISCO',\n", + " 'WHEN WILL IT RAIN IN TOKYO',\n", + " 'WHEN WILL IT BE WINDY IN SEATTLE',\n", + " 'WHEN WILL IT BE WINDY IN SAN FRANCISCO',\n", + " 'WHEN WILL IT BE WINDY IN TOKYO',\n", + " 'WHEN WILL IT SLEET IN SEATTLE',\n", + " 'WHEN WILL IT SLEET IN SAN FRANCISCO',\n", + " 'WHEN WILL IT SLEET IN TOKYO',\n", + " 'WHEN WILL IT BE SUNNY IN SEATTLE',\n", + " 'WHEN WILL IT BE SUNNY IN SAN FRANCISCO',\n", + " 'WHEN WILL IT BE SUNNY IN TOKYO',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WILL IT SNOW THIS MORNING',\n", + " 'WILL IT SNOW THIS AFTERNOON',\n", + " 'WILL IT SNOW THIS EVENING',\n", + " 'WILL IT SNOW THIS NIGHT',\n", + " 'WILL IT RAIN THIS MORNING',\n", + " 'WILL IT RAIN THIS AFTERNOON',\n", + " 'WILL IT RAIN THIS EVENING',\n", + " 'WILL IT RAIN THIS NIGHT',\n", + " 'WILL IT BE WINDY THIS MORNING',\n", + " 'WILL IT BE WINDY THIS AFTERNOON',\n", + " 'WILL IT BE WINDY THIS EVENING',\n", + " 'WILL IT BE WINDY THIS NIGHT',\n", + " 'WILL IT SLEET THIS MORNING',\n", + " 'WILL IT SLEET THIS AFTERNOON',\n", + " 'WILL IT SLEET THIS EVENING',\n", + " 'WILL IT SLEET THIS NIGHT',\n", + " 'WILL IT BE SUNNY THIS MORNING',\n", + " 'WILL IT BE SUNNY THIS AFTERNOON',\n", + " 'WILL IT BE SUNNY THIS EVENING',\n", + " 'WILL IT BE SUNNY THIS NIGHT',\n", + " 'WILL IT SNOW {DayKeyword} MORNING',\n", + " 'WILL IT SNOW {DayKeyword} AFTERNOON',\n", + " 'WILL IT SNOW {DayKeyword} EVENING',\n", + " 'WILL IT SNOW {DayKeyword} NIGHT',\n", + " 'WILL IT RAIN {DayKeyword} MORNING',\n", + " 'WILL IT RAIN {DayKeyword} AFTERNOON',\n", + " 'WILL IT RAIN {DayKeyword} EVENING',\n", + " 'WILL IT RAIN {DayKeyword} NIGHT',\n", + " 'WILL IT BE WINDY {DayKeyword} MORNING',\n", + " 'WILL IT BE WINDY {DayKeyword} AFTERNOON',\n", + " 'WILL IT BE WINDY {DayKeyword} EVENING',\n", + " 'WILL IT BE WINDY {DayKeyword} NIGHT',\n", + " 'WILL IT SLEET {DayKeyword} MORNING',\n", + " 'WILL IT SLEET {DayKeyword} AFTERNOON',\n", + " 'WILL IT SLEET {DayKeyword} EVENING',\n", + " 'WILL IT SLEET {DayKeyword} NIGHT',\n", + " 'WILL IT BE SUNNY {DayKeyword} MORNING',\n", + " 'WILL IT BE SUNNY {DayKeyword} AFTERNOON',\n", + " 'WILL IT BE SUNNY {DayKeyword} EVENING',\n", + " 'WILL IT BE SUNNY {DayKeyword} NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TODAY',\n", + " 'WHAT IS THE WEATHER FOR TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR MONDAY',\n", + " 'WHAT IS THE WEATHER FOR TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR TODAY',\n", + " 'WHAT IS THE FORECAST FOR TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR MONDAY',\n", + " 'WHAT IS THE FORECAST FOR TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TODAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WILL IT SNOW TODAY',\n", + " 'WILL IT SNOW TOMORROW',\n", + " 'WILL IT SNOW SUNDAY',\n", + " 'WILL IT SNOW MONDAY',\n", + " 'WILL IT SNOW TUESDAY',\n", + " 'WILL IT SNOW WEDNESDAY',\n", + " 'WILL IT SNOW THURSDAY',\n", + " 'WILL IT SNOW FRIDAY',\n", + " 'WILL IT SNOW SATURDAY',\n", + " 'WILL IT RAIN TODAY',\n", + " 'WILL IT RAIN TOMORROW',\n", + " 'WILL IT RAIN SUNDAY',\n", + " 'WILL IT RAIN MONDAY',\n", + " 'WILL IT RAIN TUESDAY',\n", + " 'WILL IT RAIN WEDNESDAY',\n", + " 'WILL IT RAIN THURSDAY',\n", + " 'WILL IT RAIN FRIDAY',\n", + " 'WILL IT RAIN SATURDAY',\n", + " 'WILL IT BE WINDY TODAY',\n", + " 'WILL IT BE WINDY TOMORROW',\n", + " 'WILL IT BE WINDY SUNDAY',\n", + " 'WILL IT BE WINDY MONDAY',\n", + " 'WILL IT BE WINDY TUESDAY',\n", + " 'WILL IT BE WINDY WEDNESDAY',\n", + " 'WILL IT BE WINDY THURSDAY',\n", + " 'WILL IT BE WINDY FRIDAY',\n", + " 'WILL IT BE WINDY SATURDAY',\n", + " 'WILL IT SLEET TODAY',\n", + " 'WILL IT SLEET TOMORROW',\n", + " 'WILL IT SLEET SUNDAY',\n", + " 'WILL IT SLEET MONDAY',\n", + " 'WILL IT SLEET TUESDAY',\n", + " 'WILL IT SLEET WEDNESDAY',\n", + " 'WILL IT SLEET THURSDAY',\n", + " 'WILL IT SLEET FRIDAY',\n", + " 'WILL IT SLEET SATURDAY',\n", + " 'WILL IT BE SUNNY TODAY',\n", + " 'WILL IT BE SUNNY TOMORROW',\n", + " 'WILL IT BE SUNNY SUNDAY',\n", + " 'WILL IT BE SUNNY MONDAY',\n", + " 'WILL IT BE SUNNY TUESDAY',\n", + " 'WILL IT BE SUNNY WEDNESDAY',\n", + " 'WILL IT BE SUNNY THURSDAY',\n", + " 'WILL IT BE SUNNY FRIDAY',\n", + " 'WILL IT BE SUNNY SATURDAY',\n", + " 'WILL IT SNOW TODAY {TimeKeyword}',\n", + " 'WILL IT SNOW TOMORROW {TimeKeyword}',\n", + " 'WILL IT SNOW SUNDAY {TimeKeyword}',\n", + " 'WILL IT SNOW MONDAY {TimeKeyword}',\n", + " 'WILL IT SNOW TUESDAY {TimeKeyword}',\n", + " 'WILL IT SNOW WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT SNOW THURSDAY {TimeKeyword}',\n", + " 'WILL IT SNOW FRIDAY {TimeKeyword}',\n", + " 'WILL IT SNOW SATURDAY {TimeKeyword}',\n", + " 'WILL IT RAIN TODAY {TimeKeyword}',\n", + " 'WILL IT RAIN TOMORROW {TimeKeyword}',\n", + " 'WILL IT RAIN SUNDAY {TimeKeyword}',\n", + " 'WILL IT RAIN MONDAY {TimeKeyword}',\n", + " 'WILL IT RAIN TUESDAY {TimeKeyword}',\n", + " 'WILL IT RAIN WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT RAIN THURSDAY {TimeKeyword}',\n", + " 'WILL IT RAIN FRIDAY {TimeKeyword}',\n", + " 'WILL IT RAIN SATURDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY TODAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY TOMORROW {TimeKeyword}',\n", + " 'WILL IT BE WINDY SUNDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY MONDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY TUESDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY THURSDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY FRIDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY SATURDAY {TimeKeyword}',\n", + " 'WILL IT SLEET TODAY {TimeKeyword}',\n", + " 'WILL IT SLEET TOMORROW {TimeKeyword}',\n", + " 'WILL IT SLEET SUNDAY {TimeKeyword}',\n", + " 'WILL IT SLEET MONDAY {TimeKeyword}',\n", + " 'WILL IT SLEET TUESDAY {TimeKeyword}',\n", + " 'WILL IT SLEET WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT SLEET THURSDAY {TimeKeyword}',\n", + " 'WILL IT SLEET FRIDAY {TimeKeyword}',\n", + " 'WILL IT SLEET SATURDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY TODAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY TOMORROW {TimeKeyword}',\n", + " 'WILL IT BE SUNNY SUNDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY MONDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY TUESDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY THURSDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY FRIDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TODAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TODAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TODAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WILL IT SNOW TODAY MORNING',\n", + " 'WILL IT SNOW TOMORROW MORNING',\n", + " 'WILL IT SNOW SUNDAY MORNING',\n", + " 'WILL IT SNOW MONDAY MORNING',\n", + " 'WILL IT SNOW TUESDAY MORNING',\n", + " 'WILL IT SNOW WEDNESDAY MORNING',\n", + " 'WILL IT SNOW THURSDAY MORNING',\n", + " 'WILL IT SNOW FRIDAY MORNING',\n", + " 'WILL IT SNOW SATURDAY MORNING',\n", + " 'WILL IT SNOW TODAY AFTERNOON',\n", + " 'WILL IT SNOW TOMORROW AFTERNOON',\n", + " 'WILL IT SNOW SUNDAY AFTERNOON',\n", + " 'WILL IT SNOW MONDAY AFTERNOON',\n", + " 'WILL IT SNOW TUESDAY AFTERNOON',\n", + " 'WILL IT SNOW WEDNESDAY AFTERNOON',\n", + " 'WILL IT SNOW THURSDAY AFTERNOON',\n", + " 'WILL IT SNOW FRIDAY AFTERNOON',\n", + " 'WILL IT SNOW SATURDAY AFTERNOON',\n", + " 'WILL IT SNOW TODAY EVENING',\n", + " 'WILL IT SNOW TOMORROW EVENING',\n", + " 'WILL IT SNOW SUNDAY EVENING',\n", + " 'WILL IT SNOW MONDAY EVENING',\n", + " 'WILL IT SNOW TUESDAY EVENING',\n", + " 'WILL IT SNOW WEDNESDAY EVENING',\n", + " 'WILL IT SNOW THURSDAY EVENING',\n", + " 'WILL IT SNOW FRIDAY EVENING',\n", + " 'WILL IT SNOW SATURDAY EVENING',\n", + " 'WILL IT SNOW TODAY NIGHT',\n", + " 'WILL IT SNOW TOMORROW NIGHT',\n", + " 'WILL IT SNOW SUNDAY NIGHT',\n", + " 'WILL IT SNOW MONDAY NIGHT',\n", + " 'WILL IT SNOW TUESDAY NIGHT',\n", + " 'WILL IT SNOW WEDNESDAY NIGHT',\n", + " 'WILL IT SNOW THURSDAY NIGHT',\n", + " 'WILL IT SNOW FRIDAY NIGHT',\n", + " 'WILL IT SNOW SATURDAY NIGHT',\n", + " 'WILL IT RAIN TODAY MORNING',\n", + " 'WILL IT RAIN TOMORROW MORNING',\n", + " 'WILL IT RAIN SUNDAY MORNING',\n", + " 'WILL IT RAIN MONDAY MORNING',\n", + " 'WILL IT RAIN TUESDAY MORNING',\n", + " 'WILL IT RAIN WEDNESDAY MORNING',\n", + " 'WILL IT RAIN THURSDAY MORNING',\n", + " 'WILL IT RAIN FRIDAY MORNING',\n", + " 'WILL IT RAIN SATURDAY MORNING',\n", + " 'WILL IT RAIN TODAY AFTERNOON',\n", + " 'WILL IT RAIN TOMORROW AFTERNOON',\n", + " 'WILL IT RAIN SUNDAY AFTERNOON',\n", + " 'WILL IT RAIN MONDAY AFTERNOON',\n", + " 'WILL IT RAIN TUESDAY AFTERNOON',\n", + " 'WILL IT RAIN WEDNESDAY AFTERNOON',\n", + " 'WILL IT RAIN THURSDAY AFTERNOON',\n", + " 'WILL IT RAIN FRIDAY AFTERNOON',\n", + " 'WILL IT RAIN SATURDAY AFTERNOON',\n", + " 'WILL IT RAIN TODAY EVENING',\n", + " 'WILL IT RAIN TOMORROW EVENING',\n", + " 'WILL IT RAIN SUNDAY EVENING',\n", + " 'WILL IT RAIN MONDAY EVENING',\n", + " 'WILL IT RAIN TUESDAY EVENING',\n", + " 'WILL IT RAIN WEDNESDAY EVENING',\n", + " 'WILL IT RAIN THURSDAY EVENING',\n", + " 'WILL IT RAIN FRIDAY EVENING',\n", + " 'WILL IT RAIN SATURDAY EVENING',\n", + " 'WILL IT RAIN TODAY NIGHT',\n", + " 'WILL IT RAIN TOMORROW NIGHT',\n", + " 'WILL IT RAIN SUNDAY NIGHT',\n", + " 'WILL IT RAIN MONDAY NIGHT',\n", + " 'WILL IT RAIN TUESDAY NIGHT',\n", + " 'WILL IT RAIN WEDNESDAY NIGHT',\n", + " 'WILL IT RAIN THURSDAY NIGHT',\n", + " 'WILL IT RAIN FRIDAY NIGHT',\n", + " 'WILL IT RAIN SATURDAY NIGHT',\n", + " 'WILL IT BE WINDY TODAY MORNING',\n", + " 'WILL IT BE WINDY TOMORROW MORNING',\n", + " 'WILL IT BE WINDY SUNDAY MORNING',\n", + " 'WILL IT BE WINDY MONDAY MORNING',\n", + " 'WILL IT BE WINDY TUESDAY MORNING',\n", + " 'WILL IT BE WINDY WEDNESDAY MORNING',\n", + " 'WILL IT BE WINDY THURSDAY MORNING',\n", + " 'WILL IT BE WINDY FRIDAY MORNING',\n", + " 'WILL IT BE WINDY SATURDAY MORNING',\n", + " 'WILL IT BE WINDY TODAY AFTERNOON',\n", + " 'WILL IT BE WINDY TOMORROW AFTERNOON',\n", + " 'WILL IT BE WINDY SUNDAY AFTERNOON',\n", + " 'WILL IT BE WINDY MONDAY AFTERNOON',\n", + " 'WILL IT BE WINDY TUESDAY AFTERNOON',\n", + " 'WILL IT BE WINDY WEDNESDAY AFTERNOON',\n", + " 'WILL IT BE WINDY THURSDAY AFTERNOON',\n", + " 'WILL IT BE WINDY FRIDAY AFTERNOON',\n", + " 'WILL IT BE WINDY SATURDAY AFTERNOON',\n", + " 'WILL IT BE WINDY TODAY EVENING',\n", + " 'WILL IT BE WINDY TOMORROW EVENING',\n", + " 'WILL IT BE WINDY SUNDAY EVENING',\n", + " 'WILL IT BE WINDY MONDAY EVENING',\n", + " 'WILL IT BE WINDY TUESDAY EVENING',\n", + " 'WILL IT BE WINDY WEDNESDAY EVENING',\n", + " 'WILL IT BE WINDY THURSDAY EVENING',\n", + " 'WILL IT BE WINDY FRIDAY EVENING',\n", + " 'WILL IT BE WINDY SATURDAY EVENING',\n", + " 'WILL IT BE WINDY TODAY NIGHT',\n", + " 'WILL IT BE WINDY TOMORROW NIGHT',\n", + " 'WILL IT BE WINDY SUNDAY NIGHT',\n", + " 'WILL IT BE WINDY MONDAY NIGHT',\n", + " 'WILL IT BE WINDY TUESDAY NIGHT',\n", + " 'WILL IT BE WINDY WEDNESDAY NIGHT',\n", + " 'WILL IT BE WINDY THURSDAY NIGHT',\n", + " 'WILL IT BE WINDY FRIDAY NIGHT',\n", + " 'WILL IT BE WINDY SATURDAY NIGHT',\n", + " 'WILL IT SLEET TODAY MORNING',\n", + " 'WILL IT SLEET TOMORROW MORNING',\n", + " 'WILL IT SLEET SUNDAY MORNING',\n", + " 'WILL IT SLEET MONDAY MORNING',\n", + " 'WILL IT SLEET TUESDAY MORNING',\n", + " 'WILL IT SLEET WEDNESDAY MORNING',\n", + " 'WILL IT SLEET THURSDAY MORNING',\n", + " 'WILL IT SLEET FRIDAY MORNING',\n", + " 'WILL IT SLEET SATURDAY MORNING',\n", + " 'WILL IT SLEET TODAY AFTERNOON',\n", + " 'WILL IT SLEET TOMORROW AFTERNOON',\n", + " 'WILL IT SLEET SUNDAY AFTERNOON',\n", + " 'WILL IT SLEET MONDAY AFTERNOON',\n", + " 'WILL IT SLEET TUESDAY AFTERNOON',\n", + " 'WILL IT SLEET WEDNESDAY AFTERNOON',\n", + " 'WILL IT SLEET THURSDAY AFTERNOON',\n", + " 'WILL IT SLEET FRIDAY AFTERNOON',\n", + " 'WILL IT SLEET SATURDAY AFTERNOON',\n", + " 'WILL IT SLEET TODAY EVENING',\n", + " 'WILL IT SLEET TOMORROW EVENING',\n", + " 'WILL IT SLEET SUNDAY EVENING',\n", + " 'WILL IT SLEET MONDAY EVENING',\n", + " 'WILL IT SLEET TUESDAY EVENING',\n", + " 'WILL IT SLEET WEDNESDAY EVENING',\n", + " 'WILL IT SLEET THURSDAY EVENING',\n", + " 'WILL IT SLEET FRIDAY EVENING',\n", + " 'WILL IT SLEET SATURDAY EVENING',\n", + " 'WILL IT SLEET TODAY NIGHT',\n", + " 'WILL IT SLEET TOMORROW NIGHT',\n", + " 'WILL IT SLEET SUNDAY NIGHT',\n", + " 'WILL IT SLEET MONDAY NIGHT',\n", + " 'WILL IT SLEET TUESDAY NIGHT',\n", + " 'WILL IT SLEET WEDNESDAY NIGHT',\n", + " 'WILL IT SLEET THURSDAY NIGHT',\n", + " 'WILL IT SLEET FRIDAY NIGHT',\n", + " 'WILL IT SLEET SATURDAY NIGHT',\n", + " 'WILL IT BE SUNNY TODAY MORNING',\n", + " 'WILL IT BE SUNNY TOMORROW MORNING',\n", + " 'WILL IT BE SUNNY SUNDAY MORNING',\n", + " 'WILL IT BE SUNNY MONDAY MORNING',\n", + " 'WILL IT BE SUNNY TUESDAY MORNING',\n", + " 'WILL IT BE SUNNY WEDNESDAY MORNING',\n", + " 'WILL IT BE SUNNY THURSDAY MORNING',\n", + " 'WILL IT BE SUNNY FRIDAY MORNING',\n", + " 'WILL IT BE SUNNY SATURDAY MORNING',\n", + " 'WILL IT BE SUNNY TODAY AFTERNOON',\n", + " 'WILL IT BE SUNNY TOMORROW AFTERNOON',\n", + " 'WILL IT BE SUNNY SUNDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY MONDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY TUESDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY WEDNESDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY THURSDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY FRIDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY SATURDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY TODAY EVENING',\n", + " 'WILL IT BE SUNNY TOMORROW EVENING',\n", + " 'WILL IT BE SUNNY SUNDAY EVENING',\n", + " 'WILL IT BE SUNNY MONDAY EVENING',\n", + " 'WILL IT BE SUNNY TUESDAY EVENING',\n", + " 'WILL IT BE SUNNY WEDNESDAY EVENING',\n", + " 'WILL IT BE SUNNY THURSDAY EVENING',\n", + " 'WILL IT BE SUNNY FRIDAY EVENING',\n", + " 'WILL IT BE SUNNY SATURDAY EVENING',\n", + " 'WILL IT BE SUNNY TODAY NIGHT',\n", + " 'WILL IT BE SUNNY TOMORROW NIGHT',\n", + " 'WILL IT BE SUNNY SUNDAY NIGHT',\n", + " 'WILL IT BE SUNNY MONDAY NIGHT',\n", + " 'WILL IT BE SUNNY TUESDAY NIGHT',\n", + " 'WILL IT BE SUNNY WEDNESDAY NIGHT',\n", + " 'WILL IT BE SUNNY THURSDAY NIGHT',\n", + " 'WILL IT BE SUNNY FRIDAY NIGHT',\n", + " 'WILL IT BE SUNNY SATURDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TODAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SUNDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'MONDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TUESDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'FRIDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TODAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SUNDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'MONDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TUESDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'FRIDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TODAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SUNDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'MONDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TUESDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'FRIDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TODAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SUNDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'MONDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TUESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'FRIDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'THURSDAY AFTERNOON',\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY '\n", + " 'NIGHT'],\n", + " 'NewsIntent': ['READ THE {NewsKeyword}',\n", + " 'READ ME THE {NewsKeyword}',\n", + " 'TELL ME THE {NewsKeyword}',\n", + " 'WHAT IS IN THE {NewsKeyword}',\n", + " 'WHAT IS HAPPENING IN THE {NewsKeyword}',\n", + " \"WHAT ARE TODAY'S {NewsKeyword}\",\n", + " 'READ THE NEWS',\n", + " 'READ THE HEADLINES',\n", + " 'READ ME THE NEWS',\n", + " 'READ ME THE HEADLINES',\n", + " 'TELL ME THE NEWS',\n", + " 'TELL ME THE HEADLINES',\n", + " 'WHAT IS IN THE NEWS',\n", + " 'WHAT IS IN THE HEADLINES',\n", + " 'WHAT IS HAPPENING IN THE NEWS',\n", + " 'WHAT IS HAPPENING IN THE HEADLINES',\n", + " \"WHAT ARE TODAY'S NEWS\",\n", + " \"WHAT ARE TODAY'S HEADLINES\"],\n", + " 'ShutdownIntent': ['SHUTDOWN', 'SHUT DOWN', 'TURN YOURSELF OFF'],\n", + " 'StopIntent': ['STOP', 'SHUT UP'],\n", + " 'ThankYouIntent': ['THANK YOU', 'THANKS'],\n", + " 'WeatherIntent': ['WHAT IS THE {ForecastKeyword} IN {LocationKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'IS IT {WeatherTypePresentKeyword} IN {LocationKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword}',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword} IN '\n", + " '{LocationKeyword}',\n", + " 'WHAT IS THE WEATHER IN {LocationKeyword}',\n", + " 'WHAT IS THE FORECAST IN {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT IN {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST IN {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'IS IT SNOWING IN {LocationKeyword}',\n", + " 'IS IT RAINING IN {LocationKeyword}',\n", + " 'IS IT WINDY IN {LocationKeyword}',\n", + " 'IS IT SLEETING IN {LocationKeyword}',\n", + " 'IS IT SUNNY IN {LocationKeyword}',\n", + " 'WILL IT SNOW THIS {TimeKeyword}',\n", + " 'WILL IT RAIN THIS {TimeKeyword}',\n", + " 'WILL IT BE WINDY THIS {TimeKeyword}',\n", + " 'WILL IT SLEET THIS {TimeKeyword}',\n", + " 'WILL IT BE SUNNY THIS {TimeKeyword}',\n", + " 'WILL IT SNOW {DayKeyword}',\n", + " 'WILL IT RAIN {DayKeyword}',\n", + " 'WILL IT BE WINDY {DayKeyword}',\n", + " 'WILL IT SLEET {DayKeyword}',\n", + " 'WILL IT BE SUNNY {DayKeyword}',\n", + " 'WILL IT SNOW {DayKeyword} {TimeKeyword}',\n", + " 'WILL IT RAIN {DayKeyword} {TimeKeyword}',\n", + " 'WILL IT BE WINDY {DayKeyword} {TimeKeyword}',\n", + " 'WILL IT SLEET {DayKeyword} {TimeKeyword}',\n", + " 'WILL IT BE SUNNY {DayKeyword} {TimeKeyword}',\n", + " 'WHEN WILL IT SNOW',\n", + " 'WHEN WILL IT RAIN',\n", + " 'WHEN WILL IT BE WINDY',\n", + " 'WHEN WILL IT SLEET',\n", + " 'WHEN WILL IT BE SUNNY',\n", + " 'WHEN WILL IT SNOW IN {LocationKeyword}',\n", + " 'WHEN WILL IT RAIN IN {LocationKeyword}',\n", + " 'WHEN WILL IT BE WINDY IN {LocationKeyword}',\n", + " 'WHEN WILL IT SLEET IN {LocationKeyword}',\n", + " 'WHEN WILL IT BE SUNNY IN {LocationKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} IN SEATTLE',\n", + " 'WHAT IS THE {ForecastKeyword} IN SAN FRANCISCO',\n", + " 'WHAT IS THE {ForecastKeyword} IN TOKYO',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON {DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'IS IT {WeatherTypePresentKeyword} IN SEATTLE',\n", + " 'IS IT {WeatherTypePresentKeyword} IN SAN FRANCISCO',\n", + " 'IS IT {WeatherTypePresentKeyword} IN TOKYO',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword} IN SEATTLE',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword} IN SAN FRANCISCO',\n", + " 'WHEN WILL IT {WeatherTypeFutureKeyword} IN TOKYO',\n", + " 'WHAT IS THE WEATHER IN SEATTLE',\n", + " 'WHAT IS THE WEATHER IN SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER IN TOKYO',\n", + " 'WHAT IS THE FORECAST IN SEATTLE',\n", + " 'WHAT IS THE FORECAST IN SAN FRANCISCO',\n", + " 'WHAT IS THE FORECAST IN TOKYO',\n", + " 'WHAT IS THE WEATHER REPORT IN SEATTLE',\n", + " 'WHAT IS THE WEATHER REPORT IN SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER REPORT IN TOKYO',\n", + " 'WHAT IS THE WEATHER FORECAST IN SEATTLE',\n", + " 'WHAT IS THE WEATHER FORECAST IN SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER FORECAST IN TOKYO',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER FOR TOKYO',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO',\n", + " 'WHAT IS THE FORECAST FOR TOKYO',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " '{TimeKeyword}',\n", + " 'IS IT SNOWING IN SEATTLE',\n", + " 'IS IT SNOWING IN SAN FRANCISCO',\n", + " 'IS IT SNOWING IN TOKYO',\n", + " 'IS IT RAINING IN SEATTLE',\n", + " 'IS IT RAINING IN SAN FRANCISCO',\n", + " 'IS IT RAINING IN TOKYO',\n", + " 'IS IT WINDY IN SEATTLE',\n", + " 'IS IT WINDY IN SAN FRANCISCO',\n", + " 'IS IT WINDY IN TOKYO',\n", + " 'IS IT SLEETING IN SEATTLE',\n", + " 'IS IT SLEETING IN SAN FRANCISCO',\n", + " 'IS IT SLEETING IN TOKYO',\n", + " 'IS IT SUNNY IN SEATTLE',\n", + " 'IS IT SUNNY IN SAN FRANCISCO',\n", + " 'IS IT SUNNY IN TOKYO',\n", + " 'WHEN WILL IT SNOW IN SEATTLE',\n", + " 'WHEN WILL IT SNOW IN SAN FRANCISCO',\n", + " 'WHEN WILL IT SNOW IN TOKYO',\n", + " 'WHEN WILL IT RAIN IN SEATTLE',\n", + " 'WHEN WILL IT RAIN IN SAN FRANCISCO',\n", + " 'WHEN WILL IT RAIN IN TOKYO',\n", + " 'WHEN WILL IT BE WINDY IN SEATTLE',\n", + " 'WHEN WILL IT BE WINDY IN SAN FRANCISCO',\n", + " 'WHEN WILL IT BE WINDY IN TOKYO',\n", + " 'WHEN WILL IT SLEET IN SEATTLE',\n", + " 'WHEN WILL IT SLEET IN SAN FRANCISCO',\n", + " 'WHEN WILL IT SLEET IN TOKYO',\n", + " 'WHEN WILL IT BE SUNNY IN SEATTLE',\n", + " 'WHEN WILL IT BE SUNNY IN SAN FRANCISCO',\n", + " 'WHEN WILL IT BE SUNNY IN TOKYO',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THIS NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} {DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WILL IT SNOW THIS MORNING',\n", + " 'WILL IT SNOW THIS AFTERNOON',\n", + " 'WILL IT SNOW THIS EVENING',\n", + " 'WILL IT SNOW THIS NIGHT',\n", + " 'WILL IT RAIN THIS MORNING',\n", + " 'WILL IT RAIN THIS AFTERNOON',\n", + " 'WILL IT RAIN THIS EVENING',\n", + " 'WILL IT RAIN THIS NIGHT',\n", + " 'WILL IT BE WINDY THIS MORNING',\n", + " 'WILL IT BE WINDY THIS AFTERNOON',\n", + " 'WILL IT BE WINDY THIS EVENING',\n", + " 'WILL IT BE WINDY THIS NIGHT',\n", + " 'WILL IT SLEET THIS MORNING',\n", + " 'WILL IT SLEET THIS AFTERNOON',\n", + " 'WILL IT SLEET THIS EVENING',\n", + " 'WILL IT SLEET THIS NIGHT',\n", + " 'WILL IT BE SUNNY THIS MORNING',\n", + " 'WILL IT BE SUNNY THIS AFTERNOON',\n", + " 'WILL IT BE SUNNY THIS EVENING',\n", + " 'WILL IT BE SUNNY THIS NIGHT',\n", + " 'WILL IT SNOW {DayKeyword} MORNING',\n", + " 'WILL IT SNOW {DayKeyword} AFTERNOON',\n", + " 'WILL IT SNOW {DayKeyword} EVENING',\n", + " 'WILL IT SNOW {DayKeyword} NIGHT',\n", + " 'WILL IT RAIN {DayKeyword} MORNING',\n", + " 'WILL IT RAIN {DayKeyword} AFTERNOON',\n", + " 'WILL IT RAIN {DayKeyword} EVENING',\n", + " 'WILL IT RAIN {DayKeyword} NIGHT',\n", + " 'WILL IT BE WINDY {DayKeyword} MORNING',\n", + " 'WILL IT BE WINDY {DayKeyword} AFTERNOON',\n", + " 'WILL IT BE WINDY {DayKeyword} EVENING',\n", + " 'WILL IT BE WINDY {DayKeyword} NIGHT',\n", + " 'WILL IT SLEET {DayKeyword} MORNING',\n", + " 'WILL IT SLEET {DayKeyword} AFTERNOON',\n", + " 'WILL IT SLEET {DayKeyword} EVENING',\n", + " 'WILL IT SLEET {DayKeyword} NIGHT',\n", + " 'WILL IT BE SUNNY {DayKeyword} MORNING',\n", + " 'WILL IT BE SUNNY {DayKeyword} AFTERNOON',\n", + " 'WILL IT BE SUNNY {DayKeyword} EVENING',\n", + " 'WILL IT BE SUNNY {DayKeyword} NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON {DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " '{DayKeyword} NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON {DayKeyword} '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY {TimeKeyword}',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TODAY',\n", + " 'WHAT IS THE WEATHER FOR TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR MONDAY',\n", + " 'WHAT IS THE WEATHER FOR TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR TODAY',\n", + " 'WHAT IS THE FORECAST FOR TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR MONDAY',\n", + " 'WHAT IS THE FORECAST FOR TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WILL IT SNOW TODAY',\n", + " 'WILL IT SNOW TOMORROW',\n", + " 'WILL IT SNOW SUNDAY',\n", + " 'WILL IT SNOW MONDAY',\n", + " 'WILL IT SNOW TUESDAY',\n", + " 'WILL IT SNOW WEDNESDAY',\n", + " 'WILL IT SNOW THURSDAY',\n", + " 'WILL IT SNOW FRIDAY',\n", + " 'WILL IT SNOW SATURDAY',\n", + " 'WILL IT RAIN TODAY',\n", + " 'WILL IT RAIN TOMORROW',\n", + " 'WILL IT RAIN SUNDAY',\n", + " 'WILL IT RAIN MONDAY',\n", + " 'WILL IT RAIN TUESDAY',\n", + " 'WILL IT RAIN WEDNESDAY',\n", + " 'WILL IT RAIN THURSDAY',\n", + " 'WILL IT RAIN FRIDAY',\n", + " 'WILL IT RAIN SATURDAY',\n", + " 'WILL IT BE WINDY TODAY',\n", + " 'WILL IT BE WINDY TOMORROW',\n", + " 'WILL IT BE WINDY SUNDAY',\n", + " 'WILL IT BE WINDY MONDAY',\n", + " 'WILL IT BE WINDY TUESDAY',\n", + " 'WILL IT BE WINDY WEDNESDAY',\n", + " 'WILL IT BE WINDY THURSDAY',\n", + " 'WILL IT BE WINDY FRIDAY',\n", + " 'WILL IT BE WINDY SATURDAY',\n", + " 'WILL IT SLEET TODAY',\n", + " 'WILL IT SLEET TOMORROW',\n", + " 'WILL IT SLEET SUNDAY',\n", + " 'WILL IT SLEET MONDAY',\n", + " 'WILL IT SLEET TUESDAY',\n", + " 'WILL IT SLEET WEDNESDAY',\n", + " 'WILL IT SLEET THURSDAY',\n", + " 'WILL IT SLEET FRIDAY',\n", + " 'WILL IT SLEET SATURDAY',\n", + " 'WILL IT BE SUNNY TODAY',\n", + " 'WILL IT BE SUNNY TOMORROW',\n", + " 'WILL IT BE SUNNY SUNDAY',\n", + " 'WILL IT BE SUNNY MONDAY',\n", + " 'WILL IT BE SUNNY TUESDAY',\n", + " 'WILL IT BE SUNNY WEDNESDAY',\n", + " 'WILL IT BE SUNNY THURSDAY',\n", + " 'WILL IT BE SUNNY FRIDAY',\n", + " 'WILL IT BE SUNNY SATURDAY',\n", + " 'WILL IT SNOW TODAY {TimeKeyword}',\n", + " 'WILL IT SNOW TOMORROW {TimeKeyword}',\n", + " 'WILL IT SNOW SUNDAY {TimeKeyword}',\n", + " 'WILL IT SNOW MONDAY {TimeKeyword}',\n", + " 'WILL IT SNOW TUESDAY {TimeKeyword}',\n", + " 'WILL IT SNOW WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT SNOW THURSDAY {TimeKeyword}',\n", + " 'WILL IT SNOW FRIDAY {TimeKeyword}',\n", + " 'WILL IT SNOW SATURDAY {TimeKeyword}',\n", + " 'WILL IT RAIN TODAY {TimeKeyword}',\n", + " 'WILL IT RAIN TOMORROW {TimeKeyword}',\n", + " 'WILL IT RAIN SUNDAY {TimeKeyword}',\n", + " 'WILL IT RAIN MONDAY {TimeKeyword}',\n", + " 'WILL IT RAIN TUESDAY {TimeKeyword}',\n", + " 'WILL IT RAIN WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT RAIN THURSDAY {TimeKeyword}',\n", + " 'WILL IT RAIN FRIDAY {TimeKeyword}',\n", + " 'WILL IT RAIN SATURDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY TODAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY TOMORROW {TimeKeyword}',\n", + " 'WILL IT BE WINDY SUNDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY MONDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY TUESDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY THURSDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY FRIDAY {TimeKeyword}',\n", + " 'WILL IT BE WINDY SATURDAY {TimeKeyword}',\n", + " 'WILL IT SLEET TODAY {TimeKeyword}',\n", + " 'WILL IT SLEET TOMORROW {TimeKeyword}',\n", + " 'WILL IT SLEET SUNDAY {TimeKeyword}',\n", + " 'WILL IT SLEET MONDAY {TimeKeyword}',\n", + " 'WILL IT SLEET TUESDAY {TimeKeyword}',\n", + " 'WILL IT SLEET WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT SLEET THURSDAY {TimeKeyword}',\n", + " 'WILL IT SLEET FRIDAY {TimeKeyword}',\n", + " 'WILL IT SLEET SATURDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY TODAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY TOMORROW {TimeKeyword}',\n", + " 'WILL IT BE SUNNY SUNDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY MONDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY TUESDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY WEDNESDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY THURSDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY FRIDAY {TimeKeyword}',\n", + " 'WILL IT BE SUNNY SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY {TimeKeyword}',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY {TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY '\n", + " '{TimeKeyword}',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TODAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SUNDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'MONDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'TUESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'FRIDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR {LocationKeyword} ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY MORNING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY AFTERNOON',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY EVENING',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TODAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TOMORROW NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SUNDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} MONDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} TUESDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} WEDNESDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} THURSDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} FRIDAY NIGHT',\n", + " 'WILL IT {WeatherTypeFutureKeyword} SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR {LocationKeyword} ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TODAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SUNDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON MONDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON FRIDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR {LocationKeyword} ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR {LocationKeyword} ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR {LocationKeyword} ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WILL IT SNOW TODAY MORNING',\n", + " 'WILL IT SNOW TOMORROW MORNING',\n", + " 'WILL IT SNOW SUNDAY MORNING',\n", + " 'WILL IT SNOW MONDAY MORNING',\n", + " 'WILL IT SNOW TUESDAY MORNING',\n", + " 'WILL IT SNOW WEDNESDAY MORNING',\n", + " 'WILL IT SNOW THURSDAY MORNING',\n", + " 'WILL IT SNOW FRIDAY MORNING',\n", + " 'WILL IT SNOW SATURDAY MORNING',\n", + " 'WILL IT SNOW TODAY AFTERNOON',\n", + " 'WILL IT SNOW TOMORROW AFTERNOON',\n", + " 'WILL IT SNOW SUNDAY AFTERNOON',\n", + " 'WILL IT SNOW MONDAY AFTERNOON',\n", + " 'WILL IT SNOW TUESDAY AFTERNOON',\n", + " 'WILL IT SNOW WEDNESDAY AFTERNOON',\n", + " 'WILL IT SNOW THURSDAY AFTERNOON',\n", + " 'WILL IT SNOW FRIDAY AFTERNOON',\n", + " 'WILL IT SNOW SATURDAY AFTERNOON',\n", + " 'WILL IT SNOW TODAY EVENING',\n", + " 'WILL IT SNOW TOMORROW EVENING',\n", + " 'WILL IT SNOW SUNDAY EVENING',\n", + " 'WILL IT SNOW MONDAY EVENING',\n", + " 'WILL IT SNOW TUESDAY EVENING',\n", + " 'WILL IT SNOW WEDNESDAY EVENING',\n", + " 'WILL IT SNOW THURSDAY EVENING',\n", + " 'WILL IT SNOW FRIDAY EVENING',\n", + " 'WILL IT SNOW SATURDAY EVENING',\n", + " 'WILL IT SNOW TODAY NIGHT',\n", + " 'WILL IT SNOW TOMORROW NIGHT',\n", + " 'WILL IT SNOW SUNDAY NIGHT',\n", + " 'WILL IT SNOW MONDAY NIGHT',\n", + " 'WILL IT SNOW TUESDAY NIGHT',\n", + " 'WILL IT SNOW WEDNESDAY NIGHT',\n", + " 'WILL IT SNOW THURSDAY NIGHT',\n", + " 'WILL IT SNOW FRIDAY NIGHT',\n", + " 'WILL IT SNOW SATURDAY NIGHT',\n", + " 'WILL IT RAIN TODAY MORNING',\n", + " 'WILL IT RAIN TOMORROW MORNING',\n", + " 'WILL IT RAIN SUNDAY MORNING',\n", + " 'WILL IT RAIN MONDAY MORNING',\n", + " 'WILL IT RAIN TUESDAY MORNING',\n", + " 'WILL IT RAIN WEDNESDAY MORNING',\n", + " 'WILL IT RAIN THURSDAY MORNING',\n", + " 'WILL IT RAIN FRIDAY MORNING',\n", + " 'WILL IT RAIN SATURDAY MORNING',\n", + " 'WILL IT RAIN TODAY AFTERNOON',\n", + " 'WILL IT RAIN TOMORROW AFTERNOON',\n", + " 'WILL IT RAIN SUNDAY AFTERNOON',\n", + " 'WILL IT RAIN MONDAY AFTERNOON',\n", + " 'WILL IT RAIN TUESDAY AFTERNOON',\n", + " 'WILL IT RAIN WEDNESDAY AFTERNOON',\n", + " 'WILL IT RAIN THURSDAY AFTERNOON',\n", + " 'WILL IT RAIN FRIDAY AFTERNOON',\n", + " 'WILL IT RAIN SATURDAY AFTERNOON',\n", + " 'WILL IT RAIN TODAY EVENING',\n", + " 'WILL IT RAIN TOMORROW EVENING',\n", + " 'WILL IT RAIN SUNDAY EVENING',\n", + " 'WILL IT RAIN MONDAY EVENING',\n", + " 'WILL IT RAIN TUESDAY EVENING',\n", + " 'WILL IT RAIN WEDNESDAY EVENING',\n", + " 'WILL IT RAIN THURSDAY EVENING',\n", + " 'WILL IT RAIN FRIDAY EVENING',\n", + " 'WILL IT RAIN SATURDAY EVENING',\n", + " 'WILL IT RAIN TODAY NIGHT',\n", + " 'WILL IT RAIN TOMORROW NIGHT',\n", + " 'WILL IT RAIN SUNDAY NIGHT',\n", + " 'WILL IT RAIN MONDAY NIGHT',\n", + " 'WILL IT RAIN TUESDAY NIGHT',\n", + " 'WILL IT RAIN WEDNESDAY NIGHT',\n", + " 'WILL IT RAIN THURSDAY NIGHT',\n", + " 'WILL IT RAIN FRIDAY NIGHT',\n", + " 'WILL IT RAIN SATURDAY NIGHT',\n", + " 'WILL IT BE WINDY TODAY MORNING',\n", + " 'WILL IT BE WINDY TOMORROW MORNING',\n", + " 'WILL IT BE WINDY SUNDAY MORNING',\n", + " 'WILL IT BE WINDY MONDAY MORNING',\n", + " 'WILL IT BE WINDY TUESDAY MORNING',\n", + " 'WILL IT BE WINDY WEDNESDAY MORNING',\n", + " 'WILL IT BE WINDY THURSDAY MORNING',\n", + " 'WILL IT BE WINDY FRIDAY MORNING',\n", + " 'WILL IT BE WINDY SATURDAY MORNING',\n", + " 'WILL IT BE WINDY TODAY AFTERNOON',\n", + " 'WILL IT BE WINDY TOMORROW AFTERNOON',\n", + " 'WILL IT BE WINDY SUNDAY AFTERNOON',\n", + " 'WILL IT BE WINDY MONDAY AFTERNOON',\n", + " 'WILL IT BE WINDY TUESDAY AFTERNOON',\n", + " 'WILL IT BE WINDY WEDNESDAY AFTERNOON',\n", + " 'WILL IT BE WINDY THURSDAY AFTERNOON',\n", + " 'WILL IT BE WINDY FRIDAY AFTERNOON',\n", + " 'WILL IT BE WINDY SATURDAY AFTERNOON',\n", + " 'WILL IT BE WINDY TODAY EVENING',\n", + " 'WILL IT BE WINDY TOMORROW EVENING',\n", + " 'WILL IT BE WINDY SUNDAY EVENING',\n", + " 'WILL IT BE WINDY MONDAY EVENING',\n", + " 'WILL IT BE WINDY TUESDAY EVENING',\n", + " 'WILL IT BE WINDY WEDNESDAY EVENING',\n", + " 'WILL IT BE WINDY THURSDAY EVENING',\n", + " 'WILL IT BE WINDY FRIDAY EVENING',\n", + " 'WILL IT BE WINDY SATURDAY EVENING',\n", + " 'WILL IT BE WINDY TODAY NIGHT',\n", + " 'WILL IT BE WINDY TOMORROW NIGHT',\n", + " 'WILL IT BE WINDY SUNDAY NIGHT',\n", + " 'WILL IT BE WINDY MONDAY NIGHT',\n", + " 'WILL IT BE WINDY TUESDAY NIGHT',\n", + " 'WILL IT BE WINDY WEDNESDAY NIGHT',\n", + " 'WILL IT BE WINDY THURSDAY NIGHT',\n", + " 'WILL IT BE WINDY FRIDAY NIGHT',\n", + " 'WILL IT BE WINDY SATURDAY NIGHT',\n", + " 'WILL IT SLEET TODAY MORNING',\n", + " 'WILL IT SLEET TOMORROW MORNING',\n", + " 'WILL IT SLEET SUNDAY MORNING',\n", + " 'WILL IT SLEET MONDAY MORNING',\n", + " 'WILL IT SLEET TUESDAY MORNING',\n", + " 'WILL IT SLEET WEDNESDAY MORNING',\n", + " 'WILL IT SLEET THURSDAY MORNING',\n", + " 'WILL IT SLEET FRIDAY MORNING',\n", + " 'WILL IT SLEET SATURDAY MORNING',\n", + " 'WILL IT SLEET TODAY AFTERNOON',\n", + " 'WILL IT SLEET TOMORROW AFTERNOON',\n", + " 'WILL IT SLEET SUNDAY AFTERNOON',\n", + " 'WILL IT SLEET MONDAY AFTERNOON',\n", + " 'WILL IT SLEET TUESDAY AFTERNOON',\n", + " 'WILL IT SLEET WEDNESDAY AFTERNOON',\n", + " 'WILL IT SLEET THURSDAY AFTERNOON',\n", + " 'WILL IT SLEET FRIDAY AFTERNOON',\n", + " 'WILL IT SLEET SATURDAY AFTERNOON',\n", + " 'WILL IT SLEET TODAY EVENING',\n", + " 'WILL IT SLEET TOMORROW EVENING',\n", + " 'WILL IT SLEET SUNDAY EVENING',\n", + " 'WILL IT SLEET MONDAY EVENING',\n", + " 'WILL IT SLEET TUESDAY EVENING',\n", + " 'WILL IT SLEET WEDNESDAY EVENING',\n", + " 'WILL IT SLEET THURSDAY EVENING',\n", + " 'WILL IT SLEET FRIDAY EVENING',\n", + " 'WILL IT SLEET SATURDAY EVENING',\n", + " 'WILL IT SLEET TODAY NIGHT',\n", + " 'WILL IT SLEET TOMORROW NIGHT',\n", + " 'WILL IT SLEET SUNDAY NIGHT',\n", + " 'WILL IT SLEET MONDAY NIGHT',\n", + " 'WILL IT SLEET TUESDAY NIGHT',\n", + " 'WILL IT SLEET WEDNESDAY NIGHT',\n", + " 'WILL IT SLEET THURSDAY NIGHT',\n", + " 'WILL IT SLEET FRIDAY NIGHT',\n", + " 'WILL IT SLEET SATURDAY NIGHT',\n", + " 'WILL IT BE SUNNY TODAY MORNING',\n", + " 'WILL IT BE SUNNY TOMORROW MORNING',\n", + " 'WILL IT BE SUNNY SUNDAY MORNING',\n", + " 'WILL IT BE SUNNY MONDAY MORNING',\n", + " 'WILL IT BE SUNNY TUESDAY MORNING',\n", + " 'WILL IT BE SUNNY WEDNESDAY MORNING',\n", + " 'WILL IT BE SUNNY THURSDAY MORNING',\n", + " 'WILL IT BE SUNNY FRIDAY MORNING',\n", + " 'WILL IT BE SUNNY SATURDAY MORNING',\n", + " 'WILL IT BE SUNNY TODAY AFTERNOON',\n", + " 'WILL IT BE SUNNY TOMORROW AFTERNOON',\n", + " 'WILL IT BE SUNNY SUNDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY MONDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY TUESDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY WEDNESDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY THURSDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY FRIDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY SATURDAY AFTERNOON',\n", + " 'WILL IT BE SUNNY TODAY EVENING',\n", + " 'WILL IT BE SUNNY TOMORROW EVENING',\n", + " 'WILL IT BE SUNNY SUNDAY EVENING',\n", + " 'WILL IT BE SUNNY MONDAY EVENING',\n", + " 'WILL IT BE SUNNY TUESDAY EVENING',\n", + " 'WILL IT BE SUNNY WEDNESDAY EVENING',\n", + " 'WILL IT BE SUNNY THURSDAY EVENING',\n", + " 'WILL IT BE SUNNY FRIDAY EVENING',\n", + " 'WILL IT BE SUNNY SATURDAY EVENING',\n", + " 'WILL IT BE SUNNY TODAY NIGHT',\n", + " 'WILL IT BE SUNNY TOMORROW NIGHT',\n", + " 'WILL IT BE SUNNY SUNDAY NIGHT',\n", + " 'WILL IT BE SUNNY MONDAY NIGHT',\n", + " 'WILL IT BE SUNNY TUESDAY NIGHT',\n", + " 'WILL IT BE SUNNY WEDNESDAY NIGHT',\n", + " 'WILL IT BE SUNNY THURSDAY NIGHT',\n", + " 'WILL IT BE SUNNY FRIDAY NIGHT',\n", + " 'WILL IT BE SUNNY SATURDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SUNDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON MONDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON TUESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON FRIDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SEATTLE ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'TOMORROW NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'THURSDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR SAN FRANCISCO ON '\n", + " 'SATURDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE {ForecastKeyword} FOR TOKYO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SEATTLE ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR SAN FRANCISCO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FOR TOKYO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TOMORROW NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SUNDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON MONDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON TUESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON THURSDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON FRIDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SEATTLE ON SATURDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TODAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON MONDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR SAN FRANCISCO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY MORNING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY EVENING',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE FORECAST FOR TOKYO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SEATTLE ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR SAN FRANCISCO ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER REPORT FOR TOKYO ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON WEDNESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SEATTLE ON SATURDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TODAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TOMORROW '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SUNDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON MONDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON TUESDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON '\n", + " 'WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON THURSDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON FRIDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR SAN FRANCISCO ON SATURDAY '\n", + " 'NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " 'MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY MORNING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY '\n", + " 'AFTERNOON',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY '\n", + " 'EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY EVENING',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TODAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TOMORROW NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SUNDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON MONDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON TUESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON WEDNESDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON THURSDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON FRIDAY NIGHT',\n", + " 'WHAT IS THE WEATHER FORECAST FOR TOKYO ON SATURDAY NIGHT']}\n" + ] + } + ], + "source": [ + "# Next, load all the intents from Naomi\n", + "import configparser\n", + "import importlib\n", + "import inspect\n", + "from naomi import i18n\n", + "from naomi import profile\n", + "from pprint import pprint\n", + "\n", + "class PluginInfo(object):\n", + " def __init__(self, cp, plugin_class, translations, directory):\n", + " self._cp = cp\n", + " self._plugin_class = plugin_class\n", + " self._translations = translations\n", + " self._path = directory\n", + "\n", + " def _get_optional_info(self, *args):\n", + " try:\n", + " value = self._cp.get(*args)\n", + " except configparser.Error:\n", + " value = ''\n", + " return value\n", + "\n", + " @property\n", + " def plugin_class(self):\n", + " return self._plugin_class\n", + "\n", + " @plugin_class.setter\n", + " def plugin_class(self, value):\n", + " if self._plugin_class is not None:\n", + " raise RuntimeError('Changing a plugin class is not allowed!')\n", + " self._plugins_class = value\n", + "\n", + " @property\n", + " def translations(self):\n", + " return self._translations\n", + "\n", + " @property\n", + " def name(self):\n", + " return self._cp.get('Plugin', 'Name')\n", + "\n", + " @property\n", + " def version(self):\n", + " return self._cp.get('Plugin', 'Version')\n", + "\n", + " @property\n", + " def license(self):\n", + " return self._cp.get('Plugin', 'License')\n", + "\n", + " @property\n", + " def description(self):\n", + " return self._get_optional_info('Plugin', 'Description')\n", + "\n", + " @property\n", + " def url(self):\n", + " return self._get_optional_info('Plugin', 'URL')\n", + "\n", + " @property\n", + " def author_name(self):\n", + " return self._get_optional_info('Author', 'Name')\n", + "\n", + " @property\n", + " def author_email(self):\n", + " return self._get_optional_info('Author', 'Email')\n", + "\n", + " @property\n", + " def author_url(self):\n", + " return self._get_optional_info('Author', 'URL')\n", + "\n", + "cp = configparser.RawConfigParser()\n", + "plugin_dirs = [\"/home/jess/Naomi/plugins/speechhandler\", \"/home/jess/.config/naomi/plugins/speechhandler\"]\n", + "plugins = {}\n", + "intent_templates = dict()\n", + "for plugin_dir in plugin_dirs:\n", + " for root, dirs, files in os.walk(plugin_dir, topdown=True):\n", + " for name in files:\n", + " if name == 'plugin.info':\n", + " sys.path.append(root)\n", + " cp.read(os.path.join(root, name))\n", + " plugin_name = cp.get('Plugin', 'Name')\n", + " # print(f\"{root}\\t{plugin_name}\")\n", + " spec = importlib.util.spec_from_file_location(\n", + " plugin_name,\n", + " os.path.join(root, '__init__.py')\n", + " )\n", + " print(root)\n", + " mod = importlib.util.module_from_spec(spec)\n", + " sys.modules[mod.__package__] = mod\n", + " spec.loader.exec_module(mod)\n", + " plugin_classes = inspect.getmembers(\n", + " mod,\n", + " lambda cls: inspect.isclass(cls)\n", + " )\n", + " for plugin_class in plugin_classes:\n", + " info = PluginInfo(\n", + " cp,\n", + " plugin_class[1],\n", + " i18n.parse_translations('/home/jess/Naomi/naomi/data/locale'),\n", + " root\n", + " )\n", + " try:\n", + " plugin = plugin_class[1](info)\n", + " intents = plugin.intents()\n", + " for intent in intents:\n", + " intent_templates[intent]=[]\n", + " for locale in intents[intent]['locale']:\n", + " if locale == 'en-US':\n", + " templates = intents[intent]['locale'][locale]['templates']\n", + " if 'keywords' in intents[intent]['locale'][locale]:\n", + " for keyword in intents[intent]['locale'][locale]['keywords']:\n", + " for template in templates:\n", + " if to_keyword(keyword) in template:\n", + " templates.extend([template.replace(to_keyword(keyword), word.upper()) for word in intents[intent]['locale'][locale]['keywords'][keyword]])\n", + " intent_templates[intent].extend(templates)\n", + " except Exception as e:\n", + " print(f\"Error: {e}\")\n", + "pprint(intent_templates)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ee4c74d7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-07-07 10:42:30.735498: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:477] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "E0000 00:00:1751899350.755440 526228 cuda_dnn.cc:8310] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "E0000 00:00:1751899350.760918 526228 cuda_blas.cc:1418] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2025-07-07 10:42:30.781092: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[-1.87536003e-03 -6.51287884e-02 2.36912202e-02 ... 1.13148279e-02\n", + " -7.72576965e-03 5.01537416e-03]\n", + " [-4.43227589e-03 -6.64739385e-02 2.15001591e-02 ... 5.72549319e-03\n", + " -2.81822309e-02 -1.01438081e-02]\n", + " [-8.43878090e-03 -4.51899655e-02 2.60083061e-02 ... 1.30947083e-02\n", + " -7.77546130e-03 1.81935681e-03]\n", + " ...\n", + " [ 9.49552003e-03 -1.07752644e-01 -2.62162536e-02 ... 2.00865790e-02\n", + " -1.86415315e-02 5.93831297e-03]\n", + " [-2.88311625e-03 -1.13439657e-01 -7.24473828e-03 ... 1.77199878e-02\n", + " -3.48682925e-02 -4.61524651e-05]\n", + " [ 1.35305235e-02 -8.86806026e-02 -2.42390260e-02 ... 1.95186306e-02\n", + " -1.44886384e-02 1.59479994e-02]]\n" + ] + } + ], + "source": [ + "import faiss\n", + "import numpy as np\n", + "from sentence_transformers import SentenceTransformer\n", + "\n", + "# Prepare the dataset and metadata\n", + "texts = []\n", + "intents = []\n", + "\n", + "for intent, phrases in intent_templates.items():\n", + " for phrase in phrases:\n", + " texts.append(phrase)\n", + " intents.append(intent)\n", + "\n", + "# Load embedding model\n", + "model = SentenceTransformer(\"sentence-transformers/nli-mpnet-base-v2\")\n", + "\n", + "# Compute embeddings\n", + "embeddings = model.encode(texts, convert_to_numpy=True, normalize_embeddings=True)\n", + "print(embeddings)\n", + "\n", + "# Create FAISS index (cosine = inner product on normalized vectors)\n", + "dimension = embeddings.shape[1]\n", + "index = faiss.IndexFlatIP(dimension)\n", + "index.add(embeddings)\n", + "\n", + "# Search function\n", + "def detect_intent(query, top_k=1):\n", + " query_vector = model.encode([query], convert_to_numpy=True, normalize_embeddings=True)\n", + " scores, indices = index.search(query_vector, top_k)\n", + "\n", + " results = []\n", + " for idx, score in zip(indices[0], scores[0]):\n", + " results.append({\n", + " \"text\": texts[idx],\n", + " \"intent\": intents[idx],\n", + " \"score\": float(score)\n", + " })\n", + " return results" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "9c6e438f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'text': 'WHAT IS THE TIME', 'intent': 'ClockIntent', 'score': 0.9485380053520203}\n" + ] + } + ], + "source": [ + "query = \"what's the time?\"\n", + "results = detect_intent(query)\n", + "\n", + "for result in results:\n", + " print(result) " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "b521e061", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: WHEN ON I OFF WILL FOR OFF, actual intent: unclear, detected intent: ShutdownIntent, score: 0.579043984413147\n", + "\n", + "text: I READ YOU MY SAN, actual intent: unclear, detected intent: NewsIntent, score: 0.5683563947677612\n", + "\n", + "text: BE MORNING YOU IT, actual intent: unclear, detected intent: GreetingsIntent, score: 0.8085642457008362\n", + "\n", + "text: BE TURN LAUGH I THERE AND YOU THIS, actual intent: unclear, detected intent: JokeIntent, score: 0.7666413187980652\n", + "\n", + "text: BE WHEN A I NOW FRIENDS I UP FRIDAY TURN AND WHOSE IT BEING THERE AND I WHEN LAUGH THERE, actual intent: unclear, detected intent: JokeIntent, score: 0.5813553333282471\n", + "\n", + "text: THIS I TOMORROW SLEET WORK I I WORK TODAY I FOR I I, actual intent: unclear, detected intent: WeatherIntent, score: 0.6992573738098145\n", + "\n", + "text: NOW NAOMI IT IT WORK NAOMI IS NOW, actual intent: HackerNewsIntent, detected intent: unclear, score: 0.3054477572441101\n", + "\n", + "text: WHAT NAOMI WHAT ON ON, actual intent: WeatherIntent, detected intent: unclear, score: 0.46966254711151123\n", + "\n", + "text: NAOMI RIGHT WHAT, actual intent: JokeIntent, detected intent: unclear, score: 0.38481903076171875\n", + "\n", + "text: A ME FOR WHAT I YOU, actual intent: JokeIntent, detected intent: unclear, score: 0.42310792207717896\n", + "\n", + "text: LAUGH HAPPENING ON READ WHEN SEATTLE A MONDAY THERE IT YOU RIGHT WHOSE A WORK I WHOSE PLAY IN, actual intent: unclear, detected intent: JokeIntent, score: 0.5124565362930298\n", + "\n", + "text: AND I WHAT ON SAN KNOW KNOW KNOW YOURSELF NOW WILL TUESDAY A READ NEWS YOU ON FOR MONDAY MY WHOSE, actual intent: unclear, detected intent: NewsIntent, score: 0.6162143349647522\n", + "\n", + "text: WORK SAN MY A SNOW A BE I KNOW SEATTLE YOU THERE IN BE, actual intent: unclear, detected intent: WeatherIntent, score: 0.7327550053596497\n", + "\n", + "text: OFF LAUGH THERE IS, actual intent: unclear, detected intent: JokeIntent, score: 0.6888076066970825\n", + "\n", + "text: LAUGH READ A, actual intent: unclear, detected intent: JokeIntent, score: 0.6905299425125122\n", + "\n", + "text: WEATHER WHAT SUNDAY LAUGH WILL IT I NEW NEW, actual intent: unclear, detected intent: WeatherIntent, score: 0.747063934803009\n", + "\n", + "text: SAY IS BE NAOMI IN RIGHT RIGHT IS OF WHAT ON IS NOW IS RIGHT WORK SAY NOW WHICH ON ON RIGHT ON FIRST ON IS IS ON RIGHT IS NAOMI, actual intent: HackerNewsIntent, detected intent: unclear, score: 0.35105791687965393\n", + "\n", + "text: BE BEING NOW IS ON ON NAOMI IT WHAT ON WHAT IN, actual intent: JokeIntent, detected intent: unclear, score: 0.4572288990020752\n", + "\n", + "text: SEATTLE BE I AND YOU A I SNOW ON, actual intent: unclear, detected intent: WeatherIntent, score: 0.7854235172271729\n", + "\n", + "text: LAUGH SNOW ME TURN IT LIFE NOW, actual intent: unclear, detected intent: JokeIntent, score: 0.660541296005249\n", + "\n", + "text: MORNING AND I SUNNY, actual intent: unclear, detected intent: WeatherIntent, score: 0.8016514182090759\n", + "\n", + "text: BE A I READ I WHOSE ON LAUGH, actual intent: unclear, detected intent: JokeIntent, score: 0.704179048538208\n", + "\n", + "text: BE IS ON HACKER NEW, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.6746166944503784\n", + "\n", + "text: BUT BE SHUT NOW SLEETING RIGHT WITH IN BE A, actual intent: unclear, detected intent: WeatherIntent, score: 0.5940290689468384\n", + "\n", + "text: BE TUESDAY IS WORK HAPPENING, actual intent: unclear, detected intent: WeatherIntent, score: 0.6261963248252869\n", + "\n", + "text: NAOMI ON, actual intent: JokeIntent, detected intent: unclear, score: 0.31457656621932983\n", + "\n", + "text: SUNNY A THERE, actual intent: JokeIntent, detected intent: WeatherIntent, score: 0.7763704061508179\n", + "\n", + "text: THERE I FORECAST AND A, actual intent: unclear, detected intent: WeatherIntent, score: 0.6553606986999512\n", + "\n", + "text: BE TELL I WILL NOW READ I AND I AND I IS, actual intent: unclear, detected intent: NewsIntent, score: 0.6611537337303162\n", + "\n", + "text: NOW ON YOU SAY IS IS TIME IS WINDY, actual intent: unclear, detected intent: WeatherIntent, score: 0.8471869230270386\n", + "\n", + "text: AND AFTERNOON AFTERNOON MORNING SNOW HAPPENING THERE, actual intent: unclear, detected intent: WeatherIntent, score: 0.782681405544281\n", + "\n", + "text: BE A AFTERNOON ON HACKER, actual intent: unclear, detected intent: WeatherIntent, score: 0.5393338203430176\n", + "\n", + "text: BE THERE LAUGH I WHOSE TUESDAY AND SUNDAY ON MY READ YOU, actual intent: unclear, detected intent: WeatherIntent, score: 0.5120211839675903\n", + "\n", + "text: BE YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.6169094443321228\n", + "\n", + "text: BE RIGHT HAVE, actual intent: NotificationsIntent, detected intent: unclear, score: 0.4526330530643463\n", + "\n", + "text: BE ON BE WHOSE NEW TELL WHOSE YOU FOR I LAUGH WORK BE A YOU IT READ I IS A NEW MY IT NEW THERE IT A FOR, actual intent: unclear, detected intent: JokeIntent, score: 0.5907882452011108\n", + "\n", + "text: AND YOU ON OFF CAN FOR AFTERNOON LAUGH, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5954617261886597\n", + "\n", + "text: WHAT ON MY, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5135500431060791\n", + "\n", + "text: BE WHAT AND, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5613065958023071\n", + "\n", + "text: WHAT A HAPPENING HAPPENING TELL IN WINDY, actual intent: unclear, detected intent: WeatherIntent, score: 0.8021295070648193\n", + "\n", + "text: ON LAUGH SLEET NEWS I, actual intent: unclear, detected intent: WeatherIntent, score: 0.5388002395629883\n", + "\n", + "text: BE NOW RAIN AFTERNOON WORK MY BE, actual intent: unclear, detected intent: WeatherIntent, score: 0.7817527055740356\n", + "\n", + "text: BE I YOU LIFE SNOW HAVE BE AND WILL IT ME YOU, actual intent: unclear, detected intent: WeatherIntent, score: 0.6283658742904663\n", + "\n", + "text: DID HACKER CAN PLAY RAIN I SUNNY OF NEWS SHUT IS AND UNIVERSE WHEN I READ I IS WILL ON, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.6088316440582275\n", + "\n", + "text: BE I SNOWING ON TELL A READ I I WHAT DID I NIGHT LAUGH, actual intent: unclear, detected intent: WeatherIntent, score: 0.5843684673309326\n", + "\n", + "text: BE I SUNDAY I WHOSE YOU ON, actual intent: unclear, detected intent: WeatherIntent, score: 0.6745964884757996\n", + "\n", + "text: IN TOMORROW I, actual intent: unclear, detected intent: WeatherIntent, score: 0.5992622375488281\n", + "\n", + "text: BE IT AND WINDY, actual intent: unclear, detected intent: WeatherIntent, score: 0.8166751861572266\n", + "\n", + "text: SUNDAY KNOW AND KNOW READ, actual intent: unclear, detected intent: WeatherIntent, score: 0.5220340490341187\n", + "\n", + "text: ON LAUGH UNIVERSE YOU SHUT WORK, actual intent: unclear, detected intent: StopIntent, score: 0.5567178726196289\n", + "\n", + "text: BE LIFE CAN YOURSELF WORK IS, actual intent: MeaningOfLifeIntent, detected intent: unclear, score: 0.3992610573768616\n", + "\n", + "text: BE I ON WILL SAN NEW, actual intent: WeatherIntent, detected intent: unclear, score: 0.43883997201919556\n", + "\n", + "text: ON I IS YOU NOW FOR SAY WHOSE AND IS BE KNOW NEW TELL ON MONDAY HAVE A SAN RIGHT READ NIGHT FOR AND A LAUGH SLEETING, actual intent: unclear, detected intent: WeatherIntent, score: 0.5510373115539551\n", + "\n", + "text: WHEN WEATHER, actual intent: unclear, detected intent: WeatherIntent, score: 0.7070874571800232\n", + "\n", + "text: WHEN KNOW IS FOR KNOW FOR AND FORECAST SNOW AND SNOW IT FACEBOOK PLAY JOKES WHAT READ WHOSE READ CAN, actual intent: unclear, detected intent: WeatherIntent, score: 0.5499119758605957\n", + "\n", + "text: BE SNOW BE ON FRIDAY WORK TURN, actual intent: unclear, detected intent: WeatherIntent, score: 0.8331270217895508\n", + "\n", + "text: NAOMI THERE WEATHER NIGHT I AND FOR WILL, actual intent: unclear, detected intent: NWSWeatherIntent, score: 0.7026240229606628\n", + "\n", + "text: BE A IN TELL AND WHOSE I WILL HACKER WHAT, actual intent: unclear, detected intent: ClockIntent, score: 0.5435735583305359\n", + "\n", + "text: FOR WHAT READ WINDY, actual intent: unclear, detected intent: WeatherIntent, score: 0.6706386208534241\n", + "\n", + "text: BE A FOR BE, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5124961137771606\n", + "\n", + "text: BE THERE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5225192308425903\n", + "\n", + "text: BE YOU MY, actual intent: unclear, detected intent: ThankYouIntent, score: 0.526689887046814\n", + "\n", + "text: AND BE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5505994558334351\n", + "\n", + "text: BE YOU WHAT DID YOU LAUGH, actual intent: unclear, detected intent: JokeIntent, score: 0.7000642418861389\n", + "\n", + "text: FRIENDS IN WEDNESDAY WILL, actual intent: unclear, detected intent: WeatherIntent, score: 0.6440490484237671\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: BE FOR HAVE, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5758096575737\n", + "\n", + "text: A MONDAY YOU TODAY I AND ON UNIVERSE YOU WORK KNOW, actual intent: unclear, detected intent: WeatherIntent, score: 0.5870964527130127\n", + "\n", + "text: BE IT NEWS, actual intent: unclear, detected intent: NewsIntent, score: 0.7094486951828003\n", + "\n", + "text: BE A WILL I KNOW MY SUNNY, actual intent: unclear, detected intent: WeatherIntent, score: 0.6391788721084595\n", + "\n", + "text: BE TELL THIS YOU HACKER, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.732269287109375\n", + "\n", + "text: BE ON RAIN WEATHER READ WORK AFTERNOON FOR, actual intent: unclear, detected intent: WeatherIntent, score: 0.7125563621520996\n", + "\n", + "text: A SUNNY I NEWS OF, actual intent: unclear, detected intent: WeatherIntent, score: 0.677685022354126\n", + "\n", + "text: BE HAPPENING TOMORROW TOMORROW SAN WHEN HAVE, actual intent: unclear, detected intent: WeatherIntent, score: 0.6717333793640137\n", + "\n", + "text: BE I LAUGH FRIENDS WHOSE KNOW RAINING WILL, actual intent: unclear, detected intent: JokeIntent, score: 0.5068522691726685\n", + "\n", + "text: BE WHAT I NOW I ON BE A ANSWER A IS I SUNNY, actual intent: unclear, detected intent: WeatherIntent, score: 0.6194796562194824\n", + "\n", + "text: BE I IS NOW NOW IS RIGHT NIGHT AND IN BUT WHOSE ON NIGHT LAUGH BIRTHDAY IN NEW, actual intent: unclear, detected intent: GoodbyeIntent, score: 0.5034801363945007\n", + "\n", + "text: FOR NOW SNOW FOR WHEN EVERYTHING CAN ULTIMATE, actual intent: unclear, detected intent: WeatherIntent, score: 0.6710891127586365\n", + "\n", + "text: RIGHT MUSIC HEADLINES ON MY A LAUGH WHAT WORK WHAT WHAT HAPPENING WHAT, actual intent: unclear, detected intent: NewsIntent, score: 0.5313191413879395\n", + "\n", + "text: SAN MY WHEN READ AND OFF MY, actual intent: unclear, detected intent: NewsIntent, score: 0.5830048322677612\n", + "\n", + "text: READ WILL TIME SNOW I OF THERE, actual intent: unclear, detected intent: WeatherIntent, score: 0.7472414970397949\n", + "\n", + "text: RIGHT FRIENDS UNIVERSE WHAT NEWS, actual intent: unclear, detected intent: NewsIntent, score: 0.6361217498779297\n", + "\n", + "text: BE NEW AND IS LIFE SNOWING NEW A, actual intent: unclear, detected intent: WeatherIntent, score: 0.6246392130851746\n", + "\n", + "text: READ ON DID RAIN ON NEWS, actual intent: unclear, detected intent: WeatherIntent, score: 0.6863150596618652\n", + "\n", + "text: BE A WORK NOW ON SUNNY, actual intent: unclear, detected intent: WeatherIntent, score: 0.7164731621742249\n", + "\n", + "text: ON WORK WHAT NEWS NEWS TOKYO FOR NAOMI, actual intent: unclear, detected intent: WeatherIntent, score: 0.5973369479179382\n", + "\n", + "text: YOU A YOU LAUGH TOMORROW THERE IS IT AND TIME, actual intent: unclear, detected intent: WeatherIntent, score: 0.5412325859069824\n", + "\n", + "text: FOR YOU MY, actual intent: unclear, detected intent: ThankYouIntent, score: 0.6045542359352112\n", + "\n", + "text: MY ME NEWS NAOMI, actual intent: unclear, detected intent: NewsIntent, score: 0.5480164289474487\n", + "\n", + "text: FOR A ME KNOW YOU IN, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.592269778251648\n", + "\n", + "text: THIS THERE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5171125531196594\n", + "\n", + "text: READ NEW MY, actual intent: unclear, detected intent: NewsIntent, score: 0.6199232339859009\n", + "\n", + "text: NEWS WHOSE NOW NOW I MY AND, actual intent: unclear, detected intent: NewsIntent, score: 0.6741812229156494\n", + "\n", + "text: WHEN HAVE PLAY, actual intent: unclear, detected intent: FrotzIntent, score: 0.6623365879058838\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: SO, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6064915657043457\n", + "\n", + "text: UM SO, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6934841871261597\n", + "\n", + "text: NEW JOKE IT NEWS TOMORROW WHOSE THIS IT NIGHT NOW, actual intent: unclear, detected intent: WeatherIntent, score: 0.5577683448791504\n", + "\n", + "text: BE NEW ON HAPPENING BE, actual intent: unclear, detected intent: NewsIntent, score: 0.5054916143417358\n", + "\n", + "text: FRIDAY, actual intent: unclear, detected intent: WeatherIntent, score: 0.6109558343887329\n", + "\n", + "text: IN WILL READ MORNING MONDAY IT ME IS ON IT YOU A READ TELL NOW KNOW IN IS IN YOU EVENING WORK WILL I AND CAN FOR I I LAUGH, actual intent: unclear, detected intent: WeatherIntent, score: 0.5694320201873779\n", + "\n", + "text: AND READ ON IN, actual intent: unclear, detected intent: NewsIntent, score: 0.6022428274154663\n", + "\n", + "text: BE LAUGH WORK, actual intent: unclear, detected intent: JokeIntent, score: 0.5965266227722168\n", + "\n", + "text: BE AND RIGHT HAVE YOU AND HAVE ME MY NIGHT A BIRTHDAYS I TURN I AND I READ BEING TUESDAY, actual intent: unclear, detected intent: WeatherIntent, score: 0.5506328344345093\n", + "\n", + "text: WHAT YOU SHUTDOWN HAPPENING YOU I MORNING LIFE WORK MEANING KNOW THERE TELL WHOSE YOU SAN WORK NOW SUNNY, actual intent: unclear, detected intent: WeatherIntent, score: 0.5655901432037354\n", + "\n", + "text: BE READ NOW I HAPPENING AND CAN I I BEING IT LAUGH HACKER WHAT IT A A I YOU IT NEWS I TOMORROW TELL NEW WORK WORK, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.5848547220230103\n", + "\n", + "text: HAPPENING IT NEW MY HAPPENING AND MONDAY TELL I RIGHT I IT NIGHT SLEET SUNDAY AND I TELL READ WHOSE YOURSELF SLEET UP ON READ HAVE NIGHT IN I NIGHT PLAY IT BEING HACKER YOU, actual intent: unclear, detected intent: WeatherIntent, score: 0.6638357043266296\n", + "\n", + "text: TELL YOU NOW ON, actual intent: unclear, detected intent: ClockIntent, score: 0.6117075681686401\n", + "\n", + "text: READ NOW TUESDAY WHOSE FOR CAN, actual intent: unclear, detected intent: WeatherIntent, score: 0.5539888143539429\n", + "\n", + "text: BE KNOW CAN WORK WHOSE NEW NOW NEW BE SEATTLE I BE A OFF, actual intent: unclear, detected intent: WeatherIntent, score: 0.5528509616851807\n", + "\n", + "text: BE SNOW IS NOW PLAY SLEET A WORK SLEET SEATTLE I I ON BE FOR HACKER I KNOW I LAUGH NIGHT WITH NEW DID MY KNOW KNOW SNOW AND I KNOW RIGHT AND WHOSE NEW WORK KNOW AND THERE TUESDAY, actual intent: unclear, detected intent: WeatherIntent, score: 0.5984078049659729\n", + "\n", + "text: TOKYO AND MONDAY ON KNOW NEW AND, actual intent: unclear, detected intent: WeatherIntent, score: 0.7195768356323242\n", + "\n", + "text: TELL I READ A FOR, actual intent: unclear, detected intent: NewsIntent, score: 0.6502119898796082\n", + "\n", + "text: YOU IN ON WHOSE IN STOP, actual intent: unclear, detected intent: StopIntent, score: 0.6504909992218018\n", + "\n", + "text: BE AND ON I LAUGH IT NOW NEWS, actual intent: unclear, detected intent: JokeIntent, score: 0.7799203395843506\n", + "\n", + "text: IS NOW READ I BUT YOU CAN, actual intent: unclear, detected intent: NewsIntent, score: 0.582842230796814\n", + "\n", + "text: KNOW I ANSWER A WORK FOR WHAT FOR BUT KNOW READ SLEET YOU I IS, actual intent: unclear, detected intent: CheckEmailIntent, score: 0.5015010833740234\n", + "\n", + "text: WHOSE LIFE SEATTLE IN TUESDAY WORK WHOSE CAN ON FOR WHAT LAUGH, actual intent: unclear, detected intent: NWSWeatherIntent, score: 0.5651944875717163\n", + "\n", + "text: NIGHT BUT WEDNESDAY, actual intent: unclear, detected intent: WeatherIntent, score: 0.7569876909255981\n", + "\n", + "text: WORK IT KNOW ON WINDY, actual intent: unclear, detected intent: WeatherIntent, score: 0.7671010494232178\n", + "\n", + "text: TOMORROW WINDY I CAN HACKER ON WORK PLAY KNOW WORK WHOSE UNIVERSE WHOSE EVENING LAUGH IS LAUGH WHAT ON TOMORROW READ YOU READ TELL EMAILS A, actual intent: unclear, detected intent: WeatherIntent, score: 0.5403608083724976\n", + "\n", + "text: NOW NOW IT WHAT FRIENDS DID ON WINDY, actual intent: unclear, detected intent: WeatherIntent, score: 0.5385550260543823\n", + "\n", + "text: KNOW WHAT NEWS WINDY ON AND WHAT NOW IN HACKER, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.8385337591171265\n", + "\n", + "text: BE A WILL AND WHOSE SNOW BEING LAUGH, actual intent: unclear, detected intent: WeatherIntent, score: 0.5916377305984497\n", + "\n", + "text: NEWS WHOSE LAUGH AND WHOSE KNOW FOR, actual intent: unclear, detected intent: JokeIntent, score: 0.5537775754928589\n", + "\n", + "text: BE A WHOSE MY NOW, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5261939167976379\n", + "\n", + "text: IT'S STILL FRIDAY, actual intent: unclear, detected intent: WeatherIntent, score: 0.6417989134788513\n", + "\n", + "text: FOR SUNNY, actual intent: unclear, detected intent: WeatherIntent, score: 0.7949690222740173\n", + "\n", + "text: TOMORROW RIGHT I NEWS YOU UNIVERSE, actual intent: unclear, detected intent: WeatherIntent, score: 0.5775796175003052\n", + "\n", + "text: TOMORROW IT AND, actual intent: unclear, detected intent: WeatherIntent, score: 0.7365915775299072\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: BE AND YOU SAN LAUGH WORK THURSDAY MORNING, actual intent: unclear, detected intent: WeatherIntent, score: 0.6056501865386963\n", + "\n", + "text: BE SEATTLE OFF SHUT BE A WHEN TURN, actual intent: unclear, detected intent: ShutdownIntent, score: 0.5296337604522705\n", + "\n", + "text: NEWS YOU NOW MEANING IS, actual intent: unclear, detected intent: NewsIntent, score: 0.7196874022483826\n", + "\n", + "text: TURN WHOSE, actual intent: unclear, detected intent: LEDIntent, score: 0.5036492347717285\n", + "\n", + "text: BE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6217020750045776\n", + "\n", + "text: BE TURN, actual intent: unclear, detected intent: LEDIntent, score: 0.5023535490036011\n", + "\n", + "text: NAOMI QUELLE HEURE EST-IL, actual intent: ClockIntent, detected intent: unclear, score: 0.3656392991542816\n", + "\n", + "text: NAOMI QUELLE HEURE EST-IL, actual intent: ClockIntent, detected intent: unclear, score: 0.3656392991542816\n", + "\n", + "text: TITRES ONT, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5037766695022583\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: HELLO MAGICVOICE HOW ARE YOU TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5769136548042297\n", + "\n", + "text: HELLO MAGICVOICE HOW ARE YOU THIS AFTERNOON, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.5865377187728882\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: MAGICVOICE HELLO, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6461982727050781\n", + "\n", + "text: GOOD AFTERNOON MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6600679159164429\n", + "\n", + "text: THAT'S ENOUGH, actual intent: unclear, detected intent: StopIntent, score: 0.538102924823761\n", + "\n", + "text: THAT IS ENOUGH, actual intent: unclear, detected intent: StopIntent, score: 0.5189809799194336\n", + "\n", + "text: QUIT, actual intent: unclear, detected intent: StopIntent, score: 0.6638591289520264\n", + "\n", + "text: QUIT, actual intent: unclear, detected intent: StopIntent, score: 0.6638591289520264\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: HAVE UP UP AND AND UP BUT A AND NOW MORNING MAGICVOICE A, actual intent: StopIntent, detected intent: GreetingsIntent, score: 0.6052330732345581\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE HOW ARE YOU THIS MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6402198672294617\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: MAGICVOICE HOW ARE YOU THIS MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6402198672294617\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: HOW ARE YOU THIS MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5468164682388306\n", + "\n", + "text: LIFE TODAY NEWS YOU WHICH IS ON ON THERE A FOR WILL WHEN IS STOP I A BE ON BUT A FOR A WHOSE FOR ULTIMATE FOR UNIVERSE WHOSE I WHAT NEW RAIN READ AND TODAY SEATTLE AFTERNOON MY, actual intent: unclear, detected intent: WeatherIntent, score: 0.7387954592704773\n", + "\n", + "text: MAGICVOICE HOW YOU DOING, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.6315799355506897\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: MAGICVOICE WHAT A IS, actual intent: JokeIntent, detected intent: unclear, score: 0.42574018239974976\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: MAGICVOICE HOW ARE YOU THIS MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6402198672294617\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: MAGICVOICE HOW ARE YOU THIS MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6402198672294617\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE GOOD MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.7240151166915894\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: HELLO MAGICVOICE, actual intent: HowAreYouIntent, detected intent: unclear, score: 0.43533116579055786\n", + "\n", + "text: HELLO MAGICVOICE, actual intent: HowAreYouIntent, detected intent: unclear, score: 0.43533116579055786\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: HELLO MAGICVOICE, actual intent: HowAreYouIntent, detected intent: unclear, score: 0.43533116579055786\n", + "\n", + "text: HELLO MAGICVOICE, actual intent: HowAreYouIntent, detected intent: unclear, score: 0.43533116579055786\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: HOW ARE YOU THIS MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5468164682388306\n", + "\n", + "text: MAGICVOICE HOW ARE YOU THIS MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6402198672294617\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: HOW ARE YOU THIS MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5468164682388306\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: HOW ARE YOU TODAY MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5931004285812378\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: MAGICVOICE HOW ARE YOU TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5970054268836975\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: MAGICVOICE HOW YOU DOING TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5930221080780029\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: MAGICVOICE CAN YOU HEAR ME, actual intent: HowAreYouIntent, detected intent: CanYouHearMe, score: 0.770674467086792\n", + "\n", + "text: MY SATURDAY LIFE, actual intent: unclear, detected intent: WeatherIntent, score: 0.5495367050170898\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: HELLO MAGICVOICE, actual intent: HowAreYouIntent, detected intent: unclear, score: 0.43533116579055786\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: RAINING IS MAGICVOICE, actual intent: unclear, detected intent: WeatherIntent, score: 0.6468549966812134\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE GOOD MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.7240151166915894\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE STOP NO THANK YOU, actual intent: StopIntent, detected intent: unclear, score: 0.4669509530067444\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: MAGICVOICE GOOD MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.7240151166915894\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: A, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6967291235923767\n", + "\n", + "text: UP THERE A TODAY, actual intent: unclear, detected intent: WeatherIntent, score: 0.619563102722168\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: A MAKE WHAT SUNNY ON SLEETING WHAT CAN SNOW WHAT LIFE HOW WHEN ON WHAT LAUGH UP AFTERNOON LAUGH WHAT SLEET FOR AFTERNOON NEW NEW AND AFTERNOON SHUT ON, actual intent: unclear, detected intent: WeatherIntent, score: 0.7702242732048035\n", + "\n", + "text: BE SEATTLE I ON WHAT ON, actual intent: unclear, detected intent: WeatherIntent, score: 0.6922001242637634\n", + "\n", + "text: MAGICVOICE GOOD MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.7240151166915894\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: FORECAST SEATTLE RAIN THANKS TOKYO THERE SLEETING UP FOR IN BE FOR, actual intent: unclear, detected intent: WeatherIntent, score: 0.7503381371498108\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE HOW ARE YOU TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5892019867897034\n", + "\n", + "text: MAGICVOICE HOW YOU DOING, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.6315799355506897\n", + "\n", + "text: A MAGICVOICE HOW ARE YOU DOING, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.573168158531189\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: A, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6967291235923767\n", + "\n", + "text: UP HAVE THERE OFF A, actual intent: unclear, detected intent: StopIntent, score: 0.5058449506759644\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: SHUT I CAN ON THERE SAY A NEW THERE IS LAUGH I IN ON BE ON ON AND IT A IS ON THIS MAGICVOICE ON ON ON ANSWER WORK ANSWER WHAT AND UP IN THERE ON, actual intent: unclear, detected intent: JokeIntent, score: 0.5599455237388611\n", + "\n", + "text: NOW YOU NOW LAUGH WHAT IS SHUT EVENING UNIVERSE HAVE IS READ CAN NEWS JOKES SAY IN ANSWER A IS LAUGH READ ON WHAT SHUT RIGHT STOP WHAT IS IS WHAT ON RIGHT ON ON BUT BUT HAVE A IS THANK CAN ON TODAY ON NEWS ANSWER HAVE MY ON WHAT KNOW I THERE A, actual intent: unclear, detected intent: NewsIntent, score: 0.5833034515380859\n", + "\n", + "text: A, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6967291235923767\n", + "\n", + "text: LAUGH READ MAGICVOICE, actual intent: unclear, detected intent: JokeIntent, score: 0.5985807180404663\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: MAGICVOICE HOW ARE YOU TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5970054268836975\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE HAVE A THIS A IT THANK UP AFTERNOON HAVE THIS LAUGH MAGICVOICE THURSDAY I A BUT HAVE UP HAVE A IS A A, actual intent: HowAreYouIntent, detected intent: JokeIntent, score: 0.6159670948982239\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: BE QUESTION BUT LAUGH THERE SHUT, actual intent: unclear, detected intent: JokeIntent, score: 0.5360142588615417\n", + "\n", + "text: MAGICVOICE HOW ARE YOU TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5970054268836975\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: MAGICVOICE HOW ARE YOU TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5970054268836975\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: A IS IS AND SEATTLE SNOW BE HOW SAN CAN CAN TUESDAY WINDY ON IS ON A NOW STOP RAINING NOW WORK WHEN AND NEWS WHICH JOKE FOR BEING ON CAN TODAY ON HAVE NEWS CAN ON IT TODAY FOR ANSWER FOR AND KNOW YOU THERE AND WHAT HAVE A ON ON SAN WHAT CAN YOU HAVE RIGHT HAPPENING LAUGH SNOW WINDY AND ON WHAT ON SHUT READ YOU FOR SNOW AND ANSWER SHUTDOWN WHAT SNOWING SLEET ON ON IN I BUT MONDAY ON CAN WITH ON FOR IS NEW NEWS LAUGH NEW MAGICVOICE NEWS WHAT JOKE WORK IS ON READ KNOW AND AND A HAVE A ON, actual intent: unclear, detected intent: WeatherIntent, score: 0.6945074796676636\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: HOW I TOKYO JOKE WHAT WORK NEWS, actual intent: unclear, detected intent: JokeIntent, score: 0.5241124033927917\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: HOW ARE YOU THIS MORNING MAGICVOICE MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6189637780189514\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6576943397521973\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: SNOW CAN NEW, actual intent: unclear, detected intent: WeatherIntent, score: 0.7259209156036377\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: AFTERNOON TODAY UP SAY A A UP KNOW LAUGH NOW A IT BUT LIFE AND AND WHAT AND A HAVE FOR TIME CAN LAUGH ON IT NEW ME MAGICVOICE, actual intent: unclear, detected intent: JokeIntent, score: 0.6352760791778564\n", + "\n", + "text: BE A AND WHOSE IT A, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5172255039215088\n", + "\n", + "text: TOMORROW, actual intent: unclear, detected intent: WeatherIntent, score: 0.5240468978881836\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: MAGICVOICE TELL ME A CHUCK NORRIS JOKE, actual intent: ChuckIntent, detected intent: JokeIntent, score: 0.6746616363525391\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE TOP HEALTH NEWS, actual intent: NewsIntent, detected intent: unclear, score: 0.39181965589523315\n", + "\n", + "text: MAGICVOICE TOP HEALTH NEWS CANADA, actual intent: NewsIntent, detected intent: unclear, score: 0.3686922788619995\n", + "\n", + "text: MAGICVOICE TOP HEALTH NEWS FROM CANADA, actual intent: NewsIntent, detected intent: unclear, score: 0.33207762241363525\n", + "\n", + "text: MAGICVOICE TOP HEALTH NEWS CANADA, actual intent: NewsIntent, detected intent: unclear, score: 0.3686922788619995\n", + "\n", + "text: MAGICVOICE TOP HEALTH NEWS CANADA, actual intent: NewsIntent, detected intent: unclear, score: 0.3686922788619995\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: GOOD MORNING MAGIC VOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6781289577484131\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: WHOSE THERE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5529552698135376\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE HOW ARE YOU TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5970054268836975\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: NO THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5438997149467468\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: HOW ARE YOU THIS MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5468164682388306\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE WHAT'S GOING ON, actual intent: NewsIntent, detected intent: unclear, score: 0.4923907518386841\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE GOOD MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.7240151166915894\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: DOING TUESDAY FORECAST, actual intent: unclear, detected intent: WeatherIntent, score: 0.8465912342071533\n", + "\n", + "text: WHICH WHOSE MY RUSSIA TOP NEW SEATTLE BE SAN READ READ ON TOMORROW WHAT, actual intent: unclear, detected intent: WeatherIntent, score: 0.6732864379882812\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: DAD, actual intent: unclear, detected intent: DadIntent, score: 0.5885186195373535\n", + "\n", + "text: ON RAIN USING THANKS, actual intent: unclear, detected intent: WeatherIntent, score: 0.6224498152732849\n", + "\n", + "text: NEW STATES LIFE EMAIL ISRAEL INBOX WHAT SLEET BE ON SATURDAY SUNDAY AND YOU KNOW SATURDAY MORNING, actual intent: unclear, detected intent: WeatherIntent, score: 0.645173192024231\n", + "\n", + "text: TUESDAY SAY SLEET JOKES TOMORROW ON MY TOMORROW DAD TOMORROW ALL ARAB DOING SEATTLE HAVE READ SAN UP READ, actual intent: unclear, detected intent: WeatherIntent, score: 0.527716875076294\n", + "\n", + "text: THERE KNOW WHAT I NEWS RAINING THANKS SUNNY ALL DAD THERE STOP KOREA NEWS BE DAD A NORRIS ARAB KOREA, actual intent: unclear, detected intent: WeatherIntent, score: 0.5504248142242432\n", + "\n", + "text: NEW SNOWING NEWS AFRICA TOMORROW ALL SNOW ON ON ALL NEW SAN SUNDAY AFRICA RUSSIAN THIS USING EGYPT RAIN SERBIA STATESUS IS KOREA THIS JOKES OF HACKER ON FOR KNOW IS UK ON AMERICA SPORTS NORRIS KOREA KNOW SEATTLE IN WHAT STATESUS, actual intent: unclear, detected intent: WeatherIntent, score: 0.5176167488098145\n", + "\n", + "text: BUT ON IS IN HAVE SAN, actual intent: unclear, detected intent: WeatherIntent, score: 0.508495569229126\n", + "\n", + "text: POLAND WHAT IRELAND MAGICVOICE SNOWING, actual intent: unclear, detected intent: WeatherIntent, score: 0.692072331905365\n", + "\n", + "text: WHAT'S ON TELEVISION, actual intent: unclear, detected intent: NewsIntent, score: 0.513896107673645\n", + "\n", + "text: HELLO TO, actual intent: unclear, detected intent: GreetingsIntent, score: 0.8071598410606384\n", + "\n", + "text: MAGICVOICE YOU LAUGH GOOD MY CAN MAKE YOU ON ON WORK HELLO BE ARE TELL AND THE, actual intent: unclear, detected intent: JokeIntent, score: 0.693759560585022\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: USING NEWS HAVE ON ARE WORK SEARCH ALL I QUESTION OF READ AND TURN TIME WORDS LIFE IS ON MY NOW SAY ALL OF IN WHEN EVENING FOR, actual intent: unclear, detected intent: NewsIntent, score: 0.6322137117385864\n", + "\n", + "text: CHECK IT WHEN TO NEW IS LAUGH ON IS FORECAST NEWS EMAIL AND FRIENDS WILL MORNING ALL KNOW, actual intent: unclear, detected intent: WeatherIntent, score: 0.501069962978363\n", + "\n", + "text: YOU NORRIS I TO ALL IS IN ON HACKER IN SHUT, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.5294451713562012\n", + "\n", + "text: GOOD I IN WHAT DO THE, actual intent: unclear, detected intent: CanYouHearMe, score: 0.5101531744003296\n", + "\n", + "text: NOW READ AND ARE TO STOP IN CAN WHEN YOU ARE WORK TURN AND YOU USING YOU WORDS IN THERE, actual intent: unclear, detected intent: NewsIntent, score: 0.5052464008331299\n", + "\n", + "text: ANSWER USING WORDS IS LIFE ME HACKER THERE, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.6348941326141357\n", + "\n", + "text: I ALL GOOD DID HOW TODAY IS ON UNIVERSE WHICH WORDS WHAT AND AND WHAT ALL IS FOR IS ALL WHEN I WHAT ARE TO ALL I JOKE ARE AND NEW TOP YOU THE ALL ALL TIME GOOD, actual intent: unclear, detected intent: NewsIntent, score: 0.5348835587501526\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: STOP JOKE WHOSE LAUGH, actual intent: unclear, detected intent: JokeIntent, score: 0.6009032726287842\n", + "\n", + "text: WHAT LAUGH FOR, actual intent: unclear, detected intent: JokeIntent, score: 0.7876969575881958\n", + "\n", + "text: LAUGH ABOUT GOOD, actual intent: unclear, detected intent: JokeIntent, score: 0.7701617479324341\n", + "\n", + "text: WHOSE ARE FOR AND JOKES GOOD HACKER, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.5495532751083374\n", + "\n", + "text: KNOCK ARE WHAT YOU WHOSE FOR TURN CHECK YOU SHUT NEWS, actual intent: unclear, detected intent: ShutdownIntent, score: 0.5297799110412598\n", + "\n", + "text: LAUGH ARE THIS WHOSE WHAT ARE WORDS DOING AND IS LAUGH ARE, actual intent: unclear, detected intent: JokeIntent, score: 0.5887552499771118\n", + "\n", + "text: DID IS ALL USING MY QUESTION LAUGH NEWS ON ARE READ HELLO I IT WORDS AND ALL THERE ON, actual intent: unclear, detected intent: NewsIntent, score: 0.5465701818466187\n", + "\n", + "text: YOU DAD I TO ARE ARE CAN BE WILL ARE THIS THE READ HOW WHAT IS ARE THERE AND ANY WHOSE IS NOW SAY MY TO ON, actual intent: unclear, detected intent: NewsIntent, score: 0.5459320545196533\n", + "\n", + "text: ABOUT I DO LAUGH IS AND I TO ALL WILL IS ABOUT SAY NEWS ARE IN KNOW SHUTDOWN IS ALL IS YOU WHAT ON, actual intent: unclear, detected intent: JokeIntent, score: 0.5528284907341003\n", + "\n", + "text: IT GOOD DID WHOSE READ AND WHAT, actual intent: unclear, detected intent: NewsIntent, score: 0.5869799256324768\n", + "\n", + "text: WHEN ALL WITH WORDS DAD TO MUSIC WITH FIRST YOU IS NEWS WILL FRIENDS READ TO NAME ARE DO MY IS HAVE WORK YOU NEWS TOP RIGHT STOP FRIENDS DAD STOP LIFE CAN ALL RIGHT WHAT ON READ ULTIMATE LAUGH WHAT LIFE KNOW ARE, actual intent: unclear, detected intent: DadIntent, score: 0.5174236297607422\n", + "\n", + "text: WHOSE SAY ARE SEARCH YOURSELF WORDS LAUGH NEWS, actual intent: unclear, detected intent: NewsIntent, score: 0.5952046513557434\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: WHOSE ARE, actual intent: unclear, detected intent: HowAreYou, score: 0.544616162776947\n", + "\n", + "text: NOW DO, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5351263880729675\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: TODAY SHUT WORDS NAME RIGHT ARE ON HAVE CAN ABOUT HACKER A IN SAY WHOSE WHAT ME HEADLINES YOU ARE, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.7680074572563171\n", + "\n", + "text: THIS SEARCH TODAY FOR ARE FIRST NEWS, actual intent: unclear, detected intent: NewsIntent, score: 0.6232391595840454\n", + "\n", + "text: NEWS LAUGH ON WITH LAUGH RIGHT WHOSE ANY IN ALL IS DAD ULTIMATE FOR READ ARE TO LAUGH NEW ON WITH NOW DID RIGHT IN NEWS I TO RIGHT, actual intent: unclear, detected intent: DadIntent, score: 0.5874210596084595\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IT IS WHOSE NEWS WHOSE NOW QUESTION, actual intent: unclear, detected intent: NewsIntent, score: 0.7110416889190674\n", + "\n", + "text: HELLO MAGICVOICE HOW ARE YOU TODAY, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.5769136548042297\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: SHUT DOWN MAGICVOICE, actual intent: ShutdownIntent, detected intent: unclear, score: 0.4562300145626068\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: MAGICVOICE PLAY HADESTOWN, actual intent: MPDControlIntent, detected intent: unclear, score: 0.4326136112213135\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IS THERE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5350419282913208\n", + "\n", + "text: DO TO, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5291814804077148\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IS THERE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5350419282913208\n", + "\n", + "text: TOP, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5434677600860596\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: A I DID ITALY ANY NEW I ON TO, actual intent: CheckEmailIntent, detected intent: unclear, score: 0.2830561697483063\n", + "\n", + "text: IT BE IN THE A AND IT NIGHT HAVE BE SOMETHING CANADA ANY, actual intent: unclear, detected intent: WeatherIntent, score: 0.5587680339813232\n", + "\n", + "text: THERE TO IT A IT THIS NOW THERE BUT NOW THERE IT GOOD ITALY SAN WHAT TO THE WHAT IS RAIN TO FIRST IS IT WHAT WHAT WEATHER YOU YOU NORWAY DO TO TO ARE THE IT BE SHUT, actual intent: unclear, detected intent: WeatherIntent, score: 0.556543231010437\n", + "\n", + "text: DO YOU THANK YOU, actual intent: unclear, detected intent: ThankYouIntent, score: 0.8815306425094604\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: LORD REALLY, actual intent: unclear, detected intent: ThankYouIntent, score: 0.599285364151001\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: WHAT TO THE SEATTLE ARE, actual intent: unclear, detected intent: WeatherIntent, score: 0.7860569953918457\n", + "\n", + "text: ALL RIGHT SO, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5430891513824463\n", + "\n", + "text: WHAT IS IN ABOUT TODAY BUT I DO YOU KNOW WITH CAN I CAN SEATTLE WHAT IS A CAN SLEETING IN IN THE THERE BUT THIS ON OF THANKS IRELAND IS A DO YOU KNOW IT OF ALL IS THE, actual intent: unclear, detected intent: WeatherIntent, score: 0.5999530553817749\n", + "\n", + "text: THANK MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.4026927053928375\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: MAGICVOICE PLAY HADESTOWN, actual intent: MPDControlIntent, detected intent: unclear, score: 0.4326136112213135\n", + "\n", + "text: MAGICVOICE QUIT, actual intent: MPDControlIntent, detected intent: unclear, score: 0.4266481101512909\n", + "\n", + "text: MAGICVOICE QUIT, actual intent: StopIntent, detected intent: unclear, score: 0.4266481101512909\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: WHOSE THERE, actual intent: JokeIntent, detected intent: GreetingsIntent, score: 0.5529552698135376\n", + "\n", + "text: A THE IN THERE WITH NEW YOU TELL STOP, actual intent: unclear, detected intent: StopIntent, score: 0.5568979382514954\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: BUT I HAVE TO IS IT IS THIS NIGHT SAY AND IT A GENERAL IN ARE BUT WHAT, actual intent: unclear, detected intent: WeatherIntent, score: 0.6822885274887085\n", + "\n", + "text: THERE A FOR BUT SUNNY, actual intent: unclear, detected intent: WeatherIntent, score: 0.7641822099685669\n", + "\n", + "text: DO EVERYTHING OF IN I HAVE IS READ IN THERE BUT THE THE ALL QUESTION IS PLAY ME EMAIL ARE FOR SAN THIS ARE IS TO FIRST A BUT THE IT YOU IN GREAT AND RAIN, actual intent: unclear, detected intent: CheckEmailIntent, score: 0.6156069040298462\n", + "\n", + "text: I ARE THE RAIN SAN IS WHEN THE TIME A CAN ARE THE GREAT ON FOR THE ARE OFF IS WHICH MEANING CAN BE CAN PLAY MAKE SOMETHING UP BUT I BUT ON KNOW WHAT THE YOU IN YOU GOOD ARE THE MY BE SOMETHING DO DO WITH THE READ OFF TO I HAVE NOW DAD, actual intent: unclear, detected intent: WeatherIntent, score: 0.6170240640640259\n", + "\n", + "text: WHO'S THERE, actual intent: JokeIntent, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: READ THE THIS ALL CAN YOU KNOW ALL AND, actual intent: unclear, detected intent: NewsIntent, score: 0.5047334432601929\n", + "\n", + "text: A I TELL I THANK DO I THANK I THANK THE ME TO IN IT ON AND, actual intent: unclear, detected intent: ThankYouIntent, score: 0.6411744356155396\n", + "\n", + "text: READ I UP ON HEADLINES A BUT FOR A CHECK FOR IT THE BUT WHAT SAY I I READ THE THIS FRANCE ALL HOW UP, actual intent: unclear, detected intent: NewsIntent, score: 0.7365438938140869\n", + "\n", + "text: IN ABOUT ARE HAVE TO DO THIS IN TO MAKE ARE WHAT IS SOMETHING DAD, actual intent: unclear, detected intent: DadIntent, score: 0.5170005559921265\n", + "\n", + "text: IS QUESTION HEADLINES ON REPUBLIC IRELAND TO SAY IT ISRAEL I THANK IT IS READ OF FOR ME TO IN OF, actual intent: unclear, detected intent: NewsIntent, score: 0.5657988786697388\n", + "\n", + "text: IS HAVE AND FOR FOR, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5230199694633484\n", + "\n", + "text: THE MORNING THE THE YOU KNOW YOU STATES ALL HOW, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5818071365356445\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: TO THE TIME IS ARE QUESTION BE, actual intent: unclear, detected intent: ClockIntent, score: 0.7825425863265991\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: SAN SLEETING IN THE TURN ARE RAIN, actual intent: unclear, detected intent: WeatherIntent, score: 0.7057138085365295\n", + "\n", + "text: ARE THERE ARE A IT OF EMAILS WHAT WHEN A AND FOR WHEN YOU AND, actual intent: unclear, detected intent: CheckEmailIntent, score: 0.5824763178825378\n", + "\n", + "text: FOR READ, actual intent: unclear, detected intent: NewsIntent, score: 0.5919423699378967\n", + "\n", + "text: IN A THE SUNNY STOP AND IT THERE IS DOING ARE THERE THE IS NOW A SCIENCE THE ARE READ AND THE FORECAST KOREA WHICH IN WORK IN ON WHAT A AND THE THE ME ITALY THANK WHAT IS IT FOR SOMETHING THE SAN DAD IS A READ TELL IN THE FOR DO I READ THE STATES TO , actual intent: unclear, detected intent: WeatherIntent, score: 0.5085479021072388\n", + "\n", + "text: IN I SAY A TOP HOW THERE IN THERE WHEN IN IT KOREA AND DO MONDAY AFTERNOON AND WILL SAN THERE I HAVE ON TO A THE IN THE SHUT BE I SHUT BE BE TO GENERAL STOP CAN UP TODAY I DO I READ A NIGHT THE THE WHAT, actual intent: unclear, detected intent: NewsIntent, score: 0.5001207590103149\n", + "\n", + "text: AUSTRIA AND SAY ON ANY THANK ABOUT THIS THE SAY OF ALL YOU TO THE IS TO, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5676045417785645\n", + "\n", + "text: IS IT SUNNY YOU IS IT ON SUNDAY YOU IS SOMETHING BEING IT AND DOING UP WITH STOP I BUT YOU KNOW I TELL LIFE, actual intent: unclear, detected intent: WeatherIntent, score: 0.7694737911224365\n", + "\n", + "text: IS THE READ WHAT I SAY IN IN USING WHAT TO RAIN THE SEARCH RAINING SPORTS AND ITALY IN RAIN TO FOR WHAT IN TO TO DO RIGHT NOW IS IT IT TO RAIN SCIENCE IS, actual intent: unclear, detected intent: WeatherIntent, score: 0.5568061470985413\n", + "\n", + "text: A IT OF EVENING TO ON ON YOU GOOD IN THE WILL AND BE TELL HAVE, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6980293393135071\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: DO I, actual intent: unclear, detected intent: CanYouHearMe, score: 0.5031737089157104\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: ANY ON SAN NOW, actual intent: unclear, detected intent: WeatherIntent, score: 0.5039339065551758\n", + "\n", + "text: WHAT IS THE, actual intent: unclear, detected intent: NewsIntent, score: 0.5800246596336365\n", + "\n", + "text: TOP , actual intent: unclear, detected intent: GreetingsIntent, score: 0.5434677600860596\n", + "\n", + "text: READ I FOR ME BUT DID ME A, actual intent: unclear, detected intent: NewsIntent, score: 0.5190836787223816\n", + "\n", + "text: TELL ME A SHUT, actual intent: unclear, detected intent: StopIntent, score: 0.5774611234664917\n", + "\n", + "text: MAGICVOICE PLAY HADESTOWN, actual intent: MPDControlIntent, detected intent: unclear, score: 0.4326136112213135\n", + "\n", + "text: MAGICVOICE EXIT, actual intent: MPDControlIntent, detected intent: GoodbyeIntent, score: 0.5187097787857056\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IS ARTICLES IN TELL WORK ON THE THE ARE CAN IN STOP, actual intent: unclear, detected intent: NewsIntent, score: 0.5134931802749634\n", + "\n", + "text: ARE THE SHUT SHUT CAN ANY THIS, actual intent: unclear, detected intent: ShutdownIntent, score: 0.617218017578125\n", + "\n", + "text: WHAT DOING IN TO IN A IT RAIN WITH DID MEANING STOP WITH ON LIFE A A SAN IN SAN BUT THE IS DO READ SAN IT NOW ON OF, actual intent: unclear, detected intent: WeatherIntent, score: 0.6685634851455688\n", + "\n", + "text: TIME IS THE CAN BE IS FOR , actual intent: unclear, detected intent: ClockIntent, score: 0.6707184314727783\n", + "\n", + "text: RAIN, actual intent: unclear, detected intent: WeatherIntent, score: 0.69869065284729\n", + "\n", + "text: WILL IT THANK IS IT I THANK IT ME, actual intent: unclear, detected intent: ThankYouIntent, score: 0.6066111922264099\n", + "\n", + "text: DO I BUT I THANK I FOR , actual intent: unclear, detected intent: ThankYouIntent, score: 0.6449556946754456\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THE IN HOW SEATTLE , actual intent: unclear, detected intent: WeatherIntent, score: 0.7918171882629395\n", + "\n", + "text: WHAT IS , actual intent: unclear, detected intent: NewsIntent, score: 0.5459206700325012\n", + "\n", + "text: ALL READ THE NEWS RAINING IN RAIN WHEN DO NOW, actual intent: unclear, detected intent: WeatherIntent, score: 0.5850292444229126\n", + "\n", + "text: KNOW I RAIN ARE THERE ANY DO ARAB THE IN CAN ON TOP SAN DOING WHICH IS TELL IS IN FOR USING FOR AND ANY FOR ON FOR ARE, actual intent: unclear, detected intent: WeatherIntent, score: 0.5982064008712769\n", + "\n", + "text: TOP, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5434677600860596\n", + "\n", + "text: NOW ARE YOU ARE YOU ARE THERE, actual intent: unclear, detected intent: HowAreYou, score: 0.5669047832489014\n", + "\n", + "text: THE TIME IS, actual intent: unclear, detected intent: ClockIntent, score: 0.7687627673149109\n", + "\n", + "text: READ THE MEANING OF AND THERE HELLO, actual intent: ThankYouIntent, detected intent: NewsIntent, score: 0.5473921895027161\n", + "\n", + "text: ABOUT A DAD, actual intent: unclear, detected intent: DadIntent, score: 0.6476296782493591\n", + "\n", + "text: IS A TELL ME ITALY EVENING ITALY IS A , actual intent: unclear, detected intent: WeatherIntent, score: 0.5332131385803223\n", + "\n", + "text: IS ANY NEW HEADLINES, actual intent: unclear, detected intent: NewsIntent, score: 0.6569411754608154\n", + "\n", + "text: TELL THERE SOUTH RAIN IN THERE ON SUNDAY TOKYO SOUTH , actual intent: unclear, detected intent: WeatherIntent, score: 0.7129453420639038\n", + "\n", + "text: THE HONG FEDERATION ARE IS TODAY THE THE THE RAIN IS ON A I SAY HELLO HOW ARE CAN , actual intent: unclear, detected intent: WeatherIntent, score: 0.6465310454368591\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: ALL, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5092764496803284\n", + "\n", + "text: UM MAGICVOICE SHUTDOWN, actual intent: unclear, detected intent: ShutdownIntent, score: 0.6438156962394714\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: WHAT IS IN, actual intent: unclear, detected intent: NewsIntent, score: 0.5204429626464844\n", + "\n", + "text: IS IT, actual intent: unclear, detected intent: ClockIntent, score: 0.5294951796531677\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD, actual intent: unclear, detected intent: ThankYouIntent, score: 0.6337916851043701\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: ARE THERE IS A ARE SAN A YOU EMAIL ARE TOKYO ON ON IN OF IN I I ITALY DO IN ARE MAKE READ TO WHAT TO, actual intent: unclear, detected intent: IPAddressIntent, score: 0.5573243498802185\n", + "\n", + "text: READ THE I THE WHAT IS RAINING IT AND THE CAN IN IT BE IS USING IN ARE OF THE FOR OF, actual intent: unclear, detected intent: WeatherIntent, score: 0.6349013447761536\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: NAOMI CHECK FACEBOOK, actual intent: NotificationsIntent, detected intent: unclear, score: 0.3366062641143799\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: IS YOU THANK IT YOU BE INBOX OF ARE, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5974276065826416\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: YOU HAVE , actual intent: unclear, detected intent: HowAreYou, score: 0.5771008729934692\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THIS ARE THE ARE IS THE I TIME IT JOKES SLEET DO, actual intent: unclear, detected intent: JokeIntent, score: 0.55367112159729\n", + "\n", + "text: MAGICVOICE QUIET, actual intent: StopIntent, detected intent: unclear, score: 0.44686561822891235\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IS IT DOING , actual intent: unclear, detected intent: HowAreYou, score: 0.5006453394889832\n", + "\n", + "text: GOOD AFTERNOON MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6600679159164429\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IS IT, actual intent: unclear, detected intent: ClockIntent, score: 0.5294951796531677\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: WHAT IS IN THE A ME TO AND IT ON LIFE ME AND ME TO GOOD AND WITH HAVE I ON TO GOOD AND DO WHAT TO WITH IS WHOSE ON A SERBIA DO THE TODAY, actual intent: unclear, detected intent: MeaningOfLifeIntent, score: 0.5011327862739563\n", + "\n", + "text: MAGICVOICE HOW ARE YOU THIS MORNING, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6402198672294617\n", + "\n", + "text: MAGICVOICE TELL ME A JOKE, actual intent: DadIntent, detected intent: JokeIntent, score: 0.7450147271156311\n", + "\n", + "text: I I IS I DO KNOW IT IS IN ARE TODAY I ANY ARE IS BE ARE AND IT HOW MY ON STATES ON SOUTH NEWS, actual intent: unclear, detected intent: NewsIntent, score: 0.5473110675811768\n", + "\n", + "text: MAGICVOICE WHAT VERSION ARE YOU RUNNING, actual intent: VersionIntent, detected intent: unclear, score: 0.4123063087463379\n", + "\n", + "text: MAGICVOICE WHAT VERSION ARE YOU RUNNING, actual intent: VersionIntent, detected intent: unclear, score: 0.4123063087463379\n", + "\n", + "text: WILL IT GOOD THANK THE WORK BE , actual intent: unclear, detected intent: ThankYouIntent, score: 0.5307780504226685\n", + "\n", + "text: IS WHICH HEADLINES IN, actual intent: unclear, detected intent: NewsIntent, score: 0.8918303847312927\n", + "\n", + "text: CAN ARE HOW IS THE PLAY IN THE DID FOR ANY WHEN THE SHUT ME ME A THE RIGHT HEADLINES OF THE ME, actual intent: unclear, detected intent: NewsIntent, score: 0.5194385051727295\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE WHAT VERSION ARE YOU RUNNING, actual intent: VersionIntent, detected intent: unclear, score: 0.4123063087463379\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE WHAT VERSION ARE YOU RUNNING, actual intent: VersionIntent, detected intent: unclear, score: 0.4123063087463379\n", + "\n", + "text: MAGICVOICE IS AUTO UPDATE ENABLED, actual intent: CheckAutoUpdateIntent, detected intent: unclear, score: 0.3079231083393097\n", + "\n", + "text: MAGICVOICE DISABLE AUTOUPDATE, actual intent: ControlAutoUpdateIntent, detected intent: MyIntent, score: 0.5821778774261475\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: ME A CAN YOU SNOW YOU SAN OR IN ARE YOU FRIENDS ARE, actual intent: unclear, detected intent: WeatherIntent, score: 0.6824343204498291\n", + "\n", + "text: CAN YOU CHECK YOU , actual intent: unclear, detected intent: HowAreYou, score: 0.6015327572822571\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE WHAT VERSION ARE YOU RUNNING, actual intent: VersionIntent, detected intent: unclear, score: 0.4123063087463379\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: MAGICVOICE WHAT VERSION ARE YOU RUNNING, actual intent: VersionIntent, detected intent: unclear, score: 0.4123063087463379\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: OF BE DO A ON I READ IT BE ARE MAKE ON OF WHOSE BE IN THE IS TO ANY TO AND AND HOW ARE AND ME MAKE THE IN TIME AND THE BE WITH IN A TO ARE, actual intent: unclear, detected intent: ClockIntent, score: 0.5450615882873535\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: MAGICVOICE WHEN IS HALLOWEEN THIS YEAR, actual intent: DateIntent, detected intent: unclear, score: 0.4595644474029541\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: TO THE ABOUT BE IT THE FRIENDS FOR THE THIS IN IS, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5368142127990723\n", + "\n", + "text: TO MAKE ARE THE THE NOW ON I THE I ARE BUT A ALL YOU KNOW IT A ABOUT UP THE IN FOR TO THE THE WINDY IT NOW ITALY READ IT, actual intent: unclear, detected intent: WeatherIntent, score: 0.5057784914970398\n", + "\n", + "text: OKAY YEAH, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6319544911384583\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: MAGICVOICE EXIT, actual intent: StopIntent, detected intent: GoodbyeIntent, score: 0.5187097787857056\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: AND DO TO THE IS BEING IS A ARE THE TELL LIFE, actual intent: unclear, detected intent: MeaningOfLifeIntent, score: 0.5558991432189941\n", + "\n", + "text: ON YOU KNOW ANY OF LIFE THE IN , actual intent: unclear, detected intent: MeaningOfLifeIntent, score: 0.5584648251533508\n", + "\n", + "text: DO KNOW ON READ KNOW IS IT YOU OR I THIS THE CAN EVENING THE A WORK, actual intent: unclear, detected intent: NWSWeatherIntent, score: 0.592934250831604\n", + "\n", + "text: TELL I NOW ARE WHAT DAD IN MEANING ABOUT THE BE IS IT SHUT MAKE A WHAT A HONG I HAVE TODAY OR, actual intent: unclear, detected intent: DadIntent, score: 0.5304093360900879\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: HOW I READ ME THE RAIN IN NOW I HAVE ME THE YOU TODAY WHEN ME ARE ON THE BUT, actual intent: unclear, detected intent: WeatherIntent, score: 0.6642217636108398\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD ARE, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5150327682495117\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IN READ YOU READ BUT SEATTLE ON ANSWER VERSION RAIN , actual intent: unclear, detected intent: WeatherIntent, score: 0.66070556640625\n", + "\n", + "text: GOOD THE OF READ HOW , actual intent: unclear, detected intent: NewsIntent, score: 0.5722538232803345\n", + "\n", + "text: ANY EMAIL RIGHT THERE, actual intent: unclear, detected intent: CheckEmailIntent, score: 0.5475274920463562\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: IN ARE WITH SAY THE TIME THE OR WHEN THE CAN PLAY ARE THE WEATHER, actual intent: unclear, detected intent: WeatherIntent, score: 0.6640039086341858\n", + "\n", + "text: THANKS CAN THE IT TO HAVE THE SAN ME, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5122885704040527\n", + "\n", + "text: MAKE ME THE ON IS IT DO YOU CAN YOU YOU, actual intent: unclear, detected intent: ClockIntent, score: 0.5541894435882568\n", + "\n", + "text: WHAT IS A MORNING , actual intent: unclear, detected intent: GreetingsIntent, score: 0.7540527582168579\n", + "\n", + "text: EMAIL TO YOU I THANK, actual intent: unclear, detected intent: ThankYouIntent, score: 0.6392914652824402\n", + "\n", + "text: AND THE YOU IS AND DO HOW TO READ MY ANSWER TO FOR ON IT, actual intent: unclear, detected intent: NewsIntent, score: 0.5306831002235413\n", + "\n", + "text: I ON KNOW OR NOW WHAT ARE ON TELL, actual intent: unclear, detected intent: NewsIntent, score: 0.6035728454589844\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: WILL IT IS A YOU KNOW YOU YOU DOING ABOUT YOU YOU GOOD USING TO THE DO ME FORECAST I THANK THERE IS A A IS WHEN MY THE TIME YOU SAY YOU KNOW WORK IT THIS THERE OR YOU READ ME ON TO THE SOMETHING ALL, actual intent: unclear, detected intent: WeatherIntent, score: 0.5891597270965576\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: OR CAN THANK YOU ME ME A IS IT YOU KNOW THIS IN WHAT IS THE NORRIS NOTIFICATIONS THIS ITALY A SEATTLE ARE KNOW ANY THE, actual intent: unclear, detected intent: ThankYouIntent, score: 0.5078548789024353\n", + "\n", + "text: ALL OFF, actual intent: unclear, detected intent: ShutdownIntent, score: 0.5331498384475708\n", + "\n", + "text: MAGICVOICE WHAT VERSION ARE YOU RUNNING, actual intent: VersionIntent, detected intent: unclear, score: 0.4123063087463379\n", + "\n", + "text: GOOD IT FOR THE WITH I READ THE DO ME YOU ARE SAN IN YOU POLAND INDONESIA EMAIL ARE, actual intent: unclear, detected intent: CheckEmailIntent, score: 0.571245014667511\n", + "\n", + "text: I HAVE MY SHUT SHUT IT TO I I SAN TO YOU I HAVE ABOUT SAY TIME, actual intent: unclear, detected intent: ClockIntent, score: 0.586151123046875\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ClockIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: HOW ARE, actual intent: unclear, detected intent: HowAreYou, score: 0.8478248715400696\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IS, actual intent: ThankYouIntent, detected intent: unclear, score: 0.4800889492034912\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: IS ON EMAILS , actual intent: unclear, detected intent: CheckEmailIntent, score: 0.6216934323310852\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: WHAT IS A ON KNOW, actual intent: unclear, detected intent: NewsIntent, score: 0.547069787979126\n", + "\n", + "text: IS IT IT ME THE ON , actual intent: unclear, detected intent: CanYouHearMe, score: 0.5444580316543579\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: A WHEN I DID READ , actual intent: unclear, detected intent: NewsIntent, score: 0.6046751737594604\n", + "\n", + "text: IS WORK IN IN TO THE NEWS NOW THE , actual intent: unclear, detected intent: NewsIntent, score: 0.6911662817001343\n", + "\n", + "text: WHAT IS THE WORK THE A WORK EMAILS, actual intent: unclear, detected intent: CheckEmailIntent, score: 0.5813865661621094\n", + "\n", + "text: IS MAGICVOICE ME THE ME THE HACKER, actual intent: unclear, detected intent: HackerNewsIntent, score: 0.6496585607528687\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: MAGICVOICE HOW ARE YOU, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.65506911277771\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: WHO'S THERE, actual intent: unclear, detected intent: CheckNetworkIntent, score: 0.5010098814964294\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: HOW ARE YOU MAGICVOICE, actual intent: HowAreYouIntent, detected intent: HowAreYou, score: 0.59347003698349\n", + "\n", + "text: GOOD MORNING MAGICVOICE, actual intent: HowAreYouIntent, detected intent: GreetingsIntent, score: 0.6434599757194519\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: SAY IS IN, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5075678825378418\n", + "\n", + "text: READ IS A , actual intent: unclear, detected intent: NewsIntent, score: 0.6377780437469482\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: HOW ARE YOU KNOW ARE, actual intent: unclear, detected intent: HowAreYou, score: 0.8161301612854004\n", + "\n", + "text: ALL, actual intent: unclear, detected intent: GreetingsIntent, score: 0.5092764496803284\n", + "\n", + "text: ARE YOU, actual intent: unclear, detected intent: HowAreYou, score: 0.8001583814620972\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: THANK YOU MAGICVOICE, actual intent: ThankYouIntent, detected intent: unclear, score: 0.49707555770874023\n", + "\n", + "text: GOOD GIRL, actual intent: ThankYouIntent, detected intent: unclear, score: 0.35666799545288086\n", + "\n", + "text: GOOD GIRL, actual intent: ThankYouIntent, detected intent: unclear, score: 0.35666799545288086\n", + "\n", + "text: WHAT DO YOU THANK I'M SAYING, actual intent: unclear, detected intent: ThankYouIntent, score: 0.6711207628250122\n", + "\n", + "text: WHAT DO YOU THANK I'M SAYING, actual intent: unclear, detected intent: ThankYouIntent, score: 0.6711207628250122\n", + "\n", + "text: NOW, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6194125413894653\n", + "\n", + "text: NOW, actual intent: unclear, detected intent: GreetingsIntent, score: 0.6194125413894653\n", + "\n", + "text: WHAT ARE YOU KNOW HELLO ON YOU TODAY THERE , actual intent: unclear, detected intent: HowAreYou, score: 0.69080650806427\n", + "\n", + "text: ARE YOU KNOW ANY NEW OR , actual intent: unclear, detected intent: HowAreYou, score: 0.6206450462341309\n", + "\n", + "text: WILL IT BE, actual intent: unclear, detected intent: WeatherIntent, score: 0.5495617985725403\n", + "\n", + "text: HOW ARE , actual intent: unclear, detected intent: HowAreYou, score: 0.8478248715400696\n", + "\n", + "text: TOP , actual intent: unclear, detected intent: GreetingsIntent, score: 0.5434677600860596\n", + "\n" + ] + } + ], + "source": [ + "# Load transcriptions and verified intents from audiolog.db\n", + "import sqlite3\n", + "\n", + "conn = sqlite3.connect(os.path.expanduser(\"~/Projects/Speaker Recognition/audiolog.db\"))\n", + "c = conn.cursor()\n", + "sql = \" \".join([\n", + " \"select\",\n", + " \"iif(verified_transcription='',transcription,verified_transcription) as transcription,\",\n", + " \"verified_intent\",\n", + " \"from audiolog\",\n", + " \"where verified_intent > ''\",\n", + " \"and (verified_transcription > '' or transcription > '')\"\n", + "])\n", + "res = c.execute(sql)\n", + "row = res.fetchone()\n", + "while row:\n", + " # print(row)\n", + " # Find out what intent FAISS would choose\n", + " result = detect_intent(row[0])\n", + " intent = result[0]['intent']\n", + " score = result[0]['score']\n", + " if score < 0.5:\n", + " intent = \"unclear\"\n", + " if row[1] != intent:\n", + " print(f\"text: {row[0]}, actual intent: {row[1]}, detected intent: {intent}, score: {score}\" )\n", + " print()\n", + " row = res.fetchone()\n", + "conn.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3fa0e4db", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/Untitled.ipynb b/notebooks/Untitled.ipynb new file mode 100644 index 00000000..7c5c14b2 --- /dev/null +++ b/notebooks/Untitled.ipynb @@ -0,0 +1,33 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "5e4e852b-7c74-4758-af61-81db1ef7f737", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/Word2Vec.ipynb b/notebooks/Word2Vec.ipynb new file mode 100644 index 00000000..f259b89f --- /dev/null +++ b/notebooks/Word2Vec.ipynb @@ -0,0 +1,754 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "5e4e852b-7c74-4758-af61-81db1ef7f737", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting gensim\n", + " Downloading gensim-4.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26.7 MB)\n", + "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m26.7/26.7 MB\u001b[0m \u001b[31m19.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mm eta \u001b[36m0:00:01\u001b[0m[36m0:00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: numpy<2.0,>=1.18.5 in /home/jess/.virtualenvs/GlaDOS/lib/python3.11/site-packages (from gensim) (1.26.4)\n", + "Collecting scipy<1.14.0,>=1.7.0\n", + " Downloading scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (38.6 MB)\n", + "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m38.6/38.6 MB\u001b[0m \u001b[31m16.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mm eta \u001b[36m0:00:01\u001b[0m0:01\u001b[0m:01\u001b[0m\n", + "\u001b[?25hCollecting smart-open>=1.8.1\n", + " Downloading smart_open-7.0.5-py3-none-any.whl (61 kB)\n", + "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m61.4/61.4 kB\u001b[0m \u001b[31m3.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting wrapt\n", + " Downloading wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80 kB)\n", + "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m80.7/80.7 kB\u001b[0m \u001b[31m9.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: wrapt, scipy, smart-open, gensim\n", + "Successfully installed gensim-4.3.3 scipy-1.13.1 smart-open-7.0.5 wrapt-1.16.0\n" + ] + } + ], + "source": [ + "!pip install gensim" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b27fd718-b65f-4465-b07e-072ffce7c6e1", + "metadata": {}, + "outputs": [], + "source": [ + "from gensim.test.utils import common_texts\n", + "from gensim.models import Word2Vec\n", + "\n", + "model = Word2Vec(sentences=common_texts, vector_size=100, window=5, min_count=1, workers=4)\n", + "model.save(\"word2vec.model\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e76d61f7-5aad-453f-aa4d-a6f5f9022a83", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[['human', 'interface', 'computer'],\n", + " ['survey', 'user', 'computer', 'system', 'response', 'time'],\n", + " ['eps', 'user', 'interface', 'system'],\n", + " ['system', 'human', 'system', 'eps'],\n", + " ['user', 'response', 'time'],\n", + " ['trees'],\n", + " ['graph', 'trees'],\n", + " ['graph', 'minors', 'trees'],\n", + " ['graph', 'minors', 'survey']]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "common_texts" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c07f0116-2bee-457c-8664-e21753216297", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, 2)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = Word2Vec.load(\"word2vec.model\")\n", + "model.train([[\"hello\", \"world\"]], total_examples=1, epochs=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "47190cf9-6a4c-4067-8d0a-45c86e9180a9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.00515774, -0.00667028, -0.0077791 , 0.00831315, -0.00198292,\n", + " -0.00685696, -0.0041556 , 0.00514562, -0.00286997, -0.00375075,\n", + " 0.0016219 , -0.0027771 , -0.00158482, 0.0010748 , -0.00297881,\n", + " 0.00852176, 0.00391207, -0.00996176, 0.00626142, -0.00675622,\n", + " 0.00076966, 0.00440552, -0.00510486, -0.00211128, 0.00809783,\n", + " -0.00424503, -0.00763848, 0.00926061, -0.00215612, -0.00472081,\n", + " 0.00857329, 0.00428459, 0.0043261 , 0.00928722, -0.00845554,\n", + " 0.00525685, 0.00203994, 0.0041895 , 0.00169839, 0.00446543,\n", + " 0.0044876 , 0.0061063 , -0.00320303, -0.00457706, -0.00042664,\n", + " 0.00253447, -0.00326412, 0.00605948, 0.00415534, 0.00776685,\n", + " 0.00257002, 0.00811905, -0.00138761, 0.00808028, 0.0037181 ,\n", + " -0.00804967, -0.00393476, -0.0024726 , 0.00489447, -0.00087241,\n", + " -0.00283173, 0.00783599, 0.00932561, -0.0016154 , -0.00516075,\n", + " -0.00470313, -0.00484746, -0.00960562, 0.00137242, -0.00422615,\n", + " 0.00252744, 0.00561612, -0.00406709, -0.00959937, 0.00154715,\n", + " -0.00670207, 0.0024959 , -0.00378173, 0.00708048, 0.00064041,\n", + " 0.00356198, -0.00273993, -0.00171105, 0.00765502, 0.00140809,\n", + " -0.00585215, -0.00783678, 0.00123305, 0.00645651, 0.00555797,\n", + " -0.00897966, 0.00859466, 0.00404816, 0.00747178, 0.00974917,\n", + " -0.0072917 , -0.00904259, 0.0058377 , 0.00939395, 0.00350795],\n", + " dtype=float32)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from gensim.models import KeyedVectors\n", + "word_vectors = model.wv\n", + "word_vectors.save(\"word2vec.wordvectors\")\n", + "wv = KeyedVectors.load(\"word2vec.wordvectors\", mmap=\"r\")\n", + "vector = model.wv['computer']\n", + "vector" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5e90e9a6-e178-4d05-8fb4-de4805585c0b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-5.3622725e-04, 2.3643136e-04, 5.1033497e-03, 9.0092728e-03,\n", + " -9.3029495e-03, -7.1168090e-03, 6.4588725e-03, 8.9729885e-03,\n", + " -5.0154282e-03, -3.7633716e-03, 7.3805046e-03, -1.5334714e-03,\n", + " -4.5366134e-03, 6.5540518e-03, -4.8601604e-03, -1.8160177e-03,\n", + " 2.8765798e-03, 9.9187379e-04, -8.2852151e-03, -9.4488179e-03,\n", + " 7.3117660e-03, 5.0702621e-03, 6.7576934e-03, 7.6286553e-04,\n", + " 6.3508903e-03, -3.4053659e-03, -9.4640139e-04, 5.7685734e-03,\n", + " -7.5216377e-03, -3.9361035e-03, -7.5115822e-03, -9.3004224e-04,\n", + " 9.5381187e-03, -7.3191668e-03, -2.3337686e-03, -1.9377411e-03,\n", + " 8.0774371e-03, -5.9308959e-03, 4.5162440e-05, -4.7537340e-03,\n", + " -9.6035507e-03, 5.0072931e-03, -8.7595852e-03, -4.3918253e-03,\n", + " -3.5099984e-05, -2.9618145e-04, -7.6612402e-03, 9.6147433e-03,\n", + " 4.9820580e-03, 9.2331432e-03, -8.1579173e-03, 4.4957981e-03,\n", + " -4.1370760e-03, 8.2453608e-04, 8.4986202e-03, -4.4621765e-03,\n", + " 4.5175003e-03, -6.7869602e-03, -3.5484887e-03, 9.3985079e-03,\n", + " -1.5776526e-03, 3.2137157e-04, -4.1406299e-03, -7.6826881e-03,\n", + " -1.5080082e-03, 2.4697948e-03, -8.8802696e-04, 5.5336617e-03,\n", + " -2.7429771e-03, 2.2600652e-03, 5.4557943e-03, 8.3459532e-03,\n", + " -1.4537406e-03, -9.2081428e-03, 4.3705525e-03, 5.7178497e-04,\n", + " 7.4419081e-03, -8.1328274e-04, -2.6384138e-03, -8.7530091e-03,\n", + " -8.5655687e-04, 2.8265631e-03, 5.4014288e-03, 7.0526563e-03,\n", + " -5.7031214e-03, 1.8588197e-03, 6.0888636e-03, -4.7980510e-03,\n", + " -3.1072604e-03, 6.7976294e-03, 1.6314756e-03, 1.8991709e-04,\n", + " 3.4736372e-03, 2.1777749e-04, 9.6188262e-03, 5.0606038e-03,\n", + " -8.9173904e-03, -7.0415605e-03, 9.0145587e-04, 6.3925339e-03],\n", + " dtype=float32)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.wv['system']" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d8d0fa46-cb7f-4c75-b96d-1778e8ae17b5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on Word2Vec in module gensim.models.word2vec object:\n", + "\n", + "class Word2Vec(gensim.utils.SaveLoad)\n", + " | Word2Vec(sentences=None, corpus_file=None, vector_size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=, epochs=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), comment=None, max_final_vocab=None, shrink_windows=True)\n", + " | \n", + " | Method resolution order:\n", + " | Word2Vec\n", + " | gensim.utils.SaveLoad\n", + " | builtins.object\n", + " | \n", + " | Methods defined here:\n", + " | \n", + " | __init__(self, sentences=None, corpus_file=None, vector_size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=, epochs=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), comment=None, max_final_vocab=None, shrink_windows=True)\n", + " | Train, use and evaluate neural networks described in https://code.google.com/p/word2vec/.\n", + " | \n", + " | Once you're finished training a model (=no more updates, only querying)\n", + " | store and use only the :class:`~gensim.models.keyedvectors.KeyedVectors` instance in ``self.wv``\n", + " | to reduce memory.\n", + " | \n", + " | The full model can be stored/loaded via its :meth:`~gensim.models.word2vec.Word2Vec.save` and\n", + " | :meth:`~gensim.models.word2vec.Word2Vec.load` methods.\n", + " | \n", + " | The trained word vectors can also be stored/loaded from a format compatible with the\n", + " | original word2vec implementation via `self.wv.save_word2vec_format`\n", + " | and :meth:`gensim.models.keyedvectors.KeyedVectors.load_word2vec_format`.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | sentences : iterable of iterables, optional\n", + " | The `sentences` iterable can be simply a list of lists of tokens, but for larger corpora,\n", + " | consider an iterable that streams the sentences directly from disk/network.\n", + " | See :class:`~gensim.models.word2vec.BrownCorpus`, :class:`~gensim.models.word2vec.Text8Corpus`\n", + " | or :class:`~gensim.models.word2vec.LineSentence` in :mod:`~gensim.models.word2vec` module for such examples.\n", + " | See also the `tutorial on data streaming in Python\n", + " | `_.\n", + " | If you don't supply `sentences`, the model is left uninitialized -- use if you plan to initialize it\n", + " | in some other way.\n", + " | corpus_file : str, optional\n", + " | Path to a corpus file in :class:`~gensim.models.word2vec.LineSentence` format.\n", + " | You may use this argument instead of `sentences` to get performance boost. Only one of `sentences` or\n", + " | `corpus_file` arguments need to be passed (or none of them, in that case, the model is left uninitialized).\n", + " | vector_size : int, optional\n", + " | Dimensionality of the word vectors.\n", + " | window : int, optional\n", + " | Maximum distance between the current and predicted word within a sentence.\n", + " | min_count : int, optional\n", + " | Ignores all words with total frequency lower than this.\n", + " | workers : int, optional\n", + " | Use these many worker threads to train the model (=faster training with multicore machines).\n", + " | sg : {0, 1}, optional\n", + " | Training algorithm: 1 for skip-gram; otherwise CBOW.\n", + " | hs : {0, 1}, optional\n", + " | If 1, hierarchical softmax will be used for model training.\n", + " | If 0, hierarchical softmax will not be used for model training.\n", + " | negative : int, optional\n", + " | If > 0, negative sampling will be used, the int for negative specifies how many \"noise words\"\n", + " | should be drawn (usually between 5-20).\n", + " | If 0, negative sampling will not be used.\n", + " | ns_exponent : float, optional\n", + " | The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion\n", + " | to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more\n", + " | than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n", + " | More recently, in https://arxiv.org/abs/1804.04212, Caselles-Dupré, Lesaint, & Royo-Letelier suggest that\n", + " | other values may perform better for recommendation applications.\n", + " | cbow_mean : {0, 1}, optional\n", + " | If 0, use the sum of the context word vectors. If 1, use the mean, only applies when cbow is used.\n", + " | alpha : float, optional\n", + " | The initial learning rate.\n", + " | min_alpha : float, optional\n", + " | Learning rate will linearly drop to `min_alpha` as training progresses.\n", + " | seed : int, optional\n", + " | Seed for the random number generator. Initial vectors for each word are seeded with a hash of\n", + " | the concatenation of word + `str(seed)`. Note that for a fully deterministically-reproducible run,\n", + " | you must also limit the model to a single worker thread (`workers=1`), to eliminate ordering jitter\n", + " | from OS thread scheduling. (In Python 3, reproducibility between interpreter launches also requires\n", + " | use of the `PYTHONHASHSEED` environment variable to control hash randomization).\n", + " | max_vocab_size : int, optional\n", + " | Limits the RAM during vocabulary building; if there are more unique\n", + " | words than this, then prune the infrequent ones. Every 10 million word types need about 1GB of RAM.\n", + " | Set to `None` for no limit.\n", + " | max_final_vocab : int, optional\n", + " | Limits the vocab to a target vocab size by automatically picking a matching min_count. If the specified\n", + " | min_count is more than the calculated min_count, the specified min_count will be used.\n", + " | Set to `None` if not required.\n", + " | sample : float, optional\n", + " | The threshold for configuring which higher-frequency words are randomly downsampled,\n", + " | useful range is (0, 1e-5).\n", + " | hashfxn : function, optional\n", + " | Hash function to use to randomly initialize weights, for increased training reproducibility.\n", + " | epochs : int, optional\n", + " | Number of iterations (epochs) over the corpus. (Formerly: `iter`)\n", + " | trim_rule : function, optional\n", + " | Vocabulary trimming rule, specifies whether certain words should remain in the vocabulary,\n", + " | be trimmed away, or handled using the default (discard if word count < min_count).\n", + " | Can be None (min_count will be used, look to :func:`~gensim.utils.keep_vocab_item`),\n", + " | or a callable that accepts parameters (word, count, min_count) and returns either\n", + " | :attr:`gensim.utils.RULE_DISCARD`, :attr:`gensim.utils.RULE_KEEP` or :attr:`gensim.utils.RULE_DEFAULT`.\n", + " | The rule, if given, is only used to prune vocabulary during build_vocab() and is not stored as part of the\n", + " | model.\n", + " | \n", + " | The input parameters are of the following types:\n", + " | * `word` (str) - the word we are examining\n", + " | * `count` (int) - the word's frequency count in the corpus\n", + " | * `min_count` (int) - the minimum count threshold.\n", + " | sorted_vocab : {0, 1}, optional\n", + " | If 1, sort the vocabulary by descending frequency before assigning word indexes.\n", + " | See :meth:`~gensim.models.keyedvectors.KeyedVectors.sort_by_descending_frequency()`.\n", + " | batch_words : int, optional\n", + " | Target size (in words) for batches of examples passed to worker threads (and\n", + " | thus cython routines).(Larger batches will be passed if individual\n", + " | texts are longer than 10000 words, but the standard cython code truncates to that maximum.)\n", + " | compute_loss: bool, optional\n", + " | If True, computes and stores loss value which can be retrieved using\n", + " | :meth:`~gensim.models.word2vec.Word2Vec.get_latest_training_loss`.\n", + " | callbacks : iterable of :class:`~gensim.models.callbacks.CallbackAny2Vec`, optional\n", + " | Sequence of callbacks to be executed at specific stages during training.\n", + " | shrink_windows : bool, optional\n", + " | New in 4.1. Experimental.\n", + " | If True, the effective window size is uniformly sampled from [1, `window`]\n", + " | for each target word during training, to match the original word2vec algorithm's\n", + " | approximate weighting of context words by distance. Otherwise, the effective\n", + " | window size is always fixed to `window` words to either side.\n", + " | \n", + " | Examples\n", + " | --------\n", + " | Initialize and train a :class:`~gensim.models.word2vec.Word2Vec` model\n", + " | \n", + " | .. sourcecode:: pycon\n", + " | \n", + " | >>> from gensim.models import Word2Vec\n", + " | >>> sentences = [[\"cat\", \"say\", \"meow\"], [\"dog\", \"say\", \"woof\"]]\n", + " | >>> model = Word2Vec(sentences, min_count=1)\n", + " | \n", + " | Attributes\n", + " | ----------\n", + " | wv : :class:`~gensim.models.keyedvectors.KeyedVectors`\n", + " | This object essentially contains the mapping between words and embeddings. After training, it can be used\n", + " | directly to query those embeddings in various ways. See the module level docstring for examples.\n", + " | \n", + " | __str__(self)\n", + " | Human readable representation of the model's state.\n", + " | \n", + " | Returns\n", + " | -------\n", + " | str\n", + " | Human readable representation of the model's state, including the vocabulary size, vector size\n", + " | and learning rate.\n", + " | \n", + " | add_null_word(self)\n", + " | \n", + " | build_vocab(self, corpus_iterable=None, corpus_file=None, update=False, progress_per=10000, keep_raw_vocab=False, trim_rule=None, **kwargs)\n", + " | Build vocabulary from a sequence of sentences (can be a once-only generator stream).\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | corpus_iterable : iterable of list of str\n", + " | Can be simply a list of lists of tokens, but for larger corpora,\n", + " | consider an iterable that streams the sentences directly from disk/network.\n", + " | See :class:`~gensim.models.word2vec.BrownCorpus`, :class:`~gensim.models.word2vec.Text8Corpus`\n", + " | or :class:`~gensim.models.word2vec.LineSentence` module for such examples.\n", + " | corpus_file : str, optional\n", + " | Path to a corpus file in :class:`~gensim.models.word2vec.LineSentence` format.\n", + " | You may use this argument instead of `sentences` to get performance boost. Only one of `sentences` or\n", + " | `corpus_file` arguments need to be passed (not both of them).\n", + " | update : bool\n", + " | If true, the new words in `sentences` will be added to model's vocab.\n", + " | progress_per : int, optional\n", + " | Indicates how many words to process before showing/updating the progress.\n", + " | keep_raw_vocab : bool, optional\n", + " | If False, the raw vocabulary will be deleted after the scaling is done to free up RAM.\n", + " | trim_rule : function, optional\n", + " | Vocabulary trimming rule, specifies whether certain words should remain in the vocabulary,\n", + " | be trimmed away, or handled using the default (discard if word count < min_count).\n", + " | Can be None (min_count will be used, look to :func:`~gensim.utils.keep_vocab_item`),\n", + " | or a callable that accepts parameters (word, count, min_count) and returns either\n", + " | :attr:`gensim.utils.RULE_DISCARD`, :attr:`gensim.utils.RULE_KEEP` or :attr:`gensim.utils.RULE_DEFAULT`.\n", + " | The rule, if given, is only used to prune vocabulary during current method call and is not stored as part\n", + " | of the model.\n", + " | \n", + " | The input parameters are of the following types:\n", + " | * `word` (str) - the word we are examining\n", + " | * `count` (int) - the word's frequency count in the corpus\n", + " | * `min_count` (int) - the minimum count threshold.\n", + " | \n", + " | **kwargs : object\n", + " | Keyword arguments propagated to `self.prepare_vocab`.\n", + " | \n", + " | build_vocab_from_freq(self, word_freq, keep_raw_vocab=False, corpus_count=None, trim_rule=None, update=False)\n", + " | Build vocabulary from a dictionary of word frequencies.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | word_freq : dict of (str, int)\n", + " | A mapping from a word in the vocabulary to its frequency count.\n", + " | keep_raw_vocab : bool, optional\n", + " | If False, delete the raw vocabulary after the scaling is done to free up RAM.\n", + " | corpus_count : int, optional\n", + " | Even if no corpus is provided, this argument can set corpus_count explicitly.\n", + " | trim_rule : function, optional\n", + " | Vocabulary trimming rule, specifies whether certain words should remain in the vocabulary,\n", + " | be trimmed away, or handled using the default (discard if word count < min_count).\n", + " | Can be None (min_count will be used, look to :func:`~gensim.utils.keep_vocab_item`),\n", + " | or a callable that accepts parameters (word, count, min_count) and returns either\n", + " | :attr:`gensim.utils.RULE_DISCARD`, :attr:`gensim.utils.RULE_KEEP` or :attr:`gensim.utils.RULE_DEFAULT`.\n", + " | The rule, if given, is only used to prune vocabulary during current method call and is not stored as part\n", + " | of the model.\n", + " | \n", + " | The input parameters are of the following types:\n", + " | * `word` (str) - the word we are examining\n", + " | * `count` (int) - the word's frequency count in the corpus\n", + " | * `min_count` (int) - the minimum count threshold.\n", + " | \n", + " | update : bool, optional\n", + " | If true, the new provided words in `word_freq` dict will be added to model's vocab.\n", + " | \n", + " | create_binary_tree(self)\n", + " | Create a `binary Huffman tree `_ using stored vocabulary\n", + " | word counts. Frequent words will have shorter binary codes.\n", + " | Called internally from :meth:`~gensim.models.word2vec.Word2VecVocab.build_vocab`.\n", + " | \n", + " | estimate_memory(self, vocab_size=None, report=None)\n", + " | Estimate required memory for a model using current settings and provided vocabulary size.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | vocab_size : int, optional\n", + " | Number of unique tokens in the vocabulary\n", + " | report : dict of (str, int), optional\n", + " | A dictionary from string representations of the model's memory consuming members to their size in bytes.\n", + " | \n", + " | Returns\n", + " | -------\n", + " | dict of (str, int)\n", + " | A dictionary from string representations of the model's memory consuming members to their size in bytes.\n", + " | \n", + " | get_latest_training_loss(self)\n", + " | Get current value of the training loss.\n", + " | \n", + " | Returns\n", + " | -------\n", + " | float\n", + " | Current training loss.\n", + " | \n", + " | init_sims(self, replace=False)\n", + " | Precompute L2-normalized vectors. Obsoleted.\n", + " | \n", + " | If you need a single unit-normalized vector for some key, call\n", + " | :meth:`~gensim.models.keyedvectors.KeyedVectors.get_vector` instead:\n", + " | ``word2vec_model.wv.get_vector(key, norm=True)``.\n", + " | \n", + " | To refresh norms after you performed some atypical out-of-band vector tampering,\n", + " | call `:meth:`~gensim.models.keyedvectors.KeyedVectors.fill_norms()` instead.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | replace : bool\n", + " | If True, forget the original trained vectors and only keep the normalized ones.\n", + " | You lose information if you do this.\n", + " | \n", + " | init_weights(self)\n", + " | Reset all projection weights to an initial (untrained) state, but keep the existing vocabulary.\n", + " | \n", + " | make_cum_table(self, domain=2147483647)\n", + " | Create a cumulative-distribution table using stored vocabulary word counts for\n", + " | drawing random words in the negative-sampling training routines.\n", + " | \n", + " | To draw a word index, choose a random integer up to the maximum value in the table (cum_table[-1]),\n", + " | then finding that integer's sorted insertion point (as if by `bisect_left` or `ndarray.searchsorted()`).\n", + " | That insertion point is the drawn index, coming up in proportion equal to the increment at that slot.\n", + " | \n", + " | predict_output_word(self, context_words_list, topn=10)\n", + " | Get the probability distribution of the center word given context words.\n", + " | \n", + " | Note this performs a CBOW-style propagation, even in SG models,\n", + " | and doesn't quite weight the surrounding words the same as in\n", + " | training -- so it's just one crude way of using a trained model\n", + " | as a predictor.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | context_words_list : list of (str and/or int)\n", + " | List of context words, which may be words themselves (str)\n", + " | or their index in `self.wv.vectors` (int).\n", + " | topn : int, optional\n", + " | Return `topn` words and their probabilities.\n", + " | \n", + " | Returns\n", + " | -------\n", + " | list of (str, float)\n", + " | `topn` length list of tuples of (word, probability).\n", + " | \n", + " | prepare_vocab(self, update=False, keep_raw_vocab=False, trim_rule=None, min_count=None, sample=None, dry_run=False)\n", + " | Apply vocabulary settings for `min_count` (discarding less-frequent words)\n", + " | and `sample` (controlling the downsampling of more-frequent words).\n", + " | \n", + " | Calling with `dry_run=True` will only simulate the provided settings and\n", + " | report the size of the retained vocabulary, effective corpus length, and\n", + " | estimated memory requirements. Results are both printed via logging and\n", + " | returned as a dict.\n", + " | \n", + " | Delete the raw vocabulary after the scaling is done to free up RAM,\n", + " | unless `keep_raw_vocab` is set.\n", + " | \n", + " | prepare_weights(self, update=False)\n", + " | Build tables and model weights based on final vocabulary settings.\n", + " | \n", + " | reset_from(self, other_model)\n", + " | Borrow shareable pre-built structures from `other_model` and reset hidden layer weights.\n", + " | \n", + " | Structures copied are:\n", + " | * Vocabulary\n", + " | * Index to word mapping\n", + " | * Cumulative frequency table (used for negative sampling)\n", + " | * Cached corpus length\n", + " | \n", + " | Useful when testing multiple models on the same corpus in parallel. However, as the models\n", + " | then share all vocabulary-related structures other than vectors, neither should then\n", + " | expand their vocabulary (which could leave the other in an inconsistent, broken state).\n", + " | And, any changes to any per-word 'vecattr' will affect both models.\n", + " | \n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | other_model : :class:`~gensim.models.word2vec.Word2Vec`\n", + " | Another model to copy the internal structures from.\n", + " | \n", + " | save(self, *args, **kwargs)\n", + " | Save the model.\n", + " | This saved model can be loaded again using :func:`~gensim.models.word2vec.Word2Vec.load`, which supports\n", + " | online training and getting vectors for vocabulary words.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | fname : str\n", + " | Path to the file.\n", + " | \n", + " | scan_vocab(self, corpus_iterable=None, corpus_file=None, progress_per=10000, workers=None, trim_rule=None)\n", + " | \n", + " | score(self, sentences, total_sentences=1000000, chunksize=100, queue_factor=2, report_delay=1)\n", + " | Score the log probability for a sequence of sentences.\n", + " | This does not change the fitted model in any way (see :meth:`~gensim.models.word2vec.Word2Vec.train` for that).\n", + " | \n", + " | Gensim has currently only implemented score for the hierarchical softmax scheme,\n", + " | so you need to have run word2vec with `hs=1` and `negative=0` for this to work.\n", + " | \n", + " | Note that you should specify `total_sentences`; you'll run into problems if you ask to\n", + " | score more than this number of sentences but it is inefficient to set the value too high.\n", + " | \n", + " | See the `article by Matt Taddy: \"Document Classification by Inversion of Distributed Language Representations\"\n", + " | `_ and the\n", + " | `gensim demo `_ for examples of\n", + " | how to use such scores in document classification.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | sentences : iterable of list of str\n", + " | The `sentences` iterable can be simply a list of lists of tokens, but for larger corpora,\n", + " | consider an iterable that streams the sentences directly from disk/network.\n", + " | See :class:`~gensim.models.word2vec.BrownCorpus`, :class:`~gensim.models.word2vec.Text8Corpus`\n", + " | or :class:`~gensim.models.word2vec.LineSentence` in :mod:`~gensim.models.word2vec` module for such examples.\n", + " | total_sentences : int, optional\n", + " | Count of sentences.\n", + " | chunksize : int, optional\n", + " | Chunksize of jobs\n", + " | queue_factor : int, optional\n", + " | Multiplier for size of queue (number of workers * queue_factor).\n", + " | report_delay : float, optional\n", + " | Seconds to wait before reporting progress.\n", + " | \n", + " | seeded_vector(self, seed_string, vector_size)\n", + " | \n", + " | train(self, corpus_iterable=None, corpus_file=None, total_examples=None, total_words=None, epochs=None, start_alpha=None, end_alpha=None, word_count=0, queue_factor=2, report_delay=1.0, compute_loss=False, callbacks=(), **kwargs)\n", + " | Update the model's neural weights from a sequence of sentences.\n", + " | \n", + " | Notes\n", + " | -----\n", + " | To support linear learning-rate decay from (initial) `alpha` to `min_alpha`, and accurate\n", + " | progress-percentage logging, either `total_examples` (count of sentences) or `total_words` (count of\n", + " | raw words in sentences) **MUST** be provided. If `sentences` is the same corpus\n", + " | that was provided to :meth:`~gensim.models.word2vec.Word2Vec.build_vocab` earlier,\n", + " | you can simply use `total_examples=self.corpus_count`.\n", + " | \n", + " | Warnings\n", + " | --------\n", + " | To avoid common mistakes around the model's ability to do multiple training passes itself, an\n", + " | explicit `epochs` argument **MUST** be provided. In the common and recommended case\n", + " | where :meth:`~gensim.models.word2vec.Word2Vec.train` is only called once, you can set `epochs=self.epochs`.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | corpus_iterable : iterable of list of str\n", + " | The ``corpus_iterable`` can be simply a list of lists of tokens, but for larger corpora,\n", + " | consider an iterable that streams the sentences directly from disk/network, to limit RAM usage.\n", + " | See :class:`~gensim.models.word2vec.BrownCorpus`, :class:`~gensim.models.word2vec.Text8Corpus`\n", + " | or :class:`~gensim.models.word2vec.LineSentence` in :mod:`~gensim.models.word2vec` module for such examples.\n", + " | See also the `tutorial on data streaming in Python\n", + " | `_.\n", + " | corpus_file : str, optional\n", + " | Path to a corpus file in :class:`~gensim.models.word2vec.LineSentence` format.\n", + " | You may use this argument instead of `sentences` to get performance boost. Only one of `sentences` or\n", + " | `corpus_file` arguments need to be passed (not both of them).\n", + " | total_examples : int\n", + " | Count of sentences.\n", + " | total_words : int\n", + " | Count of raw words in sentences.\n", + " | epochs : int\n", + " | Number of iterations (epochs) over the corpus.\n", + " | start_alpha : float, optional\n", + " | Initial learning rate. If supplied, replaces the starting `alpha` from the constructor,\n", + " | for this one call to`train()`.\n", + " | Use only if making multiple calls to `train()`, when you want to manage the alpha learning-rate yourself\n", + " | (not recommended).\n", + " | end_alpha : float, optional\n", + " | Final learning rate. Drops linearly from `start_alpha`.\n", + " | If supplied, this replaces the final `min_alpha` from the constructor, for this one call to `train()`.\n", + " | Use only if making multiple calls to `train()`, when you want to manage the alpha learning-rate yourself\n", + " | (not recommended).\n", + " | word_count : int, optional\n", + " | Count of words already trained. Set this to 0 for the usual\n", + " | case of training on all words in sentences.\n", + " | queue_factor : int, optional\n", + " | Multiplier for size of queue (number of workers * queue_factor).\n", + " | report_delay : float, optional\n", + " | Seconds to wait before reporting progress.\n", + " | compute_loss: bool, optional\n", + " | If True, computes and stores loss value which can be retrieved using\n", + " | :meth:`~gensim.models.word2vec.Word2Vec.get_latest_training_loss`.\n", + " | callbacks : iterable of :class:`~gensim.models.callbacks.CallbackAny2Vec`, optional\n", + " | Sequence of callbacks to be executed at specific stages during training.\n", + " | \n", + " | Examples\n", + " | --------\n", + " | .. sourcecode:: pycon\n", + " | \n", + " | >>> from gensim.models import Word2Vec\n", + " | >>> sentences = [[\"cat\", \"say\", \"meow\"], [\"dog\", \"say\", \"woof\"]]\n", + " | >>>\n", + " | >>> model = Word2Vec(min_count=1)\n", + " | >>> model.build_vocab(sentences) # prepare the model vocabulary\n", + " | >>> model.train(sentences, total_examples=model.corpus_count, epochs=model.epochs) # train word vectors\n", + " | (1, 30)\n", + " | \n", + " | update_weights(self)\n", + " | Copy all the existing weights, and reset the weights for the newly added vocabulary.\n", + " | \n", + " | ----------------------------------------------------------------------\n", + " | Class methods defined here:\n", + " | \n", + " | load(*args, rethrow=False, **kwargs) from builtins.type\n", + " | Load a previously saved :class:`~gensim.models.word2vec.Word2Vec` model.\n", + " | \n", + " | See Also\n", + " | --------\n", + " | :meth:`~gensim.models.word2vec.Word2Vec.save`\n", + " | Save model.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | fname : str\n", + " | Path to the saved file.\n", + " | \n", + " | Returns\n", + " | -------\n", + " | :class:`~gensim.models.word2vec.Word2Vec`\n", + " | Loaded model.\n", + " | \n", + " | ----------------------------------------------------------------------\n", + " | Data and other attributes defined here:\n", + " | \n", + " | __slotnames__ = []\n", + " | \n", + " | ----------------------------------------------------------------------\n", + " | Methods inherited from gensim.utils.SaveLoad:\n", + " | \n", + " | add_lifecycle_event(self, event_name, log_level=20, **event)\n", + " | Append an event into the `lifecycle_events` attribute of this object, and also\n", + " | optionally log the event at `log_level`.\n", + " | \n", + " | Events are important moments during the object's life, such as \"model created\",\n", + " | \"model saved\", \"model loaded\", etc.\n", + " | \n", + " | The `lifecycle_events` attribute is persisted across object's :meth:`~gensim.utils.SaveLoad.save`\n", + " | and :meth:`~gensim.utils.SaveLoad.load` operations. It has no impact on the use of the model,\n", + " | but is useful during debugging and support.\n", + " | \n", + " | Set `self.lifecycle_events = None` to disable this behaviour. Calls to `add_lifecycle_event()`\n", + " | will not record events into `self.lifecycle_events` then.\n", + " | \n", + " | Parameters\n", + " | ----------\n", + " | event_name : str\n", + " | Name of the event. Can be any label, e.g. \"created\", \"stored\" etc.\n", + " | event : dict\n", + " | Key-value mapping to append to `self.lifecycle_events`. Should be JSON-serializable, so keep it simple.\n", + " | Can be empty.\n", + " | \n", + " | This method will automatically add the following key-values to `event`, so you don't have to specify them:\n", + " | \n", + " | - `datetime`: the current date & time\n", + " | - `gensim`: the current Gensim version\n", + " | - `python`: the current Python version\n", + " | - `platform`: the current platform\n", + " | - `event`: the name of this event\n", + " | log_level : int\n", + " | Also log the complete event dict, at the specified log level. Set to False to not log at all.\n", + " | \n", + " | ----------------------------------------------------------------------\n", + " | Data descriptors inherited from gensim.utils.SaveLoad:\n", + " | \n", + " | __dict__\n", + " | dictionary for instance variables (if defined)\n", + " | \n", + " | __weakref__\n", + " | list of weak references to the object (if defined)\n", + "\n" + ] + } + ], + "source": [ + "help(model)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7527503-27e1-4cd9-8d88-35bed09065c2", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/word2vec.model b/notebooks/word2vec.model new file mode 100644 index 00000000..813fdeac Binary files /dev/null and b/notebooks/word2vec.model differ diff --git a/notebooks/word2vec.wordvectors b/notebooks/word2vec.wordvectors new file mode 100644 index 00000000..0231f58e Binary files /dev/null and b/notebooks/word2vec.wordvectors differ diff --git a/plugins/speechhandler/check_email/check_email.py b/plugins/speechhandler/check_email/check_email.py index 40070d77..92372241 100644 --- a/plugins/speechhandler/check_email/check_email.py +++ b/plugins/speechhandler/check_email/check_email.py @@ -36,7 +36,8 @@ def intents(self): ] } }, - 'action': self.handle + 'action': self.handle, + 'allow_llm': True } } diff --git a/plugins/speechhandler/clock/clock.py b/plugins/speechhandler/clock/clock.py index 90908edc..bcfc600a 100644 --- a/plugins/speechhandler/clock/clock.py +++ b/plugins/speechhandler/clock/clock.py @@ -6,6 +6,18 @@ from naomi.run_command import run_command +class SafeDatetime(object): + def __init__(self, dt): + self.dt = dt + + def __format__(self, format_spec): + hour = self.dt.hour % 12 + if hour == 0: + hour = 12 + format_spec = format_spec.replace('%l', str(hour)) + return self.dt.strftime(format_spec) + + class ClockPlugin(plugin.SpeechHandlerPlugin): def settings(self): _ = self.gettext @@ -53,7 +65,8 @@ def intents(self): ] }, }, - 'action': self.handle + 'action': self.handle, + 'allow_llm': True } } @@ -73,8 +86,8 @@ def handle(self, text, mic): mic -- used to interact with the user (for both input and output) """ tz = app_utils.get_timezone() - now = datetime.datetime.now(tz=tz) - if now.minute == 0: + now = SafeDatetime(datetime.datetime.now(tz=tz)) + if now.dt.minute == 0: fmt = self.gettext("It is {t:%l} {t:%p} right now.") else: fmt = self.gettext("It is {t:%l}:{t:%M} {t:%p} right now.") diff --git a/plugins/speechhandler/hackernews/hackernews.py b/plugins/speechhandler/hackernews/hackernews.py index e3e8c329..cbfacc6f 100644 --- a/plugins/speechhandler/hackernews/hackernews.py +++ b/plugins/speechhandler/hackernews/hackernews.py @@ -63,7 +63,8 @@ def intents(self): ] }, }, - 'action': self.handle + 'action': self.handle, + 'allow_llm': True } } @@ -107,25 +108,25 @@ def handle(self, text, mic): f'{i}) {a.title}' for i, a in enumerate(articles, start=1) ) mic.say(text) - - if profile.get_profile_flag(['allows_email']): - if(mic.confirm(_('Would you like me to send you these articles?'))): - mic.say(_("Sure, just give me a moment.")) - email_text = self.make_email_text(articles) - email_sent = app_utils.email_user( - SUBJECT=_("Top Stories from Hacker News"), - BODY=email_text - ) - if email_sent: - mic.say( - _("Okay, I've sent you an email.") + if not mic.use_llm: + if profile.get_profile_flag(['allows_email']): + if mic.confirm(_('Would you like me to send you these articles?')): + mic.say(_("Sure, just give me a moment.")) + email_text = self.make_email_text(articles) + email_sent = app_utils.email_user( + SUBJECT=_("Top Stories from Hacker News"), + BODY=email_text ) + if email_sent: + mic.say( + _("Okay, I've sent you an email.") + ) + else: + mic.say( + _("Sorry, I'm having trouble sending you these articles.") + ) else: - mic.say( - _("Sorry, I'm having trouble sending you these articles.") - ) - else: - mic.say(_("Okay, I will not send any articles.")) + mic.say(_("Okay, I will not send any articles.")) def make_email_text(self, articles): _ = self.gettext diff --git a/plugins/speechhandler/news/news.py b/plugins/speechhandler/news/news.py index 188adb4b..405638b5 100644 --- a/plugins/speechhandler/news/news.py +++ b/plugins/speechhandler/news/news.py @@ -91,7 +91,8 @@ def intents(self): ] } }, - 'action': self.handle + 'action': self.handle, + 'allow_llm': True } } @@ -128,27 +129,27 @@ def handle(self, text, mic): email = profile.get(['email', 'address']) if not email: return - - if profile.get_profile_flag(['allows_email'], False): - - if(mic.confirm(_('Would you like me to send you these articles?'))): - mic.say(self.gettext("Sure, just give me a moment.")) - SUBJECT = self.gettext("Your Top Headlines") - email_text = self.make_email_text(articles) - email_sent = app_utils.email_user( - SUBJECT=SUBJECT, - BODY=email_text - ) - if email_sent: - mic.say( - _("Okay, I've sent you an email.") + if not mic.use_llm: + if profile.get_profile_flag(['allows_email'], False): + + if mic.confirm(_('Would you like me to send you these articles?')): + mic.say(self.gettext("Sure, just give me a moment.")) + SUBJECT = self.gettext("Your Top Headlines") + email_text = self.make_email_text(articles) + email_sent = app_utils.email_user( + SUBJECT=SUBJECT, + BODY=email_text ) + if email_sent: + mic.say( + _("Okay, I've sent you an email.") + ) + else: + mic.say( + _("Sorry, I'm having trouble sending you these articles.") + ) else: - mic.say( - _("Sorry, I'm having trouble sending you these articles.") - ) - else: - mic.say(self.gettext("Okay, I will not send any articles.")) + mic.say(self.gettext("Okay, I will not send any articles.")) def make_email_text(self, articles): text = self.gettext('These are the articles you requested:') diff --git a/plugins/speechhandler/shutdownplugin/shutdown.py b/plugins/speechhandler/shutdownplugin/shutdown.py index f2a59021..c9462ca0 100644 --- a/plugins/speechhandler/shutdownplugin/shutdown.py +++ b/plugins/speechhandler/shutdownplugin/shutdown.py @@ -45,14 +45,12 @@ def handle(self, intent, mic): name = profile.get_profile_var(['first_name'], '') messages = [ - self.gettext("I'm shutting down."), - self.gettext("Shutting down now."), - self.gettext("Bye Bye."), - self.gettext("Goodbye, {}").format(name) + self.gettext("I'm shutting down. [shutdown]"), + self.gettext("Shutting down now. [shutdown]"), + self.gettext("Bye Bye. [shutdown]"), + self.gettext("Goodbye, {} [shutdown]").format(name) ] message = random.choice(messages) mic.say(message) - mic.Continue = False - quit() diff --git a/plugins/stt/pocketsphinx-stt/sphinxplugin.py b/plugins/stt/pocketsphinx-stt/sphinxplugin.py index 32c88d70..78cd1191 100644 --- a/plugins/stt/pocketsphinx-stt/sphinxplugin.py +++ b/plugins/stt/pocketsphinx-stt/sphinxplugin.py @@ -2,8 +2,10 @@ import logging import os import platform +import sys import tempfile from collections import OrderedDict +from naomi import app_utils from naomi import paths from naomi import plugin from naomi import profile @@ -15,20 +17,28 @@ except ModuleNotFoundError: # Try to install phonetisaurus from pypi cmd = [ - 'pip', 'install', 'phonetisaurus' + sys.executable, '-m', 'pip', 'install', 'phonetisaurus' ] - completedprocess = run_command(cmd) - if completedprocess.returncode == 0: + try: + completedprocess = run_command(cmd) + returncode = completedprocess.returncode + except Exception: + returncode = -1 + + if returncode == 0: if importlib.util.find_spec("phonetisaurus"): from . import sphinxvocab from .g2p import PhonetisaurusG2P else: - raise Exception("Phonetisaurus install failed") + raise ImportError("Phonetisaurus install failed") else: + # Phonetisaurus is not supported on Windows + if platform.system().lower() == "windows": + raise ImportError("Phonetisaurus is not supported on Windows") # check what architecture we are on - architecture = platform.machine() + architecture = platform.machine().lower() phonetisaurus_url = "" - if architecture == "x86_64": + if architecture in ("x86_64", "amd64"): wheel = "phonetisaurus-0.3.0-py3-none-manylinux1_x86_64.whl" elif architecture == "arm6l": wheel = "phonetisaurus-0.3.0-py3-none-linux_armv6l.whl" @@ -38,32 +48,41 @@ wheel = "phonetisaurus-0.3.0-py3-none-linux_aarch64.whl" else: # Here we should probably build the package from source - raise (f"Architecture {architecture} is not supported at this time") + raise ImportError(f"Architecture {architecture} is not supported at this time") phonetisaurus_url = f"https://github.com/rhasspy/phonetisaurus-pypi/releases/download/v0.3.0/{wheel}" phonetisaurus_path = paths.sub('sources', wheel) - cmd = [ - 'curl', '-L', '-o', phonetisaurus_path, phonetisaurus_url - ] - completedprocess = run_command(cmd) - if completedprocess.returncode != 0: - raise Exception("Unable to download file from {phonetisaurus_url}") + try: + app_utils.download_file(phonetisaurus_url, phonetisaurus_path) + download_success = True + except Exception: + download_success = False + + if not download_success: + raise ImportError(f"Unable to download file from {phonetisaurus_url}") else: # use pip to install the file cmd = [ + sys.executable, + '-m', 'pip', 'install', phonetisaurus_path ] - completedprocess = run_command(cmd) - if completedprocess.returncode == 0: + try: + completedprocess = run_command(cmd) + install_returncode = completedprocess.returncode + except Exception: + install_returncode = -1 + + if install_returncode == 0: # Check if phonetisaurus is intalled if importlib.util.find_spec("phonetisaurus"): from . import sphinxvocab from .g2p import PhonetisaurusG2P else: - raise Exception("Phonetisaurus install failed") + raise ImportError("Phonetisaurus is not installed") else: - raise Exception("Phonetisaurus install failed") + raise ImportError("Phonetisaurus install command failed") from pocketsphinx import pocketsphinx diff --git a/plugins/tti/naomi_tti/naomi_tti.py b/plugins/tti/naomi_tti/naomi_tti.py index af2c9d0f..b4971a73 100644 --- a/plugins/tti/naomi_tti/naomi_tti.py +++ b/plugins/tti/naomi_tti/naomi_tti.py @@ -26,17 +26,17 @@ def add_intents(self, intents): while intent in self.intent_map['intents']: intent_inc += 1 intent = "{}{}".format(intent_base, intent_inc) - if('locale' in intents[intent_base]): + if 'locale' in intents[intent_base]: # If the selected locale is not available, try matching just # the language ("en-US" -> "en") - if(locale not in intents[intent_base]['locale']): + if locale not in intents[intent_base]['locale']: for language in intents[intent_base]['locale']: - if(language[:2] == locale[:2]): + if language[:2] == locale[:2]: locale = language break - if(locale not in intents[intent_base]['locale']): + if locale not in intents[intent_base]['locale']: raise KeyError("Language not supported") - if('keywords' in intents[intent_base]['locale'][locale]): + if 'keywords' in intents[intent_base]['locale'][locale]: if intent not in self.keywords: self.keywords[intent] = {} for keyword in intents[intent_base]['locale'][locale]['keywords']: @@ -47,7 +47,8 @@ def add_intents(self, intents): 'action': intents[intent_base]['action'], 'name': intent_base, 'templates': [], - 'words': {} + 'words': {}, + 'allow_llm': intents[intent_base]['allow_llm'] if 'allow_llm' in intents[intent_base] else False } for phrase in intents[intent_base]['locale'][locale]['templates']: # Save the phrase so we can search for undefined keywords @@ -61,11 +62,9 @@ def add_intents(self, intents): # This should get better over time, but at the moment # since we have so few intents, these common words are # having a way oversized impact. - if( - word not in profile.get( - ['naomi_tti', 'words_to_ignore'], - ['ANY', 'ARE', 'DO', 'IN', 'IS', 'THE', 'TO', 'WHAT'] - ) + if word not in profile.get( + ['naomi_tti', 'words_to_ignore'], + ['ANY', 'ARE', 'DO', 'IN', 'IS', 'THE', 'TO', 'WHAT'] ): try: self.intent_map['intents'][intent]['words'][word] += 1 @@ -128,7 +127,7 @@ def get_plugin_phrases(self, passive_listen=False): "standard_phrases", "{}.txt".format(profile.get(['language'], 'en-US')) ) - if(os.path.isfile(custom_standard_phrases_file)): + if os.path.isfile(custom_standard_phrases_file): with open(custom_standard_phrases_file, mode='r') as f: for line in f: phrase = line.strip() @@ -136,21 +135,21 @@ def get_plugin_phrases(self, passive_listen=False): phrases.append(phrase.upper()) for intent in self.intent_map['intents']: - if('templates' in self.intent_map['intents'][intent]): + if 'templates' in self.intent_map['intents'][intent]: templates = self.intent_map['intents'][intent]['templates'] - if(intent in self.keywords): + if intent in self.keywords: keywords = self.keywords[intent] for keyword in keywords: # This will not replace keywords that do not have a list associated with them, like regex and open keywords # print("Replacing {} with words from {} in templates".format(keyword,keywords[keyword])) for template in templates: - if(to_keyword(keyword) in template): + if to_keyword(keyword) in template: templates.extend([template.replace(to_keyword(keyword), word.upper()) for word in keywords[keyword]]) # Now that we have expanded every instance of keyword in templates, delete any template that still contains keyword templates = [template for template in templates if not to_keyword(keyword) in template] for template in templates: # include the keyword, otherwise - if(passive_listen): + if passive_listen: keywords = profile.get(["keyword"]) if not (isinstance(keywords, list)): keywords = [keywords] @@ -251,7 +250,7 @@ def determine_intent(self, phrase): bestintent = max(intentscores, key=lambda key: intentscores[key]) # Change the intent scores into probabilities totalscore = sum(intentscores.values()) - if(totalscore > 0): + if totalscore > 0: bestscore = intentscores[bestintent] / totalscore else: bestscore = 0 @@ -260,7 +259,8 @@ def determine_intent(self, phrase): 'input': phrase, 'score': bestscore, 'matches': allvariants[variant], - 'action': self.intent_map['intents'][bestintent]['action'] + 'action': self.intent_map['intents'][bestintent]['action'], + 'allow_llm': self.intent_map['intents'][bestintent]['allow_llm'] } bestvariant = max(variantscores, key=lambda key: variantscores[key]['score']) # print("BEST: {}".format(bestvariant)) @@ -319,7 +319,7 @@ def determine_intent(self, phrase): # print("Matchlist: {} Word: {} Subs: {}".format(matchlist, word, possiblesubstitutions)) # We don't actually know if there are actually any # substitutions in the template - if(possiblesubstitutions > 0): + if possiblesubstitutions > 0: for i in range(possiblesubstitutions): # print("replacenth('{}','{}','{}',{})".format( # '{}{}{}'.format('{', matchlist, '}'), @@ -350,7 +350,7 @@ def determine_intent(self, phrase): # identified yet. substitutions = re.findall(r'{(.*?)}', currenttemplate) # print("Substitutions: {}".format(substitutions)) - if(substitutions): + if substitutions: for substitution in substitutions: subvar = "{}{}{}".format('{', substitution, '}') # print("Searching for {}".format(subvar)) @@ -383,7 +383,7 @@ def determine_intent(self, phrase): for i in range(1, n): for j in range(1, m): # print("{},{} V: {} T: {}".format(i,j,variant[i-1],template[j-1])) - if(variant[i - 1] == template[j - 1]): + if variant[i - 1] == template[j - 1]: c = 0 else: c = 1 @@ -394,7 +394,7 @@ def determine_intent(self, phrase): matched = "" for i in range(1, n - 1): # print("i: {} s: {}".format(i,s)) - if(a[i - 1][s - 1] == 0): + if a[i - 1][s - 1] == 0: # the previous item was a match # so start here and work to the right until there is another match k = i @@ -404,7 +404,7 @@ def determine_intent(self, phrase): compare.extend([1] * (m)) # print(variant[k]) # print("Comparing {} to {}".format(a[k],compare)) - while((a[k] == compare) and (k < (n))): + while ((a[k] == compare) and (k < (n))): # print("k = {}".format(k)) match.append(variant[k - 1]) # print(match) @@ -422,7 +422,7 @@ def determine_intent(self, phrase): substitutedvariant.extend(variant[end:]) # print("SubstitutedVariant: {}".format(substitutedvariant)) break - elif(a[i + 1][s + 1] == 0): + elif a[i + 1][s + 1] == 0: # the next item is a match, so start working backward k = i end = k @@ -430,7 +430,7 @@ def determine_intent(self, phrase): compare = [k] compare.extend([1] * (m)) # print("Comparing {} to {}".format(a[k],compare)) - while(a[k] == compare): + while a[k] == compare: match.append(variant[k - 1]) # print(match) k -= 1 @@ -447,7 +447,7 @@ def determine_intent(self, phrase): substitutedvariant.extend(variant[end:]) # print("SubstitutedVariant: {}".format(substitutedvariant)) break - if(len(matched)): + if len(matched): # print("Match: '{}' to '{}'".format(substitution, matched)) try: variantscores[bestvariant]['matches'][substitution].append(matched) @@ -459,6 +459,7 @@ def determine_intent(self, phrase): 'action': variantscores[bestvariant]['action'], 'input': phrase, 'matches': variantscores[bestvariant]['matches'], - 'score': variantscores[bestvariant]['score'] + 'score': variantscores[bestvariant]['score'], + 'allow_llm': variantscores[bestvariant]['allow_llm'] } } diff --git a/setup.py b/setup.py index 5c71038b..a96c3557 100755 --- a/setup.py +++ b/setup.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import msgfmt diff --git a/tests/test_fixes.py b/tests/test_fixes.py new file mode 100644 index 00000000..e2dc5008 --- /dev/null +++ b/tests/test_fixes.py @@ -0,0 +1,282 @@ +# -*- coding: utf-8 -*- +""" +Tests for fixes applied to: +- Issue #345: --quiet flag +- Issue #379: libttspico-utils in apt_requirements.txt +- Issue #390: npe.py error checking +- Issue #412: Naomi reacts to own beep +- Issue #415: virtualenvwrapper.sh fallback +- Issue #438: master branch install fix +""" +import ast +import os +import re +import unittest + +# Root directory of the project +ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + + +def read_file(relative_path): + with open(os.path.join(ROOT, relative_path), "r", encoding="utf-8") as f: + return f.read() + + +class TestIssue379PicoWave(unittest.TestCase): + """Issue #379: libttspico-utils must be in apt_requirements.txt""" + + def test_libttspico_utils_in_apt_requirements(self): + content = read_file("apt_requirements.txt") + self.assertIn( + "libttspico-utils", content, + "libttspico-utils not found in apt_requirements.txt" + ) + + def test_libttspico_under_tts_section(self): + content = read_file("apt_requirements.txt") + tts_idx = content.find("# TTS") + pico_idx = content.find("libttspico-utils") + self.assertGreater( + pico_idx, tts_idx, + "libttspico-utils should appear after the # TTS comment" + ) + + +class TestIssue345QuietFlag(unittest.TestCase): + """Issue #345: --quiet / -q flag must be parseable and wired through""" + + def test_quiet_arg_in_main(self): + content = read_file("naomi/__main__.py") + self.assertIn("'--quiet'", content, "--quiet argument not found in __main__.py") + self.assertIn("'-q'", content, "-q short form not found in __main__.py") + + def test_quiet_stored_as_profile_arg(self): + content = read_file("naomi/__main__.py") + self.assertIn( + 'profile.set_arg("quiet"', content, + "quiet not stored as a profile arg in __main__.py" + ) + + def test_quiet_passed_to_naomi_constructor(self): + content = read_file("naomi/__main__.py") + self.assertIn( + "quiet=p_args.quiet", content, + "quiet flag not passed to Naomi() constructor in __main__.py" + ) + + def test_application_accepts_quiet(self): + content = read_file("naomi/application.py") + self.assertIn( + "quiet=False", content, + "Naomi.__init__ doesn't accept quiet parameter in application.py" + ) + + def test_application_skips_populate_when_quiet(self): + content = read_file("naomi/application.py") + self.assertIn( + 'profile.get_arg("quiet")', content, + "application.py doesn't check quiet arg before calling populate.run()" + ) + self.assertIn( + "else:\n populate.run()", content, + "populate.run() is not inside an else block guarded by quiet check" + ) + + def test_plugin_skips_settings_prompt_when_quiet(self): + content = read_file("naomi/plugin.py") + self.assertIn( + 'profile.get_arg("quiet")', content, + "plugin.py doesn't check quiet arg before calling get_setting()" + ) + + +class TestIssue390NpeErrorChecking(unittest.TestCase): + """Issue #390: npe.py must check return codes of install commands""" + + def setUp(self): + self.content = read_file("naomi/npe.py") + + def test_install_file_returncode_checked(self): + self.assertIn( + "completed_process = run_command(install_file)", self.content, + "install.py run_command result not captured in install_plugins" + ) + + def test_apt_install_returncode_checked_in_install(self): + pattern = r"completed_process = run_command\(cmd\).*?if completed_process\.returncode != 0" + self.assertTrue( + re.search(pattern, self.content, re.DOTALL), + "apt install return code not checked in npe.py" + ) + + def test_pip_install_returncode_checked(self): + self.assertIn( + "if completed_process.returncode != 0:", self.content, + "pip install return code not checked in npe.py" + ) + + def test_cleanup_on_failure(self): + self.assertIn( + "shutil.rmtree(install_to)", self.content, + "Failed plugin directory not cleaned up on install failure" + ) + + def test_python_requirements_filename_fixed(self): + self.assertNotIn( + '"python_required.txt"', self.content, + 'Typo "python_required.txt" still present; should be "python_requirements.txt"' + ) + + def test_install_plugins_returns_message(self): + install_section = self.content[self.content.find("def install_plugins"):] + install_section = install_section[:install_section.find("\n def ")] + self.assertIn( + "return returnMessage", install_section, + "install_plugins() does not return a status message" + ) + + def test_update_plugins_returns_message(self): + update_section = self.content[self.content.find("def update_plugins"):] + update_section = update_section[:update_section.find("\n def ")] + self.assertIn( + "return returnMessage", update_section, + "update_plugins() does not return a status message" + ) + + +class TestIssue412ActiveListeningBeep(unittest.TestCase): + """Issue #412: Naomi should not react to its own beep during playback""" + + def test_playing_flag_in_mic(self): + content = read_file("naomi/mic.py") + self.assertIn("self._playing", content, + "self._playing flag not found in naomi/mic.py") + + def test_playing_flag_in_mic_async(self): + content = read_file("naomi/mic_asynchronous.py") + self.assertIn("self._playing", content, + "self._playing flag not found in naomi/mic_asynchronous.py") + + def test_frames_discarded_when_playing(self): + content = read_file("naomi/plugin.py") + self.assertIn("_playing", content, + "plugin.py does not reference _playing flag for frame discard") + + def test_playing_flag_try_finally(self): + content = read_file("naomi/mic.py") + self.assertIn("finally:", content, + "mic.py does not use try/finally for _playing flag management") + + +class TestIssue415VirtualenvwrapperFallback(unittest.TestCase): + """Issue #415: installer must fall back if virtualenvwrapper.sh missing""" + + def test_fallback_check_present(self): + content = read_file("installers/script.deb.sh") + self.assertIn( + "if [ ! -f /usr/share/virtualenvwrapper/virtualenvwrapper.sh ]", content, + "No fallback check for missing virtualenvwrapper.sh in script.deb.sh" + ) + + def test_fallback_installs_package(self): + content = read_file("installers/script.deb.sh") + self.assertIn( + "sudo apt-get install -y virtualenvwrapper", content, + "Fallback apt-get install for virtualenvwrapper not found" + ) + + def test_fallback_exits_on_failure(self): + content = read_file("installers/script.deb.sh") + fallback_start = content.find("if [ ! -f /usr/share/virtualenvwrapper/virtualenvwrapper.sh ]") + fallback_section = content[fallback_start:fallback_start + 800] + self.assertIn("exit 1", fallback_section, + "No exit 1 after fallback virtualenvwrapper install fails") + + +class TestIssue438MasterBranchInstall(unittest.TestCase): + """Issue #438: script.deb.sh must not pip-install virtualenvwrapper""" + + def test_no_pip_install_virtualenvwrapper(self): + content = read_file("installers/script.deb.sh") + self.assertNotIn( + "pip3 install --user virtualenv virtualenvwrapper", content, + "script.deb.sh still pip3-installs virtualenvwrapper (PEP 668 violation)" + ) + + def test_no_local_bin_source(self): + content = read_file("installers/script.deb.sh") + self.assertNotIn( + "source ~/.local/bin/virtualenvwrapper.sh", content, + "script.deb.sh still sources from ~/.local/bin/virtualenvwrapper.sh" + ) + + def test_uses_system_virtualenvwrapper(self): + content = read_file("installers/script.deb.sh") + self.assertIn( + "source /usr/share/virtualenvwrapper/virtualenvwrapper.sh", content, + "script.deb.sh does not source from /usr/share path" + ) + + def test_python_requirements_has_pocketsphinx_not_cmuclmtk(self): + content = read_file("python_requirements.txt") + self.assertNotIn("cmuclmtk", content, + "cmuclmtk (obsolete package) still in python_requirements.txt") + self.assertIn("pocketsphinx", content, + "pocketsphinx not in python_requirements.txt") + + +class TestIssue46RESTfulAPI(unittest.TestCase): + """Issue #46: RESTful API server implementation""" + + def test_rest_api_file_exists(self): + self.assertTrue( + os.path.exists(os.path.join(ROOT, "naomi/rest_api.py")), + "naomi/rest_api.py does not exist" + ) + + def test_rest_api_imported_and_started(self): + content = read_file("naomi/application.py") + self.assertIn( + "from .rest_api import NaomiRestServer", content, + "NaomiRestServer not imported in application.py" + ) + self.assertIn( + "self.rest_server = NaomiRestServer(self)", content, + "NaomiRestServer not instantiated in application.py" + ) + self.assertIn( + "self.rest_server.start()", content, + "NaomiRestServer not started in application.py" + ) + + +class TestSyntaxValidity(unittest.TestCase): + """All modified Python files must be syntactically valid""" + + FILES_TO_CHECK = [ + "naomi/__main__.py", + "naomi/application.py", + "naomi/plugin.py", + "naomi/mic.py", + "naomi/mic_asynchronous.py", + "naomi/npe.py", + "naomi/rest_api.py", + "Naomi.py", + "Populate.py", + ] + + def test_all_modified_files_parse(self): + errors = [] + for rel_path in self.FILES_TO_CHECK: + full_path = os.path.join(ROOT, rel_path) + source = read_file(rel_path) + try: + ast.parse(source, filename=full_path) + except SyntaxError as e: + errors.append("{}: {}".format(rel_path, e)) + self.assertEqual(errors, [], + "Syntax errors found:\n" + "\n".join(errors)) + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/update_authors.py b/update_authors.py new file mode 100644 index 00000000..06d1c288 --- /dev/null +++ b/update_authors.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import subprocess +import sys +import os + +def main(): + try: + # Run git log command + cmd = ['git', 'log', '--reverse', "--format=%aN <%aE>"] + res = subprocess.run(cmd, capture_output=True, encoding='utf-8', check=True) + except (subprocess.CalledProcessError, FileNotFoundError) as e: + print(f"Error: Git command failed. Make sure git is installed and you are inside a git repository: {e}", file=sys.stderr) + sys.exit(1) + + seen = set() + authors = [] + ignored_emails = { + 'chrobione@users.noreply.github.com', + 'krawallkurt@infokl.duckdns.org' + } + + for line in res.stdout.splitlines(): + line = line.strip() + if not line: + continue + if line in seen: + continue + # Extract email between brackets to check if ignored + email = None + if '<' in line and '>' in line: + email = line.split('<')[1].split('>')[0].strip() + if email in ignored_emails: + continue + + seen.add(line) + authors.append(f"- {line}\n") + + root_dir = os.path.dirname(os.path.abspath(__file__)) + authors_file = os.path.join(root_dir, 'AUTHORS.md') + + with open(authors_file, 'w', encoding='utf-8') as f: + f.write("# Authors\n\n") + f.write("#### Ordered by first contribution.\n\n") + f.writelines(authors) + f.write("\n#### Generated by update_authors.py.\n") + + print(f"Done. Successfully updated AUTHORS.md with {len(authors)} authors.") + +if __name__ == '__main__': + main()