Spaces:
Runtime error
Runtime error
File size: 5,651 Bytes
97a93cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
import spaces
import gradio as gr
import numpy as np
import pandas as pd
import time
css="""
#col-left {
margin: 0 auto;
max-width: 640px;
}
#col-right {
margin: 0 auto;
max-width: 640px;
}
.grid-container {
display: flex;
align-items: center;
justify-content: center;
gap:10px
}
.image {
width: 128px;
height: 128px;
object-fit: cover;
}
.text {
font-size: 16px;
}
"""
emotion_columns = ['admiration', 'amusement', 'anger', 'annoyance', 'approval',
'caring', 'confusion', 'curiosity', 'desire', 'disappointment',
'disapproval', 'disgust', 'embarrassment', 'excitement', 'fear',
'gratitude', 'grief', 'joy', 'love', 'nervousness', 'optimism',
'pride', 'realization', 'relief', 'remorse', 'sadness', 'surprise','neutral']
def load_text(text_path: str) -> str:
with open(text_path, 'r', encoding='utf-8') as f:
text = f.read()
return text
def select_checkbox(name):
if name =="All":
return gr.CheckboxGroup(value=emotion_columns)
elif name =="None":
return []
elif name =="Positive":
return ["admiration","amusement","approval","caring","curiosity","desire","excitement","gratitude","joy","love","optimism","pride","relief"]
elif name =="Negative":
return ["anger","annoyance","disappointment","disapproval","disgust","fear","grief","embarrassment","remorse","sadness"]
else:
return ["confusion","nervousness","neutral","realization","surprise"]
def process_datas(checked_emotions,mode="filter",max_data=100,skip_data=0):
checked_emotions = sorted(checked_emotions)
df = pd.read_parquet("hf://datasets/google-research-datasets/go_emotions/raw/train-00000-of-00001.parquet")
def filter_emotions(emotions):
unchecked = emotion_columns.copy()
condition_checked = np.all(df[emotions] == 1, axis=1)
for emotion in checked_emotions:
unchecked.remove(emotion)
condition_unchecked = np.all(df[unchecked] == 0, axis=1)
filtered_df = df[condition_checked & condition_unchecked]
return filtered_df
def df_to_text(df):
df = df.iloc[skip_data:]
if len(filtered_df) == 0:
return ""
texts=(df.head(max_data)[['text']].to_string(index=False,max_colwidth=None))
trimmed_texts = [line.strip() for line in texts.split('\n')[1:] if line.strip()]
return "\n".join(trimmed_texts)
if mode == "filter":
filtered_df = filter_emotions(checked_emotions)
count = (len(filtered_df))
trimmed_texts = df_to_text(filtered_df)
last_count = min(count,(skip_data+max_data))
label = f"{skip_data+1} - {last_count} of {count}"
label_texts = [f"[{emotion}]" for emotion in checked_emotions]
output_text = "+".join(label_texts)+"\n"+trimmed_texts
output_label = label
else:
max_data = max(1,int(max_data/len(checked_emotions)))
text_arrays = []
for emotion in checked_emotions:
text_arrays.append(f"[{emotion}]")
filtered_df = filter_emotions([emotion])
trimmed_texts = df_to_text(filtered_df)
text_arrays.append(trimmed_texts)
text_arrays.append("\n")
print(text_arrays)
output_text = "\n".join(text_arrays)
output_label = f"{len(checked_emotions)} x {max_data}"
return output_text,output_label,",".join(checked_emotions)
with gr.Blocks(css=css, elem_id="demo-container") as demo:
with gr.Column():
gr.HTML(load_text("demo_header.html"))
gr.HTML(load_text("demo_tools.html"))
with gr.Row():
with gr.Column():
with gr.Row(equal_height=True):
mode_group = gr.Radio(choices=["filter","list"],label="Mode",value="filter")
selection_name = gr.Dropdown(label="Select",choices=["All","None","Positive","Negative","Neutral"],value="All")
selection_btn= gr.Button("Update Selection")
checkbox_group = gr.CheckboxGroup(choices=emotion_columns,label="Emotions",value=["love"])
btn= gr.Button("View Data",variant="primary")
with gr.Row():
max_data = gr.Slider(
label="Max Data",
minimum=0,
maximum=540,
step=10,
value=50,info="returning large data is heavy action,if you need more copy the space")
skip_data = gr.Slider(
label="Skip Data",
minimum=0,
maximum=100000,
step=1,
value=0)
with gr.Column():
with gr.Row():
data_size = gr.Textbox(label="Data Count",scale=1)
checked_size = gr.Textbox(label="Checked",scale=2)
text_out = gr.TextArea(label="Output", elem_id="output-text")
btn.click(fn=process_datas, inputs=[checkbox_group,mode_group,max_data,skip_data], outputs =[text_out,data_size,checked_size], api_name='infer')
selection_btn.click(fn=select_checkbox,inputs=[selection_name],outputs=[checkbox_group])
gr.Examples(
examples=[
],
inputs=[],
)
gr.HTML(
gr.HTML(load_text("demo_footer.html"))
)
if __name__ == "__main__":
demo.launch() |