Sa-m commited on
Commit
200dcdb
·
verified ·
1 Parent(s): 3d52ed2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -10
app.py CHANGED
@@ -210,15 +210,18 @@ def fDistancePlot(text2Party):
210
  plt.tight_layout()
211
  return safe_plot(plot_func)
212
 
213
-
214
  def DispersionPlot(textParty):
215
  """Generates the word dispersion plot."""
 
216
  try:
217
  word_tokens_party = word_tokenize(textParty)
218
  if not word_tokens_party:
 
219
  return None
 
220
  moby = Text(word_tokens_party)
221
  fdistance = FreqDist(word_tokens_party)
 
222
  common_words = fdistance.most_common(6)
223
  if len(common_words) < 5:
224
  word_Lst = [word for word, _ in common_words]
@@ -226,33 +229,40 @@ def DispersionPlot(textParty):
226
  word_Lst = [common_words[x][0] for x in range(5)]
227
 
228
  if not word_Lst:
 
229
  return None
230
 
231
- fig, ax = plt.subplots(figsize=(10, 5)) # Explicitly create figure and axes
232
- ax.set_title('Dispersion Plot')
233
- moby.dispersion_plot(word_Lst, ax=ax) # Pass the axes object
234
- fig.tight_layout() # Use fig.tight_layout()
 
 
 
235
  buf = BytesIO()
236
- # Handle potential apply_aspect error for dispersion plot too
237
  try:
238
  fig.savefig(buf, format='png', bbox_inches='tight')
239
  except AttributeError as ae:
240
  if "apply_aspect" in str(ae):
241
  print(f"Warning: bbox_inches='tight' failed for Dispersion Plot ({ae}), saving without it.")
242
  buf.seek(0)
243
- buf = BytesIO()
244
  fig.savefig(buf, format='png')
245
  else:
246
- raise
247
  buf.seek(0)
248
  img = Image.open(buf)
249
- plt.close(fig) # Close the specific figure
250
  return img
 
251
  except Exception as e:
252
  print(f"Dispersion plot error: {e}")
 
 
253
  traceback.print_exc()
254
  plt.close('all') # Aggressive close on error
255
- return None
256
 
257
 
258
  def word_cloud_generator(parsed_text_name, text_Party):
 
210
  plt.tight_layout()
211
  return safe_plot(plot_func)
212
 
 
213
  def DispersionPlot(textParty):
214
  """Generates the word dispersion plot."""
215
+ buf = None # Initialize buffer
216
  try:
217
  word_tokens_party = word_tokenize(textParty)
218
  if not word_tokens_party:
219
+ print("Warning: No tokens found for dispersion plot.")
220
  return None
221
+
222
  moby = Text(word_tokens_party)
223
  fdistance = FreqDist(word_tokens_party)
224
+ # Get top 5 words, handle potential IndexError if less than 5 unique words
225
  common_words = fdistance.most_common(6)
226
  if len(common_words) < 5:
227
  word_Lst = [word for word, _ in common_words]
 
229
  word_Lst = [common_words[x][0] for x in range(5)]
230
 
231
  if not word_Lst:
232
+ print("Warning: No common words found for dispersion plot.")
233
  return None
234
 
235
+ # --- Key Fix: Manage figure explicitly without passing 'ax' ---
236
+ fig = plt.figure(figsize=(10, 5)) # Create figure explicitly
237
+ plt.title('Dispersion Plot')
238
+ # Call dispersion_plot without 'ax' argument
239
+ moby.dispersion_plot(word_Lst)
240
+ plt.tight_layout()
241
+
242
  buf = BytesIO()
243
+ # Handle potential apply_aspect error for dispersion plot
244
  try:
245
  fig.savefig(buf, format='png', bbox_inches='tight')
246
  except AttributeError as ae:
247
  if "apply_aspect" in str(ae):
248
  print(f"Warning: bbox_inches='tight' failed for Dispersion Plot ({ae}), saving without it.")
249
  buf.seek(0)
250
+ buf = BytesIO() # Get a fresh buffer
251
  fig.savefig(buf, format='png')
252
  else:
253
+ raise # Re-raise if it's a different AttributeError
254
  buf.seek(0)
255
  img = Image.open(buf)
256
+ plt.close(fig) # Close the specific figure created
257
  return img
258
+
259
  except Exception as e:
260
  print(f"Dispersion plot error: {e}")
261
+ if buf:
262
+ buf.close() # Ensure buffer is closed on error
263
  traceback.print_exc()
264
  plt.close('all') # Aggressive close on error
265
+ return None # Return None on error
266
 
267
 
268
  def word_cloud_generator(parsed_text_name, text_Party):