You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

121 lines
3.3 KiB

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