File size: 12,853 Bytes
2c7c41d
 
 
 
 
 
 
8bd74f4
2c7c41d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d5671ea
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
import gradio as gr
import nltk
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC

nltk.download('punkt')
# Örnek veri: Cümleleri ve etiketleri (normal: 0, düşük: 1, uzun: 2)
sentences = [
    "Yazılım geliştirme sürecinde, düzenli kodlama pratikleri önemlidir.",
    "Test odaklı geliştirme, güvenilir yazılım oluşturmak için etkili bir yaklaşımdır.",
    "Yeni proje için gereksinimleri toplamak ve analiz etmek ilk adımdır.",
    "Kod incelemeleri, hataları erken aşamada tespit etmek için kullanışlıdır.",
    "Veritabanı tasarımı, veri bütünlüğü ve performansı optimize etmek için önemlidir.",
    "Agile metodolojiler, proje yönetimini esnek ve verimli hale getirir.",
    "Bir sorunu çözmek için önce onu anlamak önemlidir.",
    "Open-source kütüphaneleri, geliştirme sürecini hızlandırabilir.",
    "Yazılım güvenliği, kullanıcı verilerini korumak için vazgeçilmezdir.",
    "Sürüm kontrol sistemi, ekip üyeleri arasında işbirliğini kolaylaştırır.",
    "Yazılım arayüzleri, kullanıcı deneyimini iyileştirmek için önemlidir.",
    "Bir proje başlamadan önce, detaylı bir proje planı oluşturmak faydalıdır.",
    "Yazılım hatalarını düzeltmek için hata ayıklama teknikleri kullanılır.",
    "Performans iyileştirmeleri, yazılımın tepkime süresini artırabilir.",
    "Geliştiriciler arasında bilgi paylaşımı yapmak, verimliliği artırabilir.",
    "Kod tekrarını önlemek için fonksiyonel programlama teknikleri kullanılabilir.",
    "Geliştirme sürecinde belgeleme yapmak, projenin sürdürülebilirliğini sağlar.",
    "Yazılım mimarisi, sistemin genel yapısını tasarlamak için kullanılır.",
    "Veri yapıları, veri yönetimi ve işlemlerini kolaylaştırır.",
    "Geliştirme ekibiyle düzenli olarak toplantılar yapmak işbirliğini artırır.",
    "Geliştirme aşamasında kullanıcı geribildirimleri almak değerlidir.",
    "Kodun okunabilir olması, bakım sürecini kolaylaştırır.",
    "Yazılımın farklı platformlarda çalışabilirliği önemlidir.",
    "Güvenlik açıklarını önlemek için güvenlik testleri yapılmalıdır.",
    "Ekip üyeleri arasında kod incelemeleri yapmak kaliteyi artırır.",
    "Yazılım güncellemeleri, yeni özellikler eklemek ve hataları düzeltmek için yapılır.",
    "Kodun modüler olması, kodun yeniden kullanılabilirliğini artırır.",
    "Yazılım tasarım desenleri, yaygın sorunları çözmek için kullanılabilir.",
    "Veritabanı yedeklemeleri, veri kaybını önlemek için düzenli olarak yapılmalıdır.",
    "Geliştirme sürecinde zaman yönetimi önemlidir.",
    "Yazılım hatalarını raporlamak ve takip etmek için bir izleme sistemi kullanılabilir.",
    "Kod kalitesini sağlamak için otomatik kod analiz araçları kullanılabilir.",
    "Kullanıcı dostu arayüzler, yazılımın kullanılabilirliğini artırır.",
    "Geliştirme sürecinde prototipler oluşturmak, tasarım kararlarını doğrulamak için faydalıdır.",
    "Yazılımın performansını ölçmek için test senaryoları oluşturulabilir.",
    "Proje süresince düzenli olarak ilerleme raporları vermek, paydaşları bilgilendirmek için önemlidir.",
    "Veri güvenliği, hassas verilerin korunması için öncelikli olmalıdır.",
    "Yazılım belgelemesi, proje sırasında ve sonrasında faydalıdır.",
    "Ekip üyeleri arasında düzenli olarak geri bildirimler almak, performansı artırır.",
    "Yazılımın kullanıcı ihtiyaçlarına uygun olması önemlidir.",
    "Kodun test edilebilir olması, hataların erken tespit edilmesini sağlar.",
    "Büyük projelerde paralel çalışma, verimliliği artırmak için kullanışlıdır.",
    "Yazılımın bakım süreci, yazılımın ömrünü uzatır.",
    "Bu ödevin yapılması oldukça uzun bir zaman aldı.",
    "Kompleks projelerin tamamlanması genellikle zaman alır.",
    "Veri analizi, büyük veri kümeleriyle uzun sürebilir.",
    "Veri analizi için etkili veri görselleştirme araçları kullanılmalıdır.",
    "Yazılım hatalarını bulmak için hata izleme sistemleri kullanışlıdır.",
    "Büyük projelerde proje yönetimi planlama sürecini önemlidir.",
    "Yazılım güncellemeleri, güvenlik açıklarını gidermek için yapılmalıdır.",
    "Kullanıcı deneyimini artırmak için kullanıcı araştırmaları yapılmalıdır.",
    "Yazılım uygulamalarında veri tabanlı kararlar almak için veri analitiği kullanılmalıdır.",
    "Geliştirme ekibi, kodlama standartlarını belirlemek için birlikte çalışmalıdır.",
    "Yazılımın performansını artırmak için kod optimizasyonu yapılmalıdır.",
    "Yeni teknolojileri takip etmek, yazılım geliştirmede rekabet avantajı sağlar.",
    "Yazılım güvenliği için düzenli güvenlik açıkları taramaları yapılmalıdır.",
    "Proje için kullanılacak teknolojilerin risk analizi yapılmalıdır.",
    "Yazılımın kullanıcı dostu olması için kullanılabilirlik testleri yapılmalıdır.",
    "Veri güvenliğini sağlamak için şifreleme teknikleri kullanılmalıdır.",
    "Yazılımın gelecekteki ihtiyaçlara adapte olabilmesi için esnek tasarlanmalıdır.",
    "Kod kalitesini artırmak için sık sık kod incelemeleri yapılmalıdır.",
    "Yazılım süreçlerini iyileştirmek için sürekli iyileştirme yapılmalıdır.",
    "Proje yönetimi sürecinde riskler belirlenmeli ve yönetilmelidir.",
    "Yazılımın verimliliğini artırmak için paralel hesaplama yöntemleri kullanılmalıdır.",
    "Kullanıcı ihtiyaçlarını anlamak için kullanıcı görüşmeleri düzenlenmelidir.",
    "Yazılımın ölçeklenebilir olması, gelecekteki büyüme için önemlidir.",
    "Veri güvenliği için kullanıcı yetkilendirmesi ve kimlik doğrulama kullanılmalıdır.",
    "Yazılım projesinin çıkış sürecini belirlemek, hedeflere ulaşmak için kritik öneme sahiptir.",
    "Kapsamlı bir yazılım test stratejisi oluşturmak, yazılımın güvenilirliğini artırır.",
    "Büyük veri setlerini işlemek için veri paralelleştirmesi yapmak, işlem sürelerini önemli ölçüde azaltır.",
    "Karmaşık yazılım projelerinde, proje ekibi ile sık sık proje ilerlemesini değerlendirmek önemlidir.",
    "Uzun süren geliştirme projelerinde, proje ekibi arasında etkili iletişim ve işbirliği sağlanmalıdır.",
    "Güvenlik açıklarını önlemek için düzenli olarak yazılım penetrasyon testleri yapılmalıdır.",
    "Büyük ölçekli yazılım projelerinde proje planlaması ve kaynak yönetimi kritik öneme sahiptir.",
    "Kullanıcı ihtiyaçlarını anlamak için kullanıcıların gerçek kullanım senaryoları incelenmelidir.",
    "Yazılım tasarımında kullanılacak mimari desenlerinin avantajları ve dezavantajları değerlendirilmelidir.",
    "Yazılım hatalarını tespit etmek için otomasyon araçları kullanılmalı ve test kapsamı genişletilmelidir.",
    "Kodlama standartları önemlidir.",
    "Yazılım güncellemeleri yapılmalıdır.",
    "Veritabanı tasarımı önemlidir.",
    "Test senaryoları oluşturulabilir.",
    "Kullanıcı geribildirimleri değerlidir.",
    "Yazılımın performansı ölçülmeli.",
    "Ekip üyeleriyle toplantılar yapılmalı.",
    "Sürüm kontrol sistemi kullanılmalıdır.",
    "Kod incelemeleri yapılmalıdır.",
    "Veri güvenliği öncelikli olmalıdır.",
    "Yapay zeka, makine öğrenimi ve derin öğrenmenin birleşimidir.",
    "Büyük veri, büyük miktarda verinin toplanması, depolanması ve analiz edilmesidir.",
    "Bulut bilişim, internet üzerinden yazılım, donanım ve depolama hizmetlerinin sağlanmasıdır.",
    "Nesnelerin interneti (IoT), nesnelerin birbiriyle iletişim kurabilmesi ve veri alışverişi yapabilmesidir.",
    "Siber güvenlik, bilgisayar sistemleri ve ağların kötü amaçlı yazılımlardan, saldırılardan ve diğer tehditlerden korunmasıdır.",
    "Yapay zeka, makineler tarafından akıllı davranışın taklit edilmesidir.",
    "Büyük veri, büyük miktarda verinin toplanması, depolanması ve analiz edilmesidir.",
    "Nesnelerin interneti (IoT), nesnelerin birbiriyle iletişim kurabilmesi ve veri alışverişi yapabilmesidir.",
    "Siber güvenlik, bilgisayar sistemleri ve ağların kötü amaçlı yazılımlardan, saldırılardan ve diğer tehditlerden korunmasıdır.",
    "Yapay zeka, makine öğrenimi ve derin öğrenmenin birleşimidir.",
    "Makine öğrenimi, makinelerin deneyimlerden öğrenmesi ve kendi başlarına karar verebilmesidir.",
    "Derin öğrenme, nöral ağların kullanılarak makinelerin karmaşık görevleri öğrenmesidir.",
    "Büyük veri, geleneksel veri işleme yöntemleriyle işlenemeyen büyük miktarda veriden oluşur.",
    "Bulut bilişim, internet üzerinden yazılım, donanım ve depolama hizmetlerinin sağlanmasıdır."
]

labels = [0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1,
          1, 0, 1, 0, 2, 2, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1,
          0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0]
min_length = min(len(sentences), len(labels))
sentences = sentences[:min_length]
labels = labels[:min_length]


def train_classifier(sentences, labels):
    vectorizer = TfidfVectorizer()
    X = vectorizer.fit_transform(sentences)
    X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=45)
    svm_classifier = LinearSVC(dual=False)
    svm_classifier.fit(X_train, y_train)
    predictions = svm_classifier.predict(X_test)
    accuracy = accuracy_score(y_test, predictions)
    return svm_classifier, vectorizer


classifier, vectorizer = train_classifier(sentences, labels)
weasel_words = ['bazı', 'biraz', 'azımsanamayacak kadar', 'muhtemelen', 'neredeyse', 'birtakım', 'oldukça',
                'çok sayıda', 'esas olarak', 'çoğunlukla', 'nadir', 'bazen', 'büyük ölçüde', 'hemen hemen her zaman',
                'yaklaşık olarak', 'birkaç', 'yaklaşık', 'potansiyel', 'muhtemel', 'genellikle', 'sıklıkla', 'belirli',
                'çoğu zaman', 'çoğu', 'belirgin', 'büyük olasılıkla', 'sık sık', 'bir miktar', 'çok',
                'bir dereceye kadar', 'pek çok', 'kısmen', 'belki', 'bilinmeyen', 'genelde', 'genel olarak',
                'hemen hemen', 'şüpheli', 'bazı durumlarda', 'kesin olmamakla birlikte', 'tipik', 'bazıları',
                'bir kısmı', 'pek', 'iddia edilen', 'tamamen', 'birçok', 'çoğunluk', 'çoğu', 'şüphesiz', 'tam olarak']


def classify_sentence(sentence):
    example_sentences = nltk.sent_tokenize(sentence)
    sentence_predictions = []

    for sent in example_sentences:
        example_vector = vectorizer.transform([sent])
        prediction = classifier.predict(example_vector)
        sentence_predictions.append(prediction[0])

    results = []
    for i, sent_pred in enumerate(sentence_predictions):
        weasel_words_found = [word for word in weasel_words if word in example_sentences[i]]
        if sent_pred == 0:
            sentence_info = "Normal bir cümle"
        elif sent_pred == 1:
            sentence_info = "Düşük veya kısa bir cümle"
        else:
            sentence_info = "Uzun bir cümle"

        if weasel_words_found:
            weasel_word_text = ', '.join(weasel_words_found)
            results.append(f"Sentence {i + 1}: {sentence_info}. Anlam bozucu kelimeler: {weasel_word_text}")
        else:
            results.append(f"Sentence {i + 1}: {sentence_info}")

    return results


gr_interface = gr.Interface(
    fn=classify_sentence,
    inputs=gr.Textbox(label="Metni girin", lines=6, show_copy_button=True),
    outputs=gr.Textbox(label="Sonuçlar", show_copy_button=True),
    live=True,
    title="Cümle Sınıflandırma Uygulaması",
    description="Bu uygulama, verilen metni cümlelere böler ve her bir cümleyi normal, düşük veya uzun olarak sınıflandırır. Eğer cümle içerisinde anlam bozucu kelimelerden biri varsa, sonuçlarda belirtilir.",
    examples=[
        ["Bu bir test cümlesi."],
        ["Burada birkaç cümle var. Bu cümlelerin bazıları uzun, bazıları kısa."],
        ["Bu cümlede anlam bozucu bazı kelimeler var."],
        [
            "Yazılım uygulamaları arasında iletişimi sağlayan bir arayüzdür. Uygulamanın diğer uygulamalarla veri alışverişinde bulunmasını veya işlevlerini paylaşmasını mümkün kılar."]
    ]
)

gr_interface.launch()