darthPanda commited on
Commit
ce9c373
Β·
1 Parent(s): 0af0649
Files changed (1) hide show
  1. app.py +104 -16
app.py CHANGED
@@ -131,8 +131,9 @@ elif len(uploaded_file)>0:
131
 
132
 
133
 
134
- ############################ 2. Sentiment Analysis ############################
135
  text = text.replace("\n", " " )
 
136
  sentences = sent_tokenize(text)
137
  title = sentences[0]
138
  long_sentence=[]
@@ -159,7 +160,7 @@ elif len(uploaded_file)>0:
159
  tokenizer = tokenizer_emotion
160
  model = model_emotion
161
  classifier = pipeline("text-classification", model="j-hartmann/emotion-english-distilroberta-base", top_k=1)
162
- output_emotion = classifier(useful_sentence)
163
 
164
 
165
  df = pd.DataFrame.from_dict(output)
@@ -185,7 +186,7 @@ elif len(uploaded_file)>0:
185
  pos_df = pos_df.sort_values('score', ascending=False)
186
  pos_df_mean = pos_df.score.mean()
187
  pos_df['score'] = pos_df['score'].round(4)
188
- pos_df.rename(columns = {'Sentence':'Positive Sentences'}, inplace = True)
189
 
190
  neg_df = df[df['label']=='negative']
191
  neg_df = neg_df[['score', 'Sentence']]
@@ -207,6 +208,10 @@ elif len(uploaded_file)>0:
207
 
208
  ############################ 3.2. Emotion Analysis ############################
209
 
 
 
 
 
210
  df_emotion = pd.DataFrame.from_dict(output_emotion)
211
  df_emotion['Sentence']= pd.Series(useful_sentence)
212
 
@@ -216,6 +221,8 @@ elif len(uploaded_file)>0:
216
  df_joy['score'] = df_joy['score'].round(4)
217
  df_joy.rename(columns = {'Sentence':'Joy Sentences'}, inplace = True)
218
  num_of_joy_sentences = df_joy.shape[0]
 
 
219
 
220
  df_sadness = df_emotion[df_emotion['label']=='sadness']
221
  df_sadness = df_sadness[['score', 'Sentence']]
@@ -223,6 +230,8 @@ elif len(uploaded_file)>0:
223
  df_sadness['score'] = df_sadness['score'].round(4)
224
  df_sadness.rename(columns = {'Sentence':'Sad Sentences'}, inplace = True)
225
  num_of_sad_sentences = df_sadness.shape[0]
 
 
226
 
227
  df_anger = df_emotion[df_emotion['label']=='anger']
228
  df_anger = df_anger[['score', 'Sentence']]
@@ -230,6 +239,8 @@ elif len(uploaded_file)>0:
230
  df_anger['score'] = df_anger['score'].round(4)
231
  df_anger.rename(columns = {'Sentence':'Angry Sentences'}, inplace = True)
232
  num_of_anger_sentences = df_anger.shape[0]
 
 
233
 
234
  df_surprise = df_emotion[df_emotion['label']=='surprise']
235
  df_surprise = df_surprise[['score', 'Sentence']]
@@ -237,14 +248,16 @@ elif len(uploaded_file)>0:
237
  df_surprise['score'] = df_surprise['score'].round(4)
238
  df_surprise.rename(columns = {'Sentence':'Surprised Sentences'}, inplace = True)
239
  num_of_surprise_sentences = df_surprise.shape[0]
 
 
240
 
241
  ############################ 4. Plotting ############################
242
 
243
  fig = make_subplots(
244
- rows=30, cols=6,
245
  specs=[ [None, None, None, None, None, None],
246
  [None, None, None, None, None, None],
247
- [None, None, None, None, None, None],
248
  [None, None, None, None, None, None],
249
  [None, None, None, None, None, None],
250
  [{"type": "pie", "rowspan": 6, "colspan": 2}, None, {"type": "indicator", "rowspan": 6, "colspan": 2}, None, {"type": "indicator", "rowspan": 6, "colspan": 2}, None],
@@ -253,22 +266,33 @@ elif len(uploaded_file)>0:
253
  [None, None, None, None, None, None],
254
  [None, None, None, None, None, None],
255
  [None, None, None, None, None, None],
256
- [{"type": "image", "rowspan": 15, "colspan": 3}, None, None, {"type": "table", "rowspan": 5, "colspan": 3}, None, None],
 
 
 
 
 
 
 
257
  [None, None, None, None, None, None],
258
  [None, None, None, None, None, None],
259
  [None, None, None, None, None, None],
260
  [None, None, None, None, None, None],
261
- [None, None, None, {"type": "table", "rowspan": 5, "colspan": 3}, None, None],
262
  [None, None, None, None, None, None],
263
  [None, None, None, None, None, None],
264
  [None, None, None, None, None, None],
 
265
  [None, None, None, None, None, None],
266
- [None, None, None, {"type": "table", "rowspan": 5, "colspan": 3}, None, None],
267
  [None, None, None, None, None, None],
268
  [None, None, None, None, None, None],
269
  [None, None, None, None, None, None],
270
  [None, None, None, None, None, None],
271
  [None, None, None, None, None, None],
 
 
 
 
272
  [None, None, None, None, None, None],
273
  [None, None, None, None, None, None],
274
  [None, None, None, None, None, None],
@@ -276,6 +300,11 @@ elif len(uploaded_file)>0:
276
  )
277
 
278
  ############################ 4.1. Sentiment Analysis ############################
 
 
 
 
 
279
  colors = px.colors.diverging.Portland#RdBu
280
  fig.add_trace(go.Pie(labels=labels, values=values, hole = 0.5,
281
  title = 'Count by label',
@@ -283,10 +312,12 @@ elif len(uploaded_file)>0:
283
  line=dict(width=2, color='white'))),
284
  row=6, col=1)
285
 
 
286
  fig.add_trace(go.Indicator(
287
  mode = "number",
288
  value = len(df.label.values.tolist()),
289
  title = {"text": "Count of Sentence"}), row=6, col=3)
 
290
 
291
  fig.add_trace(go.Indicator(
292
  mode = "gauge+number",
@@ -316,36 +347,93 @@ elif len(uploaded_file)>0:
316
  else:
317
  fig.update_traces(title_text="Cummulative Sentiment Positive", selector=dict(type='indicator'), row=6, col=5)
318
 
319
- fig.add_trace(go.Image(z=image), row=12, col=1)
320
- fig.update_xaxes(visible=False, row=12, col=1)
321
- fig.update_yaxes(visible=False, row=12, col=1)
322
 
323
  table_trace1 = go.Table(
324
  header=dict(values=list(pos_df.columns), fill_color='lightgray', align='left'),
325
  cells=dict(values=[pos_df[name] for name in pos_df.columns], fill_color='white', align='left'),
326
  columnwidth=[1, 4]
327
  )
328
- fig.add_trace(table_trace1, row=12, col=4)
329
 
330
  table_trace2 = go.Table(
331
  header=dict(values=list(neg_df.columns), fill_color='lightgray', align='left'),
332
  cells=dict(values=[neg_df[name] for name in neg_df.columns], fill_color='white', align='left'),
333
  columnwidth=[1, 4]
334
  )
335
- fig.add_trace(table_trace2, row=17, col=4)
336
 
337
  table_trace2 = go.Table(
338
  header=dict(values=list(neu_df.columns), fill_color='lightgray', align='left'),
339
  cells=dict(values=[neu_df[name] for name in neu_df.columns], fill_color='white', align='left'),
340
  columnwidth=[1, 4]
341
  )
342
- fig.add_trace(table_trace2, row=22, col=4)
343
 
 
 
 
 
344
 
345
  ############## Under Construction ##############
346
 
347
  ############################ 4.2. Emotion Analysis ############################
348
- go.Bar(x=['Joy', 'Sadness', 'Anger', 'Surprise'], y=[3, 4, 1])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
 
350
  import textwrap
351
  wrapped_title = "\n".join(textwrap.wrap(title, width=50))
@@ -353,7 +441,7 @@ elif len(uploaded_file)>0:
353
  # Add HTML tags to force line breaks in the title text
354
  wrapped_title = "<br>".join(wrapped_title.split("\n"))
355
 
356
- fig.update_layout(height=1500, showlegend=False, title={'text': f"<b>{wrapped_title} - Sentiment Analysis Report</b>", 'x': 0.5, 'xanchor': 'center','font': {'size': 32}})
357
 
358
  #pyo.plot(fig, filename='report.html')
359
 
 
131
 
132
 
133
 
134
+ ############################ 2. Running models ############################
135
  text = text.replace("\n", " " )
136
+ text = text.replace("$", "dollar " )
137
  sentences = sent_tokenize(text)
138
  title = sentences[0]
139
  long_sentence=[]
 
160
  tokenizer = tokenizer_emotion
161
  model = model_emotion
162
  classifier = pipeline("text-classification", model="j-hartmann/emotion-english-distilroberta-base", top_k=1)
163
+ temp_emotion = classifier(useful_sentence)
164
 
165
 
166
  df = pd.DataFrame.from_dict(output)
 
186
  pos_df = pos_df.sort_values('score', ascending=False)
187
  pos_df_mean = pos_df.score.mean()
188
  pos_df['score'] = pos_df['score'].round(4)
189
+ pos_df.rename(columns = {'Sentence':'Positive Sentences'}, inplace = True)
190
 
191
  neg_df = df[df['label']=='negative']
192
  neg_df = neg_df[['score', 'Sentence']]
 
208
 
209
  ############################ 3.2. Emotion Analysis ############################
210
 
211
+ output_emotion = []
212
+ for temp in temp_emotion:
213
+ output_emotion.append(temp[0])
214
+
215
  df_emotion = pd.DataFrame.from_dict(output_emotion)
216
  df_emotion['Sentence']= pd.Series(useful_sentence)
217
 
 
221
  df_joy['score'] = df_joy['score'].round(4)
222
  df_joy.rename(columns = {'Sentence':'Joy Sentences'}, inplace = True)
223
  num_of_joy_sentences = df_joy.shape[0]
224
+ if num_of_joy_sentences == 0:
225
+ df_joy.loc[0] = [0.0, '-------No joy sentences found in report-------']
226
 
227
  df_sadness = df_emotion[df_emotion['label']=='sadness']
228
  df_sadness = df_sadness[['score', 'Sentence']]
 
230
  df_sadness['score'] = df_sadness['score'].round(4)
231
  df_sadness.rename(columns = {'Sentence':'Sad Sentences'}, inplace = True)
232
  num_of_sad_sentences = df_sadness.shape[0]
233
+ if num_of_sad_sentences == 0:
234
+ df_sadness.loc[0] = [0.0, '-------No sad sentences found in report-------']
235
 
236
  df_anger = df_emotion[df_emotion['label']=='anger']
237
  df_anger = df_anger[['score', 'Sentence']]
 
239
  df_anger['score'] = df_anger['score'].round(4)
240
  df_anger.rename(columns = {'Sentence':'Angry Sentences'}, inplace = True)
241
  num_of_anger_sentences = df_anger.shape[0]
242
+ if num_of_anger_sentences == 0:
243
+ df_anger.loc[0] = [0.0, '-------No angry sentences found in report-------']
244
 
245
  df_surprise = df_emotion[df_emotion['label']=='surprise']
246
  df_surprise = df_surprise[['score', 'Sentence']]
 
248
  df_surprise['score'] = df_surprise['score'].round(4)
249
  df_surprise.rename(columns = {'Sentence':'Surprised Sentences'}, inplace = True)
250
  num_of_surprise_sentences = df_surprise.shape[0]
251
+ if num_of_surprise_sentences == 0:
252
+ df_surprise.loc[0] = [0.0, '-------No surprised sentences found in report-------']
253
 
254
  ############################ 4. Plotting ############################
255
 
256
  fig = make_subplots(
257
+ rows=41, cols=6,
258
  specs=[ [None, None, None, None, None, None],
259
  [None, None, None, None, None, None],
260
+ [None, None, {"type": "indicator", "rowspan": 3, "colspan": 2}, None, None, None],
261
  [None, None, None, None, None, None],
262
  [None, None, None, None, None, None],
263
  [{"type": "pie", "rowspan": 6, "colspan": 2}, None, {"type": "indicator", "rowspan": 6, "colspan": 2}, None, {"type": "indicator", "rowspan": 6, "colspan": 2}, None],
 
266
  [None, None, None, None, None, None],
267
  [None, None, None, None, None, None],
268
  [None, None, None, None, None, None],
269
+ [None, None, None, None, None, None],
270
+ [{"type": "image", "rowspan": 5, "colspan": 3}, None, None, {"type": "table", "rowspan": 5, "colspan": 3}, None, None],
271
+ [None, None, None, None, None, None],
272
+ [None, None, None, None, None, None],
273
+ [None, None, None, None, None, None],
274
+ [None, None, None, None, None, None],
275
+ [{"type": "table", "rowspan": 5, "colspan": 3}, None, None, {"type": "table", "rowspan": 5, "colspan": 3}, None, None],
276
+ [None, None, None, None, None, None],
277
  [None, None, None, None, None, None],
278
  [None, None, None, None, None, None],
279
  [None, None, None, None, None, None],
280
  [None, None, None, None, None, None],
281
+ [None, None, {"type": "indicator", "rowspan": 3, "colspan": 2}, None, None, None],
282
  [None, None, None, None, None, None],
283
  [None, None, None, None, None, None],
284
  [None, None, None, None, None, None],
285
+ [{"type": "bar", "rowspan": 6, "colspan": 6}, None, None, None, None, None],
286
  [None, None, None, None, None, None],
 
287
  [None, None, None, None, None, None],
288
  [None, None, None, None, None, None],
289
  [None, None, None, None, None, None],
290
  [None, None, None, None, None, None],
291
  [None, None, None, None, None, None],
292
+ [{"type": "table", "rowspan": 2, "colspan": 3}, None, None, {"type": "table", "rowspan": 2, "colspan": 3}, None, None],
293
+ [None, None, None, None, None, None],
294
+ [None, None, None, None, None, None],
295
+ [{"type": "table", "rowspan": 2, "colspan": 3}, None, None, {"type": "table", "rowspan": 2, "colspan": 3}, None, None],
296
  [None, None, None, None, None, None],
297
  [None, None, None, None, None, None],
298
  [None, None, None, None, None, None],
 
300
  )
301
 
302
  ############################ 4.1. Sentiment Analysis ############################
303
+ fig.add_trace(go.Indicator(
304
+ mode = "number",
305
+ value = None,
306
+ title = {"text": "Sentiment Analysis"}), row=3, col=3)
307
+
308
  colors = px.colors.diverging.Portland#RdBu
309
  fig.add_trace(go.Pie(labels=labels, values=values, hole = 0.5,
310
  title = 'Count by label',
 
312
  line=dict(width=2, color='white'))),
313
  row=6, col=1)
314
 
315
+
316
  fig.add_trace(go.Indicator(
317
  mode = "number",
318
  value = len(df.label.values.tolist()),
319
  title = {"text": "Count of Sentence"}), row=6, col=3)
320
+ #fig.update_traces(title_text="Sentiment Analysis", selector=dict(type='indicator'), row=6, col=3)
321
 
322
  fig.add_trace(go.Indicator(
323
  mode = "gauge+number",
 
347
  else:
348
  fig.update_traces(title_text="Cummulative Sentiment Positive", selector=dict(type='indicator'), row=6, col=5)
349
 
350
+ fig.add_trace(go.Image(z=image), row=13, col=1)
351
+ fig.update_xaxes(visible=False, row=13, col=1)
352
+ fig.update_yaxes(visible=False, row=13, col=1)
353
 
354
  table_trace1 = go.Table(
355
  header=dict(values=list(pos_df.columns), fill_color='lightgray', align='left'),
356
  cells=dict(values=[pos_df[name] for name in pos_df.columns], fill_color='white', align='left'),
357
  columnwidth=[1, 4]
358
  )
359
+ fig.add_trace(table_trace1, row=13, col=4)
360
 
361
  table_trace2 = go.Table(
362
  header=dict(values=list(neg_df.columns), fill_color='lightgray', align='left'),
363
  cells=dict(values=[neg_df[name] for name in neg_df.columns], fill_color='white', align='left'),
364
  columnwidth=[1, 4]
365
  )
366
+ fig.add_trace(table_trace2, row=18, col=4)
367
 
368
  table_trace2 = go.Table(
369
  header=dict(values=list(neu_df.columns), fill_color='lightgray', align='left'),
370
  cells=dict(values=[neu_df[name] for name in neu_df.columns], fill_color='white', align='left'),
371
  columnwidth=[1, 4]
372
  )
373
+ fig.add_trace(table_trace2, row=18, col=1)
374
 
375
+ fig.add_trace(go.Indicator(
376
+ mode = "number",
377
+ value = None,
378
+ title = {"text": "Emotion Analysis"}), row=24, col=3)
379
 
380
  ############## Under Construction ##############
381
 
382
  ############################ 4.2. Emotion Analysis ############################
383
+ #go.Bar(x=['Joy', 'Sadness', 'Anger', 'Surprise'], y=[3, 4, 1])
384
+
385
+ # Add bar chart
386
+ colors_emotions = ['#174ecf', '#cfc517', '#940625', '#17cfcb']
387
+ emotion_bar_xlabels = ['Joy', 'Sadness', 'Anger', 'Surprise']
388
+ emotion_bar_ylabels = [num_of_joy_sentences,
389
+ num_of_sad_sentences,
390
+ num_of_anger_sentences,
391
+ num_of_surprise_sentences]
392
+ #annotations = [dict(x=x, y=y, text='πŸ˜€', showarrow=False) for x, y in zip(emotion_bar_xlabels, emotion_bar_ylabels)]
393
+ annotations = ['πŸ˜€', '😞', '😑', '😯']
394
+ fig.add_trace(
395
+ go.Bar(x=emotion_bar_xlabels, y= emotion_bar_ylabels,
396
+ showlegend=True,
397
+ marker_color=colors_emotions,
398
+ text=annotations,
399
+ textfont=dict(size=40)),
400
+ row=28, col=1)
401
+ fig.update_xaxes(title_text='Emotions', title_font=dict(size=16), row=28, col=1)
402
+ fig.update_yaxes(title_text='Number of sentences', title_font=dict(size=16), row=28, col=1)
403
+
404
+ # df_anger.loc[0] = [0.0, 'None']
405
+ # df_anger
406
+ ################## happiness table
407
+ table_trace2 = go.Table(
408
+ header=dict(values=list(df_joy.columns), fill_color='lightgray', align='left'),
409
+ cells=dict(values=[df_joy[name] for name in df_joy.columns], fill_color='white', align='left'),
410
+ columnwidth=[1, 4]
411
+ )
412
+ fig.add_trace(table_trace2, row=35, col=1)
413
+
414
+ ################## sadness table
415
+ table_trace2 = go.Table(
416
+ header=dict(values=list(df_sadness.columns), fill_color='lightgray', align='left'),
417
+ cells=dict(values=[df_sadness[name] for name in df_sadness.columns], fill_color='white', align='left'),
418
+ columnwidth=[1, 4]
419
+ )
420
+ fig.add_trace(table_trace2, row=35, col=4)
421
+
422
+ ################## surprise table
423
+ table_trace2 = go.Table(
424
+ header=dict(values=list(df_surprise.columns), fill_color='lightgray', align='left'),
425
+ cells=dict(values=[df_surprise[name] for name in df_surprise.columns], fill_color='white', align='left'),
426
+ columnwidth=[1, 4]
427
+ )
428
+ fig.add_trace(table_trace2, row=38, col=1)
429
+
430
+ ################## anger table
431
+ table_trace2 = go.Table(
432
+ header=dict(values=list(df_anger.columns), fill_color='lightgray', align='left'),
433
+ cells=dict(values=[df_anger[name] for name in df_anger.columns], fill_color='white', align='left'),
434
+ columnwidth=[1, 4]
435
+ )
436
+ fig.add_trace(table_trace2, row=38, col=4)
437
 
438
  import textwrap
439
  wrapped_title = "\n".join(textwrap.wrap(title, width=50))
 
441
  # Add HTML tags to force line breaks in the title text
442
  wrapped_title = "<br>".join(wrapped_title.split("\n"))
443
 
444
+ fig.update_layout(height=3000, showlegend=False, title={'text': f"<b>{wrapped_title} - Text Analysis Report</b>", 'x': 0.5, 'xanchor': 'center','font': {'size': 32}})
445
 
446
  #pyo.plot(fig, filename='report.html')
447