Spaces:
Sleeping
Sleeping
File size: 3,368 Bytes
2d3d204 e55d602 a5df267 6b5510a d614bf3 2d3d204 be7a474 4df506e be3fb9f be7a474 2d3d204 4df506e be7a474 be3fb9f 2d3d204 be7a474 a5df267 be7a474 e55d602 49fbc47 a5df267 49fbc47 a7a856a 6b5510a 7c1708f 6b5510a a7a856a be7a474 2d3d204 |
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 |
import pandas as pd
from collections import Counter
import gradio as gr
import openpyxl
from openpyxl.drawing.image import Image # 이미지 삽입을 위한 모듈
import os # 경로 확인 및 생성용
import re # 특수문자 제거를 위한 정규식 사용
def clean_text(text):
# 정규식을 사용하여 특수문자를 제거하되, '-'와 '+'는 제외
return re.sub(r'[^\w\s\-\+]', '', text)
def extract_keywords(file):
# 엑셀 파일 읽기
df = pd.read_excel(file, engine='openpyxl', header=None) # 첫 번째 행을 헤더로 사용하지 않음
# 열 이름 확인
print("엑셀 열 이름:", df.columns)
# 상품명 열에서 D4부터 끝까지 텍스트 추출 (D 열은 index 3이므로 df[3] 사용)
product_names = df[3][3:] # D4 셀부터 시작하는 데이터 추출
keywords = []
for name in product_names:
if pd.notna(name): # NaN 값 체크
clean_name = clean_text(name) # 특수문자 제거
words = clean_name.split(" ") # 공백 기준으로 단어 분리
keywords.extend(words)
# 키워드 빈도수 계산
keyword_count = Counter(keywords)
# 데이터프레임으로 변환
result_df = pd.DataFrame(keyword_count.items(), columns=['키워드', '빈도수'])
# 빈도수 기준으로 내림차순 정렬
result_df = result_df.sort_values(by='빈도수', ascending=False).reset_index(drop=True)
# 파일 저장 경로 설정
output_dir = "results"
output_path = os.path.join(output_dir, "키워드_분석_결과_with_logo.xlsx")
# 디렉토리 존재 여부 확인 및 생성
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 새로운 엑셀 파일 생성 및 이미지 삽입
with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
# 엑셀의 첫 3줄을 비워두기 위해 행 인덱스를 3칸 내림
result_df.to_excel(writer, index=False, startrow=3)
workbook = writer.book
worksheet = workbook.active
# 이미지 파일 불러오기 (실제 이미지 경로 지정)
logo_path = "ssboost-logo.png" # 실제 이미지 파일 경로
if os.path.exists(logo_path):
img = Image(logo_path)
# 이미지 크기 조정 (width=140, height=40)
img.width = 140 # 너비 설정
img.height = 40 # 높이 설정
# A1 셀에 이미지 삽입
worksheet.add_image(img, "A1")
else:
print("이미지 파일을 찾을 수 없습니다:", logo_path)
return result_df, output_path
def keyword_analysis_interface(file):
result_df, output_path = extract_keywords(file)
return result_df, output_path
# Gradio 인터페이스 설정
interface = gr.Interface(
fn=keyword_analysis_interface,
inputs=gr.File(label="엑셀 파일 업로드"),
outputs=[gr.Dataframe(headers=["키워드", "빈도수"]), gr.File(label="결과 엑셀 파일 다운로드")],
title="키워드 빈도수 분석기",
description="업로드된 엑셀 파일에서 상품명에 대한 키워드를 분석하여 빈도수를 계산하고 엑셀 파일로 결과를 제공합니다."
)
if __name__ == "__main__":
interface.launch()
|