openfree commited on
Commit
c83bfa7
·
verified ·
1 Parent(s): 0ae6f19

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -20
app.py CHANGED
@@ -2,8 +2,14 @@ import gradio as gr
2
  from datasets import load_dataset
3
  from rapidfuzz import process, fuzz
4
 
5
- # 1) 데이터셋 스트리밍 로드(메타만 메모리에 보관)
6
- ds = load_dataset("nyuuzyou/clker-svg", split="train", streaming=True)
 
 
 
 
 
 
7
 
8
  records = []
9
  for ex in ds:
@@ -17,50 +23,55 @@ for ex in ds:
17
  }
18
  )
19
 
 
20
  # 2) 검색 함수
21
- def search_svg(query, top_k):
22
- if not query:
 
23
  return "⚠️ 검색어를 입력하세요.", None
24
 
25
- # title+tags 스트링 하나로 결합
26
- choices = {i: r["title"] + " " + r["tags"] for i, r in enumerate(records)}
 
 
27
  matched = process.extract(
28
  query,
29
  choices,
30
  scorer=fuzz.WRatio,
31
- limit=top_k,
32
  )
33
 
34
- # Rapidfuzz 결과 → SVG HTML 변환
35
  html_snippets = []
36
- for idx, score, _ in matched:
37
  r = records[idx]
38
  svg_html = (
39
- f"<div style='border:1px solid #ddd;margin:8px;padding:8px'>"
40
  f"<strong>{r['title']}</strong> "
41
  f"(score {score})<br>"
42
  f"<em>{r['tags']}</em><br>"
43
  f"<a href='{r['url']}' target='_blank'>원본&nbsp;다운로드</a><br>"
44
- f"{r['svg']}" # raw SVG → 브라우저가 바로 렌더
45
- f"</div>"
46
  )
47
  html_snippets.append(svg_html)
48
 
49
  return "", "\n".join(html_snippets)
50
 
51
-
 
 
52
  with gr.Blocks(title="Clker SVG 검색") as demo:
53
  gr.Markdown("## 🔍 Clker.com SVG Public-Domain Clipart 검색")
54
  with gr.Row():
55
- query = gr.Textbox(label="검색어", placeholder="예: cat, tree, ")
56
- top_k = gr.Slider(1, 50, value=10, step=1, label="결과 개수")
57
- warn = gr.Markdown()
58
- out = gr.HTML()
59
 
60
- query.submit(
61
  fn=search_svg,
62
- inputs=[query, top_k],
63
- outputs=[warn, out],
64
  )
65
 
66
  if __name__ == "__main__":
 
2
  from datasets import load_dataset
3
  from rapidfuzz import process, fuzz
4
 
5
+ # ──────────────────────────────────────────────────────────
6
+ # 1) 데이터셋 로드 (스트리밍) 메모리에 메타만 저장
7
+ # ──────────────────────────────────────────────────────────
8
+ ds = load_dataset(
9
+ "nyuuzyou/clker-svg",
10
+ split="train",
11
+ streaming=True, # .jsonl.zst → 자동 스트리밍 해제
12
+ )
13
 
14
  records = []
15
  for ex in ds:
 
23
  }
24
  )
25
 
26
+ # ──────────────────────────────────────────────────────────
27
  # 2) 검색 함수
28
+ # ──────────────────────────────────────────────────────────
29
+ def search_svg(query: str, top_k: int):
30
+ if not query.strip():
31
  return "⚠️ 검색어를 입력하세요.", None
32
 
33
+ # choices: index(int) ➜ title+tags 문자열
34
+ choices = {i: f"{r['title']} {r['tags']}" for i, r in enumerate(records)}
35
+
36
+ # Rapidfuzz: (choice_text, score, key) 반환
37
  matched = process.extract(
38
  query,
39
  choices,
40
  scorer=fuzz.WRatio,
41
+ limit=int(top_k),
42
  )
43
 
 
44
  html_snippets = []
45
+ for _choice_text, score, idx in matched: # idx 가 실제 list 인덱스
46
  r = records[idx]
47
  svg_html = (
48
+ "<div style='border:1px solid #ddd;margin:8px;padding:8px'>"
49
  f"<strong>{r['title']}</strong> "
50
  f"(score {score})<br>"
51
  f"<em>{r['tags']}</em><br>"
52
  f"<a href='{r['url']}' target='_blank'>원본&nbsp;다운로드</a><br>"
53
+ f"{r['svg']}" # 브라우저가 즉시 SVG 렌더
54
+ "</div>"
55
  )
56
  html_snippets.append(svg_html)
57
 
58
  return "", "\n".join(html_snippets)
59
 
60
+ # ──────────────────────────────────────────────────────────
61
+ # 3) Gradio UI
62
+ # ──────────────────────────────────────────────────────────
63
  with gr.Blocks(title="Clker SVG 검색") as demo:
64
  gr.Markdown("## 🔍 Clker.com SVG Public-Domain Clipart 검색")
65
  with gr.Row():
66
+ query_box = gr.Textbox(label="검색어", placeholder="예: cat, tree, ...")
67
+ top_slider = gr.Slider(1, 50, value=10, step=1, label="결과 개수")
68
+ warning_md = gr.Markdown()
69
+ output_html = gr.HTML()
70
 
71
+ query_box.submit(
72
  fn=search_svg,
73
+ inputs=[query_box, top_slider],
74
+ outputs=[warning_md, output_html],
75
  )
76
 
77
  if __name__ == "__main__":