-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnlp_test.py
93 lines (72 loc) · 2.36 KB
/
nlp_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import sys
import string
import re
from fuzzywuzzy.fuzz import ratio
valid_chart_type = ['bar','pie','line']
def get_chart_type(_q_list):
final_ = []
synonyms = ['graph','chart','plot','graphs','charts','plots']
for synonym in synonyms:
if synonym in _q_list:
indices = [i for i, x in enumerate(_q_list) if x == synonym]
if (indices[-1] - 1)>0:
final_.append( _q_list[indices[-1] - 1])
if len( set(valid_chart_type) & set(final_) ) != 0:
return set(valid_chart_type) & set(final_)
else:
fin = []
for i in valid_chart_type:
for j in final_:
if ratio(i,j)>80 :
fin.append(i)
return fin
def get_table(_q_list):
final_ = []
synonyms = ['table','index']
for synonym in synonyms:
if synonym in _q_list:
indices = [i for i, x in enumerate(_q_list) if x == synonym]
if (indices[-1] + 1)>0:
final_.append( _q_list[indices[-1] + 1])
if len(final_ ) == 0:
for _q in _q_list:
for t in tab:
if ratio(_q,t)>90:
final_.append(t)
return final_
elif len( set(tab) & set(final_) ) != 0:
return set(tab) & set(final_)
else:
fin = []
for i in tab:
for j in final_:
if ratio(i,j)>80 :
fin.append(i)
return fin
def get_query(_q_text):
exclude = set(string.punctuation)
exclude.remove("'")
exclude.remove('"')
exclude.remove('_')
s_q_text = ''.join(ch for ch in _q_text if ch not in exclude)
_q_list = (s_q_text.lower()).split(' ')
print _q_list
# get chart type
try :
chart_type = list(get_chart_type(_q_list))[0]
except :
return {'error' : 'Chart_Type'}
quoted = re.findall('"[^"]*"',s_q_text)
try:
table = list(get_table(_q_list))[0].replace('"','').replace("'",'')
except:
return {'error' : 'Table_Name'}
print chart_type , table
return {
'chart_type' : chart_type,
'table_name' : table
}
def get_chart_params(_msg,tables):
global tab
tab= tables
return get_query(_q_text = _msg)