MK-316 commited on
Commit
3d3b58a
1 Parent(s): c92892e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -18
app.py CHANGED
@@ -11,37 +11,58 @@ def load_data(level):
11
  data = pd.read_csv(csv_file_path)
12
  return data
13
 
14
- def generate_speech(level, x, y, audio_option, pos_filter):
15
  data = load_data(level)
16
 
17
  x, y = int(x), int(y)
18
- if pos_filter != "ALL": # If a specific POS is selected, filter by it
19
- filtered_df = data[(data['SID'] >= x) & (data['SID'] <= y) & (data['POS'].str.lower() == pos_filter.lower())]
20
- else: # Include all words if "ALL" is selected
21
  filtered_df = data[(data['SID'] >= x) & (data['SID'] <= y)]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
- if len(filtered_df) == 0: # Check if the filtered DataFrame is empty
24
- sentence = f"There is no {pos_filter} in the selected range."
 
 
25
  tts = gTTS(text=sentence, lang='en')
26
  mp3_fp = io.BytesIO()
27
  tts.write_to_fp(mp3_fp)
28
  mp3_fp.seek(0)
29
- sentence_audio = AudioSegment.from_file(mp3_fp, format="mp3")
30
- combined_audio = sentence_audio
31
  else:
32
- combined_audio = AudioSegment.silent(duration=1000)
33
  for _, row in filtered_df.iterrows():
34
- if audio_option == "Audio with number":
35
- sentence = f"Number {row['SID']}. {row['WORD']}! {row['WORD']} is a {row['POS']}."
36
- else: # "Audio without number"
37
- sentence = f"{row['WORD']}!"
 
 
 
38
 
39
  tts = gTTS(text=sentence, lang='en')
40
  mp3_fp = io.BytesIO()
41
  tts.write_to_fp(mp3_fp)
42
  mp3_fp.seek(0)
43
  sentence_audio = AudioSegment.from_file(mp3_fp, format="mp3")
44
- combined_audio += sentence_audio + AudioSegment.silent(duration=1500)
 
45
 
46
  mp3_io = io.BytesIO()
47
  combined_audio.export(mp3_io, format='mp3')
@@ -49,14 +70,24 @@ def generate_speech(level, x, y, audio_option, pos_filter):
49
  return mp3_io.getvalue()
50
 
51
 
 
52
  iface = gr.Interface(
53
  fn=generate_speech,
54
  inputs=[
 
55
  gr.Dropdown(label="Select Level", choices=['A1', 'A2', 'B1', 'B2', 'C1', '5K']),
56
- gr.Number(label="Start Number (x)"),
57
- gr.Number(label="End Number (y)"),
58
- gr.Radio(label="Audio Option", choices=["Audio with number", "Audio without number"]),
59
- gr.Dropdown(label="Select Part of Speech", choices=["ALL", "Noun", "Verb", "Adjective", "Adverb", "Preposition"]) # Updated POS filter input
 
 
 
 
 
 
 
 
60
  ],
61
  outputs=gr.Audio(label="Generated Speech"),
62
  title="Oxford Learner Vocabulary by CEFR levels: Learn with Sound",
 
11
  data = pd.read_csv(csv_file_path)
12
  return data
13
 
14
+ def generate_speech(t1, level, t2, x, y, t3, audio_option, t4, all_pos, noun, verb, adjective, adverb, preposition):
15
  data = load_data(level)
16
 
17
  x, y = int(x), int(y)
18
+
19
+ if all_pos: # Include all words if "ALL" is selected
 
20
  filtered_df = data[(data['SID'] >= x) & (data['SID'] <= y)]
21
+ else:
22
+ # Initialize an empty DataFrame to accumulate results
23
+ filtered_df = pd.DataFrame()
24
+
25
+ # Check each selected POS and append matches to the filtered_df
26
+ if noun:
27
+ filtered_df = filtered_df.append(data[(data['SID'] >= x) & (data['SID'] <= y) & (data['POS'].str.lower() == 'noun')])
28
+ if verb:
29
+ filtered_df = filtered_df.append(data[(data['SID'] >= x) & (data['SID'] <= y) & (data['POS'].str.lower() == 'verb')])
30
+ if adjective:
31
+ filtered_df = filtered_df.append(data[(data['SID'] >= x) & (data['SID'] <= y) & (data['POS'].str.lower() == 'adjective')])
32
+ if adverb:
33
+ filtered_df = filtered_df.append(data[(data['SID'] >= x) & (data['SID'] <= y) & (data['POS'].str.lower() == 'adverb')])
34
+ if preposition:
35
+ filtered_df = filtered_df.append(data[(data['SID'] >= x) & (data['SID'] <= y) & (data['POS'].str.lower() == 'preposition')])
36
+
37
+ # Ensure the filtered_df is unique in case of overlapping conditions
38
+ filtered_df = filtered_df.drop_duplicates()
39
+
40
 
41
+ # Proceed with generating the speech
42
+ combined_audio = AudioSegment.silent(duration=1000) # Initial silence
43
+ if filtered_df.empty:
44
+ sentence = "No matching words found."
45
  tts = gTTS(text=sentence, lang='en')
46
  mp3_fp = io.BytesIO()
47
  tts.write_to_fp(mp3_fp)
48
  mp3_fp.seek(0)
 
 
49
  else:
 
50
  for _, row in filtered_df.iterrows():
51
+ # Adjust the sentence based on the audio_option
52
+ if audio_option == "Audio without number":
53
+ sentence = f"{row['WORD']} is {row['POS']}"
54
+ elif audio_option == "Audio with number":
55
+ sentence = f"{row['SID']}. {row['WORD']}. {row['WORD']} is {row['POS']}"
56
+ else: # "Word only"
57
+ sentence = f"{row['WORD']}"
58
 
59
  tts = gTTS(text=sentence, lang='en')
60
  mp3_fp = io.BytesIO()
61
  tts.write_to_fp(mp3_fp)
62
  mp3_fp.seek(0)
63
  sentence_audio = AudioSegment.from_file(mp3_fp, format="mp3")
64
+ # Add a pause after each word
65
+ combined_audio += sentence_audio + AudioSegment.silent(duration=1000)
66
 
67
  mp3_io = io.BytesIO()
68
  combined_audio.export(mp3_io, format='mp3')
 
70
  return mp3_io.getvalue()
71
 
72
 
73
+ # Adjust inputs for POS with checkboxes
74
  iface = gr.Interface(
75
  fn=generate_speech,
76
  inputs=[
77
+ gr.Markdown("#### [1] Select Level"), # Adding a label for POS options
78
  gr.Dropdown(label="Select Level", choices=['A1', 'A2', 'B1', 'B2', 'C1', '5K']),
79
+ gr.Markdown("#### [2] Select Range"),
80
+ gr.Number(label= "Start Number (x)"),
81
+ gr.Number(label = "End Number (y)"),
82
+ gr.Markdown("#### [3] Audio options (text)"),
83
+ gr.Radio(label="Audio Option", choices=["Audio with number", "Audio without number", "Word only"]),
84
+ gr.Markdown("#### Select Part of Speech"), # Adding a label for POS options
85
+ gr.Checkbox(label="Any", value=False),
86
+ gr.Checkbox(label="Noun", value=False),
87
+ gr.Checkbox(label="Verb", value=False),
88
+ gr.Checkbox(label="Adjective", value=False),
89
+ gr.Checkbox(label="Adverb", value=False),
90
+ gr.Checkbox(label="Preposition", value=False)
91
  ],
92
  outputs=gr.Audio(label="Generated Speech"),
93
  title="Oxford Learner Vocabulary by CEFR levels: Learn with Sound",