cdleong commited on
Commit
936af6a
·
verified ·
1 Parent(s): e3d7a97

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -5
app.py CHANGED
@@ -67,17 +67,106 @@ def load_bible_names():
67
  ssa_names_df, ssa_names_aggregated_df = load_ssa_names()
68
  bible_names_df = load_bible_names()
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  # ------------------
71
  # Gradio Interface
72
  # ------------------
73
 
74
  with gr.Blocks() as demo:
75
- gr.Markdown("## Bible Names & SSA Names Datasets")
 
 
 
 
76
 
77
- with gr.Tab("Bible Names"):
78
- gr.Dataframe(bible_names_df.head(100), label="Bible Names (first 100 rows)")
79
 
80
- with gr.Tab("SSA Names (Aggregated)"):
81
- gr.Dataframe(ssa_names_aggregated_df.head(100), label="Top SSA Names (first 100 rows)")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  demo.launch()
 
67
  ssa_names_df, ssa_names_aggregated_df = load_ssa_names()
68
  bible_names_df = load_bible_names()
69
 
70
+
71
+ # -----------------------
72
+ # filtering and picking
73
+ # -----------------------
74
+
75
+ def get_normal_and_bible(
76
+ ssa_names_df,
77
+ bible_names_df,
78
+ min_length_ssa=1,
79
+ max_length_ssa=None,
80
+ min_length_bible=1,
81
+ max_length_bible=None,
82
+ ssa_popularity_percentile=None,
83
+ sex=None,
84
+ forbidden_names=None,
85
+ ):
86
+ filtered_ssa_df = ssa_names_df
87
+
88
+ if ssa_popularity_percentile is not None:
89
+ low, high = ssa_popularity_percentile
90
+ name_counts = (
91
+ ssa_names_df.groupby("name", as_index=False)["count"]
92
+ .sum()
93
+ .sort_values(by="count", ascending=True)
94
+ )
95
+ total = len(name_counts)
96
+ selected_names = name_counts.iloc[int(low * total):int(high * total)]["name"]
97
+ filtered_ssa_df = ssa_names_df[ssa_names_df["name"].isin(selected_names)]
98
+
99
+ if sex:
100
+ filtered_ssa_df = filtered_ssa_df[filtered_ssa_df["sex"] == sex]
101
+ bible_names_df = bible_names_df[bible_names_df["sex"] == sex]
102
+
103
+ if forbidden_names:
104
+ filtered_ssa_df = filtered_ssa_df[~filtered_ssa_df["name"].isin(forbidden_names)]
105
+ bible_names_df = bible_names_df[~bible_names_df["english_label"].isin(forbidden_names)]
106
+
107
+ ssa_mask = filtered_ssa_df["name"].str.len() >= min_length_ssa
108
+ if max_length_ssa is not None:
109
+ ssa_mask &= filtered_ssa_df["name"].str.len() <= max_length_ssa
110
+ normal_names = filtered_ssa_df[ssa_mask]["name"].unique().tolist()
111
+
112
+ bible_mask = bible_names_df["english_label"].str.len() >= min_length_bible
113
+ if max_length_bible is not None:
114
+ bible_mask &= bible_names_df["english_label"].str.len() <= max_length_bible
115
+ bible_names = bible_names_df[bible_mask]["english_label"].unique().tolist()
116
+
117
+ if not normal_names or not bible_names:
118
+ raise ValueError("No names found with given constraints")
119
+
120
+ return random.choice(normal_names), random.choice(bible_names)
121
+
122
+ def generate_names(n, sex, min_len, max_len, min_bible_len, max_bible_len, pop_low, pop_high,last="Smith"):
123
+ names = []
124
+ for _ in range(n):
125
+ try:
126
+ normal, bible = get_normal_and_bible(
127
+ ssa_names_aggregated_df,
128
+ bible_names_personlabel_df,
129
+ min_length_ssa=min_len,
130
+ max_length_ssa=max_len,
131
+ min_length_bible=min_bible_len,
132
+ max_length_bible=max_bible_len,
133
+ ssa_popularity_percentile=(pop_low, pop_high),
134
+ sex=sex if sex in {"M", "F"} else None
135
+ )
136
+ names.append(f"{bible} {normal} {last")
137
+ except Exception as e:
138
+ names.append(f"[Error: {e}]")
139
+ return "\n".join(names)
140
+
141
  # ------------------
142
  # Gradio Interface
143
  # ------------------
144
 
145
  with gr.Blocks() as demo:
146
+ gr.Markdown("## 📜 Bible + SSA Name Generator")
147
+
148
+ with gr.Row():
149
+ n_slider = gr.Slider(1, 100, value=10, label="Number of names")
150
+ sex_choice = gr.Radio(["M", "F", "Any"], label="Sex", value="Any")
151
 
152
+ with gr.Row():
153
+ pop_range = gr.RangeSlider(0.0, 1.0, value=[0.0, 1.0], step=0.01, label="Popularity Percentile Range (SSA)")
154
 
155
+ with gr.Row():
156
+ ssa_len = gr.Slider(1, 15, value=1, label="SSA Name Length (min)")
157
+ ssa_max_len = gr.Slider(1, 15, value=10, label="SSA Name Length (max)")
158
+
159
+ with gr.Row():
160
+ bible_len = gr.Slider(1, 15, value=4, label="Bible Name Length (min)")
161
+ bible_max_len = gr.Slider(1, 15, value=10, label="Bible Name Length (max)")
162
+
163
+ generate_btn = gr.Button("Generate Names")
164
+ output_box = gr.Textbox(label="Generated Names", lines=15)
165
+
166
+ generate_btn.click(
167
+ fn=generate_names,
168
+ inputs=[n_slider, sex_choice, ssa_len, ssa_max_len, bible_len, bible_max_len, pop_range],
169
+ outputs=output_box
170
+ )
171
 
172
  demo.launch()