DamarJati commited on
Commit
ae4be59
·
verified ·
1 Parent(s): d5f6f47

Tag character selection and processing with DuckDB

Browse files
Files changed (1) hide show
  1. app.py +45 -12
app.py CHANGED
@@ -1,7 +1,10 @@
1
  import gradio as gr
2
  import pandas as pd
 
3
 
4
- PARQUET_FILE = 'data.parquet'
 
 
5
 
6
  preset_values = [
7
  "1girl, kamado nezuko, kimetsu no yaiba",
@@ -10,16 +13,27 @@ preset_values = [
10
  "1girl, elaina (majo no tabitabi), majo no tabitabi"
11
  ]
12
 
13
- def search_parquet(search_term):
14
  try:
15
- df = pd.read_parquet(PARQUET_FILE)
16
- if search_term.strip():
17
- search_results = df[df['teks'].str.lower().str.contains(search_term.lower(), na=False)]
 
 
 
 
 
 
18
  else:
19
- search_results = df[df['teks'].str.lower().str.contains("|".join(preset_values).lower(), na=False)]
20
- if len(search_results.columns) > 12:
21
- search_results = search_results.iloc[:, :12]
22
- return search_results
 
 
 
 
 
23
  except FileNotFoundError:
24
  return pd.DataFrame({'Error': ['Parquet file not found. Please check the file path.']})
25
  except Exception as e:
@@ -27,7 +41,14 @@ def search_parquet(search_term):
27
 
28
  if __name__ == "__main__":
29
  with gr.Blocks() as app:
30
- gr.Markdown("## 🔍 Text Search for Animagine tag characters")
 
 
 
 
 
 
 
31
  with gr.Column():
32
  search_input = gr.Textbox(
33
  label="Search for characters or series:",
@@ -39,10 +60,22 @@ if __name__ == "__main__":
39
  headers="auto",
40
  )
41
 
 
42
  search_input.change(
43
- fn=search_parquet,
44
- inputs=search_input,
 
 
 
 
 
45
  outputs=search_output,
46
  )
 
 
 
 
 
 
47
 
48
  app.launch()
 
1
  import gradio as gr
2
  import pandas as pd
3
+ import duckdb
4
 
5
+ PARQUET_FILES = {
6
+ "Animagine XL 3.1": 'data.parquet',
7
+ }
8
 
9
  preset_values = [
10
  "1girl, kamado nezuko, kimetsu no yaiba",
 
13
  "1girl, elaina (majo no tabitabi), majo no tabitabi"
14
  ]
15
 
16
+ def search_data(search_term, selected_file, use_duckdb=False):
17
  try:
18
+ if use_duckdb:
19
+ con = duckdb.connect(database=':memory:', read_only=False)
20
+ con.execute(f"CREATE TABLE my_table AS SELECT * FROM read_parquet('{PARQUET_FILES[selected_file]}')")
21
+ if search_term.strip():
22
+ results = con.execute(f"SELECT * FROM my_table WHERE lower(teks) LIKE '%{search_term.lower()}%'").fetchdf()
23
+ else:
24
+ search_terms_sql = " OR ".join([f"lower(teks) LIKE '%{term.lower()}%'" for term in preset_values])
25
+ results = con.execute(f"SELECT * FROM my_table WHERE {search_terms_sql}").fetchdf()
26
+ con.close()
27
  else:
28
+ df = pd.read_parquet(PARQUET_FILES[selected_file])
29
+ if search_term.strip():
30
+ results = df[df['teks'].str.lower().str.contains(search_term.lower(), na=False)]
31
+ else:
32
+ results = df[df['teks'].str.lower().str.contains("|".join(preset_values).lower(), na=False)]
33
+
34
+ if len(results.columns) > 12:
35
+ results = results.iloc[:, :12]
36
+ return results
37
  except FileNotFoundError:
38
  return pd.DataFrame({'Error': ['Parquet file not found. Please check the file path.']})
39
  except Exception as e:
 
41
 
42
  if __name__ == "__main__":
43
  with gr.Blocks() as app:
44
+ gr.Markdown("## Text Search for Animagine tag characters")
45
+ with gr.Row(): #Menambahkan row untuk dropdown dan checkbox
46
+ file_dropdown = gr.Dropdown(
47
+ choices=list(PARQUET_FILES.keys()),
48
+ label="Select Parquet File",
49
+ value=list(PARQUET_FILES.keys())[0], # Default value
50
+ )
51
+ use_duckdb_checkbox = gr.Checkbox(label="Use DuckDB", value=True) # Checkbox untuk DuckDB, default true
52
  with gr.Column():
53
  search_input = gr.Textbox(
54
  label="Search for characters or series:",
 
60
  headers="auto",
61
  )
62
 
63
+ inputs = [search_input, file_dropdown, use_duckdb_checkbox] # Menambahkan input dropdown dan checkbox
64
  search_input.change(
65
+ fn=search_data,
66
+ inputs=inputs,
67
+ outputs=search_output,
68
+ )
69
+ file_dropdown.change( #Menambahkan event change untuk dropdown
70
+ fn=search_data,
71
+ inputs=inputs,
72
  outputs=search_output,
73
  )
74
+ use_duckdb_checkbox.change( #Menambahkan event change untuk checkbox
75
+ fn=search_data,
76
+ inputs=inputs,
77
+ outputs=search_output,
78
+ )
79
+
80
 
81
  app.launch()