|
|
- import json
- import requests
- from stanford_parser.parser import Parser
- import nltk
- import nltk.corpus as corpus
-
- def getData( searched, data, data_final ):
- if type( searched ) is dict:
- for key in searched:
- if len( searched[ key ] ) == 0:
- data_final[ key ] = data[ key ]
- else:
- getData( searched[ key ], data[ key ], data_final )
-
- elif type( searched ) is list:
- for key in range( len( searched ) ):
- if len( searched[ key ] ) == 0:
- data_final[ key ] = data[ key ]
- else:
- getData( searched[ key ], data[ key ], data_final )
- parser = Parser()
- while True:
- sentence = raw_input("You:")
-
- #Parse the input
- tokenized = nltk.word_tokenize( sentence )
- stop_words = set( corpus.stopwords.words( 'english' ) )
- cleaned = [ w for w in tokenized if w not in stop_words ]
- tagged = nltk.pos_tag( cleaned )
- named = nltk.ne_chunk( tagged )
- cleaned_sentence = " ".join( cleaned )
- dependencies = parser.parseToStanfordDependencies( cleaned_sentence )
- tupleResult = [ (rel, gov.text, dep.text) for rel, gov, dep in dependencies.dependencies ]
-
- #Read the files
- files = [open("user_details.json","r"),open('keywords.json', 'r'),open('predefined.json', 'r')]
- defaults = json.loads(files[0].read())
- keywords = json.loads( files[1 ].read() )
- predefined = json.loads(files[2].read())
-
- print("[TAGGED]: " + str( tagged ) + "\n")
- print("[SPECIAL]: " + str( named ) + "\n")
- print("[CLEAN]: " + str( cleaned_sentence ) + "\n")
- print("[DEPENDENCIES]: " + str( tupleResult ) + "\n")
-
- wp_word = ""
-
- for i in range( len( tagged ) ):
- if tagged[ i ][ 1 ] == "WP" or tagged[ i ][ 1 ] == "WRB" or tagged[ i ][ 1 ] == "WP$":
- wp_word = tagged[ i ][ 0 ]
-
- if sentence in predefined:
- print(predefined[sentence])
-
- else:
-
- if not wp_word == "":
- key = ""
- understood = False
- key_connect = ""
- for dep in tupleResult:
- if dep[2] == wp_word:
- key = dep[1]
-
- for dep in tupleResult:
- if dep[1]==key: key_connect=dep[2]
-
-
- for keyword_id in keywords[0 ]:
- if key in keywords[0 ][keyword_id ]:
- key = keyword_id
- understood = True
-
- if(understood):
- api_details = keywords[ 1 ][ key ]
- params = api_details[ "parameters" ]
-
- for i in named:
- for j in params:
- try:
- i.label()
- if i.label() == params[ j ]:
- params[j] = i[0]
- else:
- params[j] = defaults[api_details["defaults"][j]]
- except Exception:
- if i[0]==key_connect:
- params[j] = defaults[api_details["defaults"][j]]
-
-
-
- params[ api_details[ 'apikey' ].keys()[ 0 ] ] = api_details[ 'apikey' ][ api_details[ 'apikey' ].keys()[ 0 ] ]
- r = requests.get( url=api_details[ "url" ], params=params )
- data = r.json()
- data_final = {}
- getData(api_details[ "data_to_receive" ], data, data_final)
- out_format = api_details[ "output_format" ]
- out_final = ""
-
- isvar = False
- for let in out_format:
- if (let == "{"):
- var = ""
- isvar = True
- continue
- if not isvar:
- out_final += let
- else:
- if let == "}":
- out_final += str( data_final[ var ] )
- isvar = False
- else:
- var += let
-
- print ("[KEYWORD]: " + key + "\n")
- print ("[KEYWORD_ID]: " + key + "\n")
- print (out_final)
- else:
- print("Sorry, I didn't quite get that")
- else:
- print("Sorry, I didn't quite get that")
|