Kims12 commited on
Commit
da3ce18
Β·
verified Β·
1 Parent(s): 731095c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -0
app.py CHANGED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import re
4
+ from io import BytesIO
5
+
6
+ def process_excel(file_bytes):
7
+ """
8
+ μ—…λ‘œλ“œλœ μ—‘μ…€ νŒŒμΌμ—μ„œ D4μ…€λΆ€ν„° Dμ—΄μ˜ μƒν’ˆλͺ…을 μΆ”μΆœν•˜μ—¬,
9
+ 각 μ…€μ—μ„œ 특수문자λ₯Ό μ œκ±°ν•œ ν›„ 곡백 κΈ°μ€€μœΌλ‘œ ν‚€μ›Œλ“œλ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.
10
+ ν•œ μ…€ λ‚΄μ—μ„œ μ€‘λ³΅λœ ν‚€μ›Œλ“œλŠ” ν•œ 번만 μΉ΄μš΄νŠΈν•˜κ³ , 전체 셀에 λŒ€ν•΄
11
+ ν‚€μ›Œλ“œμ˜ λΉˆλ„λ₯Ό κ³„μ‚°ν•˜μ—¬ μ—‘μ…€ 파일둜 μ €μž₯ν•©λ‹ˆλ‹€.
12
+ """
13
+ try:
14
+ # μ—…λ‘œλ“œλœ νŒŒμΌμ„ μ½μ–΄μ˜΅λ‹ˆλ‹€. 헀더가 μ—†λŠ” μƒνƒœλ‘œ 전체 데이터λ₯Ό λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.
15
+ df = pd.read_excel(BytesIO(file_bytes), header=None, engine="openpyxl")
16
+ except Exception as e:
17
+ return "μ—‘μ…€ νŒŒμΌμ„ μ½λŠ” 쀑 였λ₯˜κ°€ λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€: " + str(e)
18
+
19
+ # μ—‘μ…€ 파일의 ν˜•μ‹μ΄ μ˜¬λ°”λ₯Έμ§€ 확인 (μ΅œμ†Œ 4μ—΄, μ΅œμ†Œ 4ν–‰)
20
+ if df.shape[1] < 4 or df.shape[0] < 4:
21
+ return "μ—‘μ…€ 파일의 ν˜•μ‹μ΄ μ˜¬λ°”λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."
22
+
23
+ # Dμ—΄(4번째 μ—΄, 인덱슀 3)μ—μ„œ 4ν–‰(인덱슀 3)λΆ€ν„° 데이터λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
24
+ product_names_series = df.iloc[3:, 3]
25
+ product_names_series = product_names_series.dropna()
26
+
27
+ keyword_counts = {}
28
+ for cell in product_names_series:
29
+ # λ¬Έμžμ—΄μ΄ μ•„λ‹Œ 경우 λ¬Έμžμ—΄λ‘œ λ³€ν™˜
30
+ if not isinstance(cell, str):
31
+ cell = str(cell)
32
+ # 특수문자 제거 (숫자, 영문, ν•œκΈ€, 곡백을 μ œμ™Έν•œ λͺ¨λ“  문자 제거)
33
+ cleaned = re.sub(r'[^0-9a-zA-Zκ°€-힣\s]', '', cell)
34
+ # 곡백 κΈ°μ€€μœΌλ‘œ λΆ„λ¦¬ν•˜μ—¬ ν‚€μ›Œλ“œ μΆ”μΆœ
35
+ keywords = cleaned.split()
36
+ # ν•˜λ‚˜μ˜ μ…€μ—μ„œλŠ” 쀑볡 ν‚€μ›Œλ“œλ₯Ό 제거
37
+ unique_keywords = set(keywords)
38
+ for keyword in unique_keywords:
39
+ keyword_counts[keyword] = keyword_counts.get(keyword, 0) + 1
40
+
41
+ # ν‚€μ›Œλ“œλ₯Ό λΉˆλ„ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ (λΉˆλ„κ°€ κ°™μœΌλ©΄ ν‚€μ›Œλ“œ μ˜€λ¦„μ°¨μˆœ)
42
+ sorted_keywords = sorted(keyword_counts.items(), key=lambda x: (-x[1], x[0]))
43
+
44
+ # κ²°κ³Όλ₯Ό DataFrame으둜 생성 (A1μ…€: ν‚€μ›Œλ“œ, B1μ…€: λΉˆλ„)
45
+ result_df = pd.DataFrame(sorted_keywords, columns=["ν‚€μ›Œλ“œ", "λΉˆλ„"])
46
+
47
+ # μ—‘μ…€ 파일둜 κ²°κ³Όλ₯Ό 좜λ ₯ (A1, B1 셀에 헀더 μΆ”κ°€)
48
+ output = BytesIO()
49
+ try:
50
+ with pd.ExcelWriter(output, engine="openpyxl") as writer:
51
+ # 헀더 없이 A2μ…€λΆ€ν„° 데이터 μ €μž₯
52
+ result_df.to_excel(writer, index=False, startrow=1, header=False)
53
+ worksheet = writer.sheets["Sheet1"]
54
+ # A1μ…€κ³Ό B1셀에 헀더 μž‘μ„±
55
+ worksheet.cell(row=1, column=1, value="ν‚€μ›Œλ“œ")
56
+ worksheet.cell(row=1, column=2, value="λΉˆλ„")
57
+ output.seek(0)
58
+ except Exception as e:
59
+ return "μ—‘μ…€ νŒŒμΌμ„ μƒμ„±ν•˜λŠ” 쀑 였λ₯˜κ°€ λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€: " + str(e)
60
+
61
+ # μƒμ„±λœ μ—‘μ…€ 파일의 λ°”μ΄νŠΈ 데이터λ₯Ό λ°˜ν™˜ (λ‹€μš΄λ‘œλ“œ κ°€λŠ₯)
62
+ return output.getvalue()
63
+
64
+ # κ·ΈλΌλ””μ˜€ μΈν„°νŽ˜μ΄μŠ€ 생성
65
+ iface = gr.Interface(
66
+ fn=process_excel,
67
+ inputs=gr.File(label="μ—‘μ…€ 파일 μ—…λ‘œλ“œ"),
68
+ outputs=gr.File(label="κ²°κ³Ό μ—‘μ…€ 파일"),
69
+ title="μ—‘μ…€ μƒν’ˆλͺ… ν‚€μ›Œλ“œ μΆ”μΆœ 및 λΉˆλ„ 뢄석",
70
+ description=(
71
+ "μ—‘μ…€ 파일의 D4μ…€λΆ€ν„° D열에 μžˆλŠ” μƒν’ˆλͺ… 데이터λ₯Ό λΆ„μ„ν•˜μ—¬, "
72
+ "특수문자λ₯Ό μ œκ±°ν•œ ν›„ 곡백 κΈ°μ€€μœΌλ‘œ ν‚€μ›Œλ“œλ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€. "
73
+ "ν•œ μ…€ λ‚΄μ—μ„œ μ€‘λ³΅λœ ν‚€μ›Œλ“œλŠ” ν•œ 번만 μΉ΄μš΄νŠΈν•˜λ©°, μ΅œμ’…μ μœΌλ‘œ ν‚€μ›Œλ“œμ™€ λΉˆλ„λ₯Ό "
74
+ "λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ¦¬ν•œ κ²°κ³Όλ₯Ό μ—‘μ…€ 파일둜 좜λ ₯ν•©λ‹ˆλ‹€."
75
+ )
76
+ )
77
+
78
+ iface.launch()