I wanted to write a program for asking questions about weather. What are the algorithms and techniques I should start looking at.
ex: Will it be sunny this weekend in Chicago. I wanted to know the intent = weather query, date = this weekend, location = chicago.
User can express the same query in many forms.
I would like to solve some constrained form and looking for ideas on how to get started. The solution needs to be just good enough.
Since your input is in the natural language form, best way to start looking into it, first by parsing the sentence structure. and running the sentence through NER (Named Entity Recognizer).
Parsing the sentence lets you come up with rules such as, certain types of dependencies always give you the intent. Running the NER will let you identify places and dates. If it's not simple to come up with rules to classify the intent, you can as well use a classifier to do the same using feature vector formulated from the input sentence. In fact some of the parser out put can go into formulating the feature vector.
For both there exists software's from Stanford NLP Group
May be you can look into:
Once you parse the sentence, you have intent and other information require to answer the question.
Ex: I took your sentence "Will it be sunny this weekend in Chicago." and ran it through Online Stanford NER Tagger. Which gave me the following:
Now you have identified date and location.
I hope this helps. I know the answer is quite generic, and may be helpful in just getting started.
I think this api is exactly what you are looking for. It's easy and awesome to use.
https://wit.ai/
Additionally, https://www.luis.ai/ is a good implementation of an NLP framework. They have an API as well as a nuget SDK. We've been using them for awhile now. They were cheaper than the other options we looked at. i.e. wit.ai.
So re your example -
ex: Will it be sunny this weekend in Chicago -> would map to a LUIS intent called WeatherQuery. date -> would map to a pre-built LUIS dateTime entity location -> chicago -> would map to a pre-built LUIS entity -> geography or address I think.