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")