Saaquib commited on
Commit
dfe57e4
·
1 Parent(s): 2a654fb

Upload 6 files

Browse files
Files changed (6) hide show
  1. app.py +146 -0
  2. helper.py +211 -0
  3. main.ipynb +0 -0
  4. preprocessor.py +36 -0
  5. requirements.txt +7 -0
  6. stop_hinglish.txt +1075 -0
app.py ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import matplotlib.pyplot as plt
3
+ import numpy as np
4
+ import preprocessor
5
+ import helper
6
+
7
+ st.sidebar.title("Whatsapp Chat Analyzer")
8
+
9
+ uploaded_file = st.sidebar.file_uploader("Choose a file")
10
+ if uploaded_file is not None:
11
+ bytes_data = uploaded_file.getvalue()
12
+ data = bytes_data.decode("utf-8")
13
+ df = preprocessor.preprocess(data)
14
+
15
+ # Show Analysis wrt
16
+ user_list = df['user'].unique().tolist()
17
+ user_list.sort()
18
+ user_list.insert(0, "Overall")
19
+ selected_users = st.sidebar.selectbox("Show Analysis wrt", user_list)
20
+ if st.sidebar.button("Show Analysis"):
21
+
22
+
23
+ #stats Area
24
+ num_messages, words, num_media_messages, num_links = helper.fetch_stats(selected_users, df)
25
+ st.markdown(f'<h1 style="color: red; text-align: center; font-size: 70px;text-decoration: underline;">TOP STATISTICS</h1>', unsafe_allow_html=True)
26
+
27
+ col1, col2, col3 = st.columns(3)
28
+
29
+ with col1:
30
+ st.markdown(f'<h1 style="color: skyblue; font-size: 40px;">Total Messages</h1>', unsafe_allow_html=True)
31
+ st.markdown(f'<h1 style="color: purple; font-size: 38px;">{num_messages}</h1>', unsafe_allow_html=True)
32
+ with col2:
33
+ st.markdown(f'<h1 style="color: skyblue; font-size: 40px;">Total Words</h1>', unsafe_allow_html=True)
34
+ st.markdown(f'<h1 style="color: purple; font-size: 38px;">{words}</h1>', unsafe_allow_html=True)
35
+ with col3:
36
+ st.markdown(f'<h1 style="color: skyblue; font-size: 40px;">Total links Shared</h1>', unsafe_allow_html=True)
37
+ st.markdown(f'<h1 style="color: purple; font-size: 38px;">{num_links}</h1>', unsafe_allow_html=True)
38
+
39
+ col1, col2 = st.columns(2)
40
+
41
+ with col1:
42
+ st.markdown(f'<h1 style="color: skyblue; font-size: 35px;">Total Media Shared</h1>', unsafe_allow_html=True)
43
+ st.markdown(f'<h1 style="color: purple; font-size: 38px;">{num_media_messages}</h1>', unsafe_allow_html=True)
44
+ with col2:
45
+ avg_messages_per_day = helper.avg_messages_per_day(selected_users,df)
46
+ st.markdown(f'<h1 style="color: skyblue; font-size: 35px;">Avg No of Messages Per day</h1>', unsafe_allow_html=True)
47
+ st.markdown(f'<h1 style="color: purple; font-size: 38px;">{avg_messages_per_day}</h1>', unsafe_allow_html=True)
48
+
49
+ if selected_users == 'Overall':
50
+ col1, col2, col3 = st.columns(3)
51
+ with col1:
52
+ first_last_msg = helper.first_last_msg(df)
53
+ st.markdown(f'<h1 style="color: skyblue; font-size: 35px;">First Message Sent</h1>', unsafe_allow_html=True)
54
+ st.dataframe(first_last_msg.head(1))
55
+ with col2:
56
+ first_last_msg = helper.first_last_msg(df)
57
+ st.markdown(f'<h1 style="color: skyblue; font-size: 35px;">Last Message Sent</h1>', unsafe_allow_html=True)
58
+ st.dataframe(first_last_msg.tail(1))
59
+ with col3:
60
+ connected_days = helper.connected_days(df)
61
+ st.markdown(f'<h1 style="color: skyblue; font-size: 35px;">Total Connected Days</h1>', unsafe_allow_html=True)
62
+ st.markdown(f'<h1 style="color: purple; font-size: 38px;">{connected_days}</h1>', unsafe_allow_html=True)
63
+
64
+ with col1:
65
+ max_active_day = helper.max_active_day(df)
66
+ st.markdown(f'<h1 style="color: skyblue; font-size: 35px;">Most Active Day</h1>', unsafe_allow_html=True)
67
+ st.dataframe(max_active_day.head(1))
68
+ with col2:
69
+ max_active_month = helper.max_active_month(selected_users,df)
70
+ st.markdown(f'<h1 style="color: skyblue; font-size: 35px;">Most Active Month</h1>', unsafe_allow_html=True)
71
+ st.dataframe(max_active_month.head(1))
72
+
73
+
74
+ # month wise
75
+ st.markdown(f'<h1 style="color: red; text-align: center; font-size: 50px;text-decoration: underline;">MONTH WISE</h1>', unsafe_allow_html=True)
76
+
77
+ col1, col2 = st.columns(2)
78
+
79
+ with col1:
80
+ st.markdown(f'<h1 style="color: skyblue; text-align: center; font-size: 40px;">GRAPH</h1>', unsafe_allow_html=True)
81
+ timeline = helper.monthly_timeline(selected_users, df)
82
+ fig, ax = plt.subplots()
83
+ ax.plot(timeline['time'], timeline['message'], color='green')
84
+ plt.xticks(rotation='vertical')
85
+ st.pyplot(fig)
86
+ with col2:
87
+ timeline = helper.monthly_timeline_msg(selected_users, df)
88
+ st.markdown(f'<h1 style="color: skyblue; font-size: 40px;">Message Counts</h1>', unsafe_allow_html=True)
89
+ st.dataframe(timeline)
90
+
91
+
92
+ # finding the busiest people in the group(Group Level)
93
+ if selected_users == 'Overall':
94
+ st.markdown(f'<h1 style="color: red; text-align: center; font-size: 50px;text-decoration: underline;">MOST BUSY USERS</h1>', unsafe_allow_html=True)
95
+ x, new_df = helper.most_busy_users(df)
96
+ fig, ax = plt.subplots()
97
+
98
+ col1, col2 = st.columns(2)
99
+
100
+ with col1:
101
+ st.markdown(f'<h1 style="color: skyblue; text-align: center; font-size: 40px;">GRAPH</h1>', unsafe_allow_html=True)
102
+ num_bars = len(x)
103
+ colors = plt.cm.rainbow(np.linspace(0, 1, num_bars))
104
+ ax.bar(x.index, x.values, color=colors,alpha=0.5)
105
+ plt.xticks(rotation='vertical')
106
+ st.pyplot(fig)
107
+ with col2:
108
+ st.markdown(f'<h1 style="color: skyblue; font-size: 35px;">CONTRIBUTIONS</h1>', unsafe_allow_html=True)
109
+ st.dataframe(new_df)
110
+
111
+
112
+ # WordCloud
113
+ st.markdown(f'<h1 style="color: red; text-align: center; font-size: 50px;text-decoration: underline;">WORD WISE ANALYSIS</h1>', unsafe_allow_html=True)
114
+
115
+ col1, col2 = st.columns(2)
116
+
117
+ with col1:
118
+ st.markdown(f'<h1 style="color: skyblue;text-align: center; font-size: 40px;">WordCloud</h1>', unsafe_allow_html=True)
119
+ df_wc = helper.create_wordcloud(selected_users, df)
120
+ fig, ax = plt.subplots()
121
+ ax.imshow(df_wc)
122
+ st.pyplot(fig)
123
+ with col2:
124
+ st.markdown(f'<h1 style="color: skyblue; font-size: 40px;">Top 10 Used Words</h1>', unsafe_allow_html=True)
125
+ most_common_words = helper.most_common_words(selected_users, df)
126
+ st.dataframe(most_common_words)
127
+
128
+
129
+ # Emoji analysis
130
+ st.markdown(f'<h1 style="color: red; text-align: center; font-size: 50px;text-decoration: underline;">EMOJI ANALYSIS</h1>', unsafe_allow_html=True)
131
+
132
+ col1,col2 = st.columns(2)
133
+
134
+ with col1:
135
+ st.markdown(f'<h1 style="color: skyblue; font-size: 40px;">Top 5 Emojis Used</h1>', unsafe_allow_html=True)
136
+ emoji_df = helper.emoji_helper(selected_users, df)
137
+ st.dataframe(emoji_df.head(5))
138
+ with col2:
139
+ st.markdown(f'<h1 style="color: skyblue; font-size: 40px;">Pie Chart</h1>', unsafe_allow_html=True)
140
+ fig, ax = plt.subplots()
141
+ ax.pie(emoji_df['Count '], labels=emoji_df['Emoji '], autopct='%1.2f%%', startangle=90)
142
+ ax.axis('equal')
143
+ st.pyplot(fig)
144
+
145
+ st.markdown(f'<h1 style="color: red; text-align: center; font-size: 40px;text-decoration: underline;">More features will be added soon</h1>', unsafe_allow_html=True)
146
+
helper.py ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from urlextract import URLExtract
2
+ from wordcloud import WordCloud
3
+ from collections import Counter
4
+ import pandas as pd
5
+ import emoji
6
+
7
+ extract = URLExtract()
8
+
9
+
10
+ def fetch_stats(selected_users, df):
11
+
12
+ if selected_users != 'Overall':
13
+ df = df[df['user'] == selected_users]
14
+
15
+ # fetch the number of messages
16
+ num_messages = df.shape[0]
17
+
18
+ # fetch the number of words
19
+ words = []
20
+ for i in df['message']:
21
+ words.extend(i.split())
22
+
23
+ # fetch the number of media messages
24
+ num_media_messages = df[df['message'] == 'voice omitted'].shape[0]
25
+
26
+ # fetch the number of link shared
27
+ links = []
28
+ for i in df['message']:
29
+ links.extend(extract.find_urls(i))
30
+
31
+ return num_messages, len(words), num_media_messages, len(links)
32
+
33
+ def first_last_msg (df):
34
+ first_last_msg = df.drop(columns=['date', 'month_num'], axis=1)[1:]
35
+ first_last_msg = first_last_msg[~first_last_msg['user'].str.startswith('Group')]
36
+ first_last_msg = first_last_msg[~first_last_msg['message'].str.endswith('group')]
37
+ first_last_msg = first_last_msg[~first_last_msg['message'].str.endswith('contact')]
38
+ first_last_msg = first_last_msg[~first_last_msg['message'].str.endswith('you')]
39
+ first_last_msg ['date'] = first_last_msg [['year', 'month', 'day']].astype(str).agg('-'.join, axis=1)
40
+ first_last_msg ['time'] = first_last_msg [['hour', 'minute']].astype(str).agg(':'.join, axis=1)
41
+ first_last_msg = first_last_msg [['user', 'message', 'date', 'time']]
42
+
43
+ return first_last_msg
44
+
45
+ def connected_days(df):
46
+ first_date = pd.to_datetime(df['date'].min().date())
47
+ last_date = pd.to_datetime(df['date'].max().date())
48
+ connected_days = (last_date - first_date).days
49
+
50
+ return connected_days
51
+
52
+
53
+ def avg_messages_per_day(selected_users,df):
54
+
55
+ if selected_users != 'Overall':
56
+ df = df[df['user'] == selected_users]
57
+
58
+ first_date = pd.to_datetime(df['date'].min().date())
59
+ last_date = pd.to_datetime(df['date'].max().date())
60
+ num_days = (last_date - first_date).days
61
+
62
+ num_messages = df.shape[0]
63
+ avg_messages_per_day = num_messages / num_days
64
+
65
+ return round(avg_messages_per_day)
66
+
67
+
68
+ def max_active_day(df):
69
+ df['only_date'] = df['date'].dt.date
70
+ daily_timeline = df.groupby(['only_date']).count()['message'].reset_index().rename(columns={'only_date':'Date','message':'Message Counts'})
71
+ max_active_day = daily_timeline.nlargest(1, 'Message Counts')
72
+
73
+ return max_active_day
74
+
75
+ def max_active_month(selected_users, df):
76
+ timeline = monthly_timeline_msg(selected_users, df)
77
+ max_month = timeline.loc[timeline['Message Count'].idxmax()]
78
+ year = max_month['Year']
79
+ month = max_month['Month']
80
+ message_count = max_month['Message Count']
81
+ max_active_month = pd.DataFrame({'Year': [year], 'Month': [month], 'Message Count': [message_count]})
82
+
83
+ return max_active_month
84
+
85
+
86
+
87
+ def most_busy_users(df):
88
+ df['user'] = df['user'].astype(str) # Convert 'user' column to string type
89
+ x = df['user'].value_counts().head()
90
+ df = round((df['user'].value_counts() / df.shape[0]) * 100, 2).reset_index().rename(
91
+ columns={'user': 'Name', 'count': 'Percentage'}
92
+ )
93
+ df = df[~df['Name'].str.startswith('Group')]
94
+
95
+ return x, df
96
+
97
+
98
+
99
+ def create_wordcloud(selected_users, df):
100
+
101
+ f = open('stop_hinglish.txt', 'r')
102
+ stop_words = f.read()
103
+
104
+ if selected_users != 'Overall':
105
+ df = df[df['user'] == selected_users]
106
+
107
+ temp = df[df['message'] != 'group_notification']
108
+ temp = temp[temp['message'] != '<Media_omitted>\n']
109
+
110
+ def remove_stopwords(message):
111
+ y = []
112
+ for i in message.lower().split():
113
+ if i not in stop_words:
114
+ y.append(i)
115
+ return " ".join(y)
116
+
117
+ wc = WordCloud(width=500, height=500, min_font_size=10,
118
+ background_color='White')
119
+ temp['message'] = temp['message'].apply(remove_stopwords)
120
+ df_wc = wc.generate(temp['message'].str.cat(sep=" "))
121
+
122
+ return df_wc
123
+
124
+
125
+ def most_common_words(selected_users, df):
126
+
127
+ f = open('stop_hinglish.txt', 'r')
128
+ stop_words = f.read()
129
+
130
+ if selected_users != 'Overall':
131
+ df = df[df['user'] == selected_users]
132
+
133
+ temp = df[df['message'] != 'group_notification']
134
+ temp = temp[temp['message'] != '<Media_omitted>\n']
135
+
136
+ words = []
137
+
138
+ for i in temp['message']:
139
+ for word in i.lower().split():
140
+ # Exclude words that contain emojis
141
+ if word not in stop_words and not any(c for c in word if c in emoji.UNICODE_EMOJI['en']):
142
+ words.append(word)
143
+
144
+ most_common_words = pd.DataFrame(Counter(words).most_common(10)).rename(columns={0:'Words',1:'Counts'}).add_suffix(' ')
145
+
146
+ return most_common_words
147
+
148
+
149
+
150
+ def emoji_helper(selected_users, df):
151
+
152
+ if selected_users != 'Overall':
153
+ df = df[df['user'] == selected_users]
154
+
155
+ emojis = []
156
+ for message in df['message']:
157
+ emojis.extend([c for c in message if c in emoji.UNICODE_EMOJI['en']])
158
+
159
+ emoji_counts = Counter(emojis)
160
+ top_5_emojis = emoji_counts.most_common(5)
161
+
162
+ emoji_df = pd.DataFrame(top_5_emojis, columns=['Emoji ', 'Count '])
163
+
164
+ return emoji_df
165
+
166
+
167
+ def monthly_timeline_msg(selected_users, df):
168
+
169
+ if selected_users != 'Overall':
170
+ df = df[df['user'] == selected_users]
171
+
172
+ timeline = df.groupby(['year', 'month_num', 'month']).count()['message'].reset_index()
173
+
174
+ time = []
175
+ for i in range(timeline.shape[0]):
176
+ time.append(timeline['month'][i]+' - '+str(timeline['year'][i]))
177
+ timeline = timeline.drop(columns=['month_num'],axis=1)
178
+ timeline = timeline.rename(columns={'year': 'Year', 'month': 'Month', 'message': 'Message Count'})
179
+
180
+ return timeline
181
+
182
+
183
+ def monthly_timeline(selected_users, df):
184
+
185
+ if selected_users != 'Overall':
186
+ df = df[df['user'] == selected_users]
187
+
188
+ timeline = df.groupby(['year', 'month_num', 'month']).count()['message'].reset_index()
189
+
190
+ time = []
191
+ for i in range(timeline.shape[0]):
192
+ time.append(timeline['month'][i]+' - '+str(timeline['year'][i]))
193
+
194
+ timeline['time'] = time
195
+
196
+ timeline = timeline.drop(columns=['month_num'],axis=1)
197
+
198
+ return timeline
199
+
200
+
201
+
202
+ def daily_message(selected_users, df):
203
+
204
+ if selected_users != 'Overall':
205
+ df = df[df['user'] == selected_users]
206
+
207
+ df['only_date'] = df['date'].dt.date
208
+
209
+ daily_message = df.groupby(['only_date']).count()['message'].reset_index().rename(columns={'only_date':'Date','message':'Message Counts'})
210
+
211
+ return daily_message
main.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
preprocessor.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+ import pandas as pd
3
+
4
+ def preprocess(data):
5
+ pattern = r'^\[(\d{2}\/\d{2}\/\d{2}, \d{1,2}:\d{2}:\d{2} [AP]M)\] (.+)$'
6
+
7
+ # Read the contents of the text document with the appropriate encoding
8
+ lines = data.splitlines()
9
+
10
+ message = []
11
+ timestamp = []
12
+
13
+ for line in lines:
14
+ line = line.strip() # Remove leading/trailing whitespace if necessary
15
+ m = re.match(pattern, line)
16
+ if m:
17
+ timestamp.append(m.group(1))
18
+ message.append(m.group(2))
19
+
20
+ df = pd.DataFrame({'user_messages': message, 'message_date': timestamp})
21
+
22
+ df['message_date'] = pd.to_datetime(timestamp, format='%d/%m/%y, %I:%M:%S %p')
23
+ df.rename(columns={'message_date':'date'}, inplace=True)
24
+
25
+ df[['user', 'message']] = df['user_messages'].str.split(': ', n=1, expand=True)
26
+ df.drop('user_messages', axis=1, inplace=True)
27
+
28
+ df['year'] = df['date'].dt.year
29
+ df['month_num'] = df['date'].dt.month
30
+ df['month'] = df['date'].dt.month_name()
31
+ df['day'] = df['date'].dt.day
32
+ df['hour'] = df['date'].dt.hour
33
+ df['minute'] = df['date'].dt.minute
34
+
35
+ return df
36
+
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ emoji
2
+ matplotlib
3
+ numpy
4
+ pandas
5
+ streamlit
6
+ urlextract
7
+ wordcloud
stop_hinglish.txt ADDED
@@ -0,0 +1,1075 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .
2
+ ..
3
+ ...
4
+ ?
5
+ -
6
+ --
7
+ 1
8
+ 2
9
+ 3
10
+ 4
11
+ 5
12
+ 6
13
+ 7
14
+ 8
15
+ 9
16
+ 0
17
+ a
18
+ aadi
19
+ aaj
20
+ aap
21
+ aapne
22
+ aata
23
+ aati
24
+ aaya
25
+ aaye
26
+ ab
27
+ abbe
28
+ abbey
29
+ abe
30
+ abhi
31
+ able
32
+ about
33
+ above
34
+ accha
35
+ according
36
+ accordingly
37
+ acha
38
+ achcha
39
+ across
40
+ actually
41
+ after
42
+ afterwards
43
+ again
44
+ against
45
+ agar
46
+ ain
47
+ aint
48
+ ain't
49
+ aisa
50
+ aise
51
+ aisi
52
+ alag
53
+ all
54
+ allow
55
+ allows
56
+ almost
57
+ alone
58
+ along
59
+ already
60
+ also
61
+ although
62
+ always
63
+ am
64
+ among
65
+ amongst
66
+ an
67
+ and
68
+ andar
69
+ another
70
+ any
71
+ anybody
72
+ anyhow
73
+ anyone
74
+ anything
75
+ anyway
76
+ anyways
77
+ anywhere
78
+ ap
79
+ apan
80
+ apart
81
+ apna
82
+ apnaa
83
+ apne
84
+ apni
85
+ appear
86
+ are
87
+ aren
88
+ arent
89
+ aren't
90
+ around
91
+ arre
92
+ as
93
+ aside
94
+ ask
95
+ asking
96
+ at
97
+ aur
98
+ avum
99
+ aya
100
+ aye
101
+ baad
102
+ baar
103
+ bad
104
+ bahut
105
+ bana
106
+ banae
107
+ banai
108
+ banao
109
+ banaya
110
+ banaye
111
+ banayi
112
+ banda
113
+ bande
114
+ bandi
115
+ bane
116
+ bani
117
+ bas
118
+ bata
119
+ batao
120
+ bc
121
+ be
122
+ became
123
+ because
124
+ become
125
+ becomes
126
+ becoming
127
+ been
128
+ before
129
+ beforehand
130
+ behind
131
+ being
132
+ below
133
+ beside
134
+ besides
135
+ best
136
+ better
137
+ between
138
+ beyond
139
+ bhai
140
+ bheetar
141
+ bhi
142
+ bhitar
143
+ bht
144
+ bilkul
145
+ bohot
146
+ bol
147
+ bola
148
+ bole
149
+ boli
150
+ bolo
151
+ bolta
152
+ bolte
153
+ bolti
154
+ both
155
+ brief
156
+ bro
157
+ btw
158
+ but
159
+ by
160
+ came
161
+ can
162
+ cannot
163
+ cant
164
+ can't
165
+ cause
166
+ causes
167
+ certain
168
+ certainly
169
+ chahiye
170
+ chaiye
171
+ chal
172
+ chalega
173
+ chhaiye
174
+ clearly
175
+ c'mon
176
+ com
177
+ come
178
+ comes
179
+ could
180
+ couldn
181
+ couldnt
182
+ couldn't
183
+ d
184
+ de
185
+ dede
186
+ dega
187
+ degi
188
+ dekh
189
+ dekha
190
+ dekhe
191
+ dekhi
192
+ dekho
193
+ denge
194
+ dhang
195
+ di
196
+ did
197
+ didn
198
+ didnt
199
+ didn't
200
+ dijiye
201
+ diya
202
+ diyaa
203
+ diye
204
+ diyo
205
+ do
206
+ does
207
+ doesn
208
+ doesnt
209
+ doesn't
210
+ doing
211
+ done
212
+ dono
213
+ dont
214
+ don't
215
+ doosra
216
+ doosre
217
+ down
218
+ downwards
219
+ dude
220
+ dunga
221
+ dungi
222
+ during
223
+ dusra
224
+ dusre
225
+ dusri
226
+ dvaara
227
+ dvara
228
+ dwaara
229
+ dwara
230
+ each
231
+ edu
232
+ eg
233
+ eight
234
+ either
235
+ ek
236
+ else
237
+ elsewhere
238
+ enough
239
+ etc
240
+ even
241
+ ever
242
+ every
243
+ everybody
244
+ everyone
245
+ everything
246
+ everywhere
247
+ ex
248
+ exactly
249
+ example
250
+ except
251
+ far
252
+ few
253
+ fifth
254
+ fir
255
+ first
256
+ five
257
+ followed
258
+ following
259
+ follows
260
+ for
261
+ forth
262
+ four
263
+ from
264
+ further
265
+ furthermore
266
+ gaya
267
+ gaye
268
+ gayi
269
+ get
270
+ gets
271
+ getting
272
+ ghar
273
+ given
274
+ gives
275
+ go
276
+ goes
277
+ going
278
+ gone
279
+ good
280
+ got
281
+ gotten
282
+ greetings
283
+ guys
284
+ haan
285
+ had
286
+ hadd
287
+ hadn
288
+ hadnt
289
+ hadn't
290
+ hai
291
+ hai..
292
+ hain
293
+ hamara
294
+ hamare
295
+ hamari
296
+ hamne
297
+ han
298
+ happens
299
+ har
300
+ hardly
301
+ has
302
+ hasn
303
+ hasnt
304
+ hasn't
305
+ have
306
+ haven
307
+ havent
308
+ haven't
309
+ having
310
+ he
311
+ hehe
312
+ hehehe
313
+ hello
314
+ help
315
+ hence
316
+ her
317
+ here
318
+ hereafter
319
+ hereby
320
+ herein
321
+ here's
322
+ hereupon
323
+ hers
324
+ herself
325
+ he's
326
+ hi
327
+ him
328
+ himself
329
+ his
330
+ hither
331
+ hm
332
+ hmm
333
+ ho
334
+ hoga
335
+ hoge
336
+ hogi
337
+ hona
338
+ honaa
339
+ hone
340
+ honge
341
+ hongi
342
+ honi
343
+ hopefully
344
+ hota
345
+ hotaa
346
+ hote
347
+ hoti
348
+ how
349
+ howbeit
350
+ however
351
+ hoyenge
352
+ hoyengi
353
+ hu
354
+ hua
355
+ hue
356
+ huh
357
+ hui
358
+ hum
359
+ humein
360
+ humne
361
+ hun
362
+ huye
363
+ huyi
364
+ i
365
+ i'd
366
+ idk
367
+ ie
368
+ if
369
+ i'll
370
+ i'm
371
+ imo
372
+ in
373
+ inasmuch
374
+ inc
375
+ inhe
376
+ inhi
377
+ inho
378
+ inka
379
+ inkaa
380
+ inke
381
+ inki
382
+ inn
383
+ inner
384
+ inse
385
+ insofar
386
+ into
387
+ inward
388
+ is
389
+ ise
390
+ isi
391
+ iska
392
+ iskaa
393
+ iske
394
+ iski
395
+ isme
396
+ isn
397
+ isne
398
+ isnt
399
+ isn't
400
+ iss
401
+ isse
402
+ issi
403
+ isski
404
+ it
405
+ it'd
406
+ it'll
407
+ itna
408
+ itne
409
+ itni
410
+ itno
411
+ its
412
+ it's
413
+ itself
414
+ ityaadi
415
+ ityadi
416
+ i've
417
+ ja
418
+ jaa
419
+ jab
420
+ jabh
421
+ jaha
422
+ jahaan
423
+ jahan
424
+ jaisa
425
+ jaise
426
+ jaisi
427
+ jata
428
+ jayega
429
+ jidhar
430
+ jin
431
+ tm
432
+ yrr
433
+ bby
434
+ na
435
+ hlo
436
+ ho
437
+ nai
438
+ bss
439
+ jinhe
440
+ jinhi
441
+ jinho
442
+ jinhone
443
+ jinka
444
+ jinke
445
+ jinki
446
+ jinn
447
+ jis
448
+ jise
449
+ jiska
450
+ jiske
451
+ jiski
452
+ jisme
453
+ jiss
454
+ jisse
455
+ jitna
456
+ jitne
457
+ jitni
458
+ jo
459
+ just
460
+ jyaada
461
+ jyada
462
+ k
463
+ ka
464
+ kaafi
465
+ kab
466
+ kabhi
467
+ kafi
468
+ kaha
469
+ kahaa
470
+ kahaan
471
+ kahan
472
+ kahi
473
+ kahin
474
+ kahte
475
+ kaisa
476
+ kaise
477
+ kaisi
478
+ kal
479
+ kam
480
+ kar
481
+ kara
482
+ kare
483
+ karega
484
+ karegi
485
+ karen
486
+ karenge
487
+ kari
488
+ karke
489
+ karna
490
+ karne
491
+ karni
492
+ karo
493
+ karta
494
+ karte
495
+ karti
496
+ karu
497
+ karun
498
+ karunga
499
+ karungi
500
+ kaun
501
+ kaunsa
502
+ kayi
503
+ kch
504
+ ke
505
+ keep
506
+ keeps
507
+ keh
508
+ kehte
509
+ kept
510
+ khud
511
+ ki
512
+ kia
513
+ kin
514
+ kine
515
+ kinhe
516
+ kinho
517
+ kinka
518
+ kinke
519
+ kinki
520
+ kinko
521
+ kinn
522
+ kino
523
+ kis
524
+ kise
525
+ kisi
526
+ kiska
527
+ kiske
528
+ kiski
529
+ kisko
530
+ kisliye
531
+ kisne
532
+ kitna
533
+ kitne
534
+ kitni
535
+ kitno
536
+ kiya
537
+ kiye
538
+ know
539
+ known
540
+ knows
541
+ ko
542
+ koi
543
+ kon
544
+ konsa
545
+ koyi
546
+ krna
547
+ krne
548
+ kuch
549
+ kuchch
550
+ kuchh
551
+ kul
552
+ kull
553
+ kya
554
+ kyaa
555
+ kyu
556
+ kyuki
557
+ kyun
558
+ kyunki
559
+ lagta
560
+ lagte
561
+ lagti
562
+ last
563
+ lately
564
+ later
565
+ le
566
+ least
567
+ lekar
568
+ lekin
569
+ less
570
+ lest
571
+ let
572
+ let's
573
+ li
574
+ like
575
+ liked
576
+ likely
577
+ little
578
+ liya
579
+ liye
580
+ ll
581
+ lo
582
+ log
583
+ logon
584
+ lol
585
+ look
586
+ looking
587
+ looks
588
+ ltd
589
+ lunga
590
+ m
591
+ maan
592
+ maana
593
+ maane
594
+ maani
595
+ maano
596
+ magar
597
+ mai
598
+ main
599
+ maine
600
+ mainly
601
+ mana
602
+ mane
603
+ mani
604
+ mano
605
+ many
606
+ mat
607
+ may
608
+ maybe
609
+ me
610
+ mean
611
+ meanwhile
612
+ mein
613
+ mera
614
+ mere
615
+ merely
616
+ meri
617
+ might
618
+ mightn
619
+ mightnt
620
+ mightn't
621
+ mil
622
+ mjhe
623
+ more
624
+ moreover
625
+ most
626
+ mostly
627
+ much
628
+ mujhe
629
+ must
630
+ mustn
631
+ mustnt
632
+ mustn't
633
+ my
634
+ myself
635
+ na
636
+ naa
637
+ naah
638
+ nahi
639
+ nahin
640
+ nai
641
+ name
642
+ namely
643
+ nd
644
+ ne
645
+ near
646
+ nearly
647
+ necessary
648
+ neeche
649
+ need
650
+ needn
651
+ neednt
652
+ needn't
653
+ needs
654
+ neither
655
+ never
656
+ nevertheless
657
+ new
658
+ next
659
+ nhi
660
+ nine
661
+ no
662
+ nobody
663
+ non
664
+ none
665
+ noone
666
+ nope
667
+ nor
668
+ normally
669
+ not
670
+ nothing
671
+ novel
672
+ now
673
+ nowhere
674
+ o
675
+ obviously
676
+ of
677
+ off
678
+ often
679
+ oh
680
+ ok
681
+ okay
682
+ old
683
+ on
684
+ once
685
+ one
686
+ ones
687
+ only
688
+ onto
689
+ or
690
+ other
691
+ others
692
+ otherwise
693
+ ought
694
+ our
695
+ ours
696
+ ourselves
697
+ out
698
+ outside
699
+ over
700
+ overall
701
+ own
702
+ par
703
+ pata
704
+ pe
705
+ pehla
706
+ pehle
707
+ pehli
708
+ people
709
+ per
710
+ perhaps
711
+ phla
712
+ phle
713
+ phli
714
+ placed
715
+ please
716
+ plus
717
+ poora
718
+ poori
719
+ provides
720
+ pura
721
+ puri
722
+ q
723
+ que
724
+ quite
725
+ raha
726
+ rahaa
727
+ rahe
728
+ rahi
729
+ rakh
730
+ rakha
731
+ rakhe
732
+ rakhen
733
+ rakhi
734
+ rakho
735
+ rather
736
+ re
737
+ really
738
+ reasonably
739
+ regarding
740
+ regardless
741
+ regards
742
+ rehte
743
+ rha
744
+ rhaa
745
+ rhe
746
+ rhi
747
+ ri
748
+ right
749
+ s
750
+ sa
751
+ saara
752
+ saare
753
+ saath
754
+ sab
755
+ sabhi
756
+ sabse
757
+ sahi
758
+ said
759
+ sakta
760
+ saktaa
761
+ sakte
762
+ sakti
763
+ same
764
+ sang
765
+ sara
766
+ sath
767
+ saw
768
+ say
769
+ saying
770
+ says
771
+ se
772
+ second
773
+ secondly
774
+ see
775
+ seeing
776
+ seem
777
+ seemed
778
+ seeming
779
+ seems
780
+ seen
781
+ self
782
+ selves
783
+ sensible
784
+ sent
785
+ serious
786
+ seriously
787
+ seven
788
+ several
789
+ shall
790
+ shan
791
+ shant
792
+ shan't
793
+ she
794
+ she's
795
+ should
796
+ shouldn
797
+ shouldnt
798
+ shouldn't
799
+ should've
800
+ si
801
+ sir
802
+ sir.
803
+ since
804
+ six
805
+ so
806
+ soch
807
+ some
808
+ somebody
809
+ somehow
810
+ someone
811
+ something
812
+ sometime
813
+ sometimes
814
+ somewhat
815
+ somewhere
816
+ soon
817
+ still
818
+ sub
819
+ such
820
+ sup
821
+ sure
822
+ t
823
+ tab
824
+ tabh
825
+ tak
826
+ take
827
+ taken
828
+ tarah
829
+ teen
830
+ teeno
831
+ teesra
832
+ teesre
833
+ teesri
834
+ tell
835
+ tends
836
+ tera
837
+ tere
838
+ teri
839
+ th
840
+ tha
841
+ than
842
+ thank
843
+ thanks
844
+ thanx
845
+ that
846
+ that'll
847
+ thats
848
+ that's
849
+ the
850
+ theek
851
+ their
852
+ theirs
853
+ them
854
+ themselves
855
+ then
856
+ thence
857
+ there
858
+ thereafter
859
+ thereby
860
+ therefore
861
+ therein
862
+ theres
863
+ there's
864
+ thereupon
865
+ these
866
+ they
867
+ they'd
868
+ they'll
869
+ they're
870
+ they've
871
+ thi
872
+ thik
873
+ thing
874
+ think
875
+ thinking
876
+ third
877
+ this
878
+ tho
879
+ thoda
880
+ thodi
881
+ thorough
882
+ thoroughly
883
+ those
884
+ though
885
+ thought
886
+ three
887
+ through
888
+ throughout
889
+ thru
890
+ thus
891
+ tjhe
892
+ to
893
+ together
894
+ toh
895
+ too
896
+ took
897
+ toward
898
+ towards
899
+ tried
900
+ tries
901
+ true
902
+ truly
903
+ try
904
+ trying
905
+ tu
906
+ tujhe
907
+ tum
908
+ tumhara
909
+ tumhare
910
+ tumhari
911
+ tune
912
+ twice
913
+ two
914
+ um
915
+ umm
916
+ un
917
+ under
918
+ unhe
919
+ unhi
920
+ unho
921
+ unhone
922
+ unka
923
+ unkaa
924
+ unke
925
+ unki
926
+ unko
927
+ unless
928
+ unlikely
929
+ unn
930
+ unse
931
+ until
932
+ unto
933
+ up
934
+ upar
935
+ upon
936
+ us
937
+ use
938
+ used
939
+ useful
940
+ uses
941
+ usi
942
+ using
943
+ uska
944
+ uske
945
+ usne
946
+ uss
947
+ usse
948
+ ussi
949
+ usually
950
+ vaala
951
+ vaale
952
+ vaali
953
+ vahaan
954
+ vahan
955
+ vahi
956
+ vahin
957
+ vaisa
958
+ vaise
959
+ vaisi
960
+ vala
961
+ vale
962
+ vali
963
+ various
964
+ ve
965
+ very
966
+ via
967
+ viz
968
+ vo
969
+ waala
970
+ waale
971
+ waali
972
+ wagaira
973
+ wagairah
974
+ wagerah
975
+ waha
976
+ wahaan
977
+ wahan
978
+ wahi
979
+ wahin
980
+ waisa
981
+ waise
982
+ waisi
983
+ wala
984
+ wale
985
+ wali
986
+ want
987
+ wants
988
+ was
989
+ wasn
990
+ wasnt
991
+ wasn't
992
+ way
993
+ we
994
+ we'd
995
+ well
996
+ we'll
997
+ went
998
+ were
999
+ we're
1000
+ weren
1001
+ werent
1002
+ weren't
1003
+ we've
1004
+ what
1005
+ whatever
1006
+ what's
1007
+ when
1008
+ whence
1009
+ whenever
1010
+ where
1011
+ whereafter
1012
+ whereas
1013
+ whereby
1014
+ wherein
1015
+ where's
1016
+ whereupon
1017
+ wherever
1018
+ whether
1019
+ which
1020
+ while
1021
+ who
1022
+ whoever
1023
+ whole
1024
+ whom
1025
+ who's
1026
+ whose
1027
+ why
1028
+ will
1029
+ willing
1030
+ with
1031
+ within
1032
+ without
1033
+ wo
1034
+ woh
1035
+ wohi
1036
+ won
1037
+ wont
1038
+ won't
1039
+ would
1040
+ wouldn
1041
+ wouldnt
1042
+ wouldn't
1043
+ y
1044
+ ya
1045
+ yadi
1046
+ yah
1047
+ yaha
1048
+ yahaan
1049
+ yahan
1050
+ yahi
1051
+ yahin
1052
+ ye
1053
+ yeah
1054
+ yeh
1055
+ yehi
1056
+ yes
1057
+ yet
1058
+ you
1059
+ you'd
1060
+ you'll
1061
+ your
1062
+ you're
1063
+ yours
1064
+ yourself
1065
+ yourselves
1066
+ you've
1067
+ yup
1068
+ baat
1069
+ yrr
1070
+ bss
1071
+ hai..
1072
+ na
1073
+ hlo
1074
+ sb
1075
+ ohh