Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import pipeline | |
import time | |
# تحميل النموذج | |
classifier = pipeline("zero-shot-classification", model="cross-encoder/nli-distilroberta-base") | |
# عنوان التطبيق | |
st.title("Text Classification App") | |
# إدخال الملف النصي | |
uploaded_file = st.file_uploader("Upload a text file containing keywords", type=["txt"]) | |
if uploaded_file is not None: | |
# قراءة الملف النصي | |
content = uploaded_file.read().decode("utf-8") | |
keywords = [line.strip() for line in content.splitlines() if line.strip()] | |
# تحديد الفئات | |
categories = ["shopping", "gaming", "streaming"] | |
# قوائم لتخزين الكلمات حسب الفئة | |
shopping_words = [] | |
gaming_words = [] | |
streaming_words = [] | |
unknown_words = [] # قائمة جديدة للكلمات غير المعروفة | |
# متغيرات للتحكم في العملية | |
progress_bar = st.progress(0) | |
pause_button = st.button("Pause") | |
stop_button = st.button("Stop") | |
continue_button = st.button("Continue") # زر جديد للاستمرار | |
paused = False | |
stopped = False | |
current_index = 0 # مؤشر للكلمة الحالية | |
# دالة تصنيف الكلمات | |
def classify_keywords(keywords, categories, start_index=0): | |
global paused, stopped, current_index # استخدام المتغيرات العالمية | |
total_keywords = len(keywords) | |
for i, word in enumerate(keywords[start_index:], start=start_index): | |
current_index = i # تحديث المؤشر الحالي | |
if stopped: | |
break | |
if paused: | |
time.sleep(0.5) # توقف مؤقت عند الضغط على Pause | |
continue | |
# تصنيف الكلمة | |
result = classifier(word, categories) | |
best_category = result['labels'][0] | |
score = result['scores'][0] | |
# إضافة الكلمة إلى القائمة المناسبة | |
if best_category == "shopping" and score > 0.5: | |
shopping_words.append(word) | |
elif best_category == "gaming" and score > 0.5: | |
gaming_words.append(word) | |
elif best_category == "streaming" and score > 0.5: | |
streaming_words.append(word) | |
else: | |
unknown_words.append(word) # إضافة الكلمة إلى قائمة Unknown إذا لم تكن ضمن الفئات | |
# تحديث شريط التقدم | |
progress = (current_index + 1) / total_keywords | |
progress_bar.progress(progress) | |
# تحديث النتائج في الوقت الحقيقي | |
update_results() | |
# إبطاء العملية قليلاً للسماح بتحديث الواجهة | |
time.sleep(0.1) | |
# دالة تحديث النتائج | |
def update_results(): | |
# تحديث محتوى المربعات النصية باستخدام session_state | |
st.session_state.shopping_text = "\n".join(shopping_words) | |
st.session_state.gaming_text = "\n".join(gaming_words) | |
st.session_state.streaming_text = "\n".join(streaming_words) | |
st.session_state.unknown_text = "\n".join(unknown_words) | |
# زر البدء | |
if st.button("Start"): | |
stopped = False | |
paused = False | |
current_index = 0 # إعادة تعيين المؤشر إلى البداية | |
classify_keywords(keywords, categories, start_index=current_index) | |
# زر الإيقاف المؤقت | |
if pause_button: | |
paused = True | |
st.write("Classification paused.") | |
# زر الاستمرار | |
if continue_button and paused: | |
paused = False | |
st.write("Classification resumed.") | |
classify_keywords(keywords, categories, start_index=current_index) | |
# زر التوقف الكامل | |
if stop_button: | |
stopped = True | |
st.write("Classification stopped.") | |
# عرض النتائج مرة واحدة فقط (بدون إعادة إنشاء العناصر) | |
st.header("Shopping Keywords") | |
if 'shopping_text' not in st.session_state: | |
st.session_state.shopping_text = "" | |
st.text_area("Copy the shopping keywords here:", value=st.session_state.shopping_text, height=200, key="shopping") | |
st.header("Gaming Keywords") | |
if 'gaming_text' not in st.session_state: | |
st.session_state.gaming_text = "" | |
st.text_area("Copy the gaming keywords here:", value=st.session_state.gaming_text, height=200, key="gaming") | |
st.header("Streaming Keywords") | |
if 'streaming_text' not in st.session_state: | |
st.session_state.streaming_text = "" | |
st.text_area("Copy the streaming keywords here:", value=st.session_state.streaming_text, height=200, key="streaming") | |
st.header("Unknown Keywords") | |
if 'unknown_text' not in st.session_state: | |
st.session_state.unknown_text = "" | |
st.text_area("Copy the unknown keywords here:", value=st.session_state.unknown_text, height=200, key="unknown") | |
else: | |
st.warning("Please upload a text file to classify the keywords.") |