File size: 5,197 Bytes
ced22e1
 
a00ff89
ced22e1
 
4c32405
ced22e1
 
 
 
95a596a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
865820b
95a596a
a00ff89
 
 
 
77f27da
a00ff89
 
77f27da
a00ff89
 
77f27da
 
a00ff89
77f27da
 
a00ff89
 
 
 
 
 
 
 
 
865820b
a00ff89
 
865820b
a00ff89
865820b
a00ff89
865820b
a00ff89
865820b
 
a00ff89
 
77f27da
a00ff89
 
 
 
 
 
 
 
 
 
865820b
902d69b
 
 
865820b
a00ff89
 
 
 
 
77f27da
 
a00ff89
 
 
77f27da
 
 
 
 
 
 
 
a00ff89
 
 
 
 
 
902d69b
 
 
 
 
a0a65f3
902d69b
 
 
 
 
 
 
 
 
 
865820b
 
 
 
 
902d69b
 
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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.")