weasel-kampus / app.py
wykonos's picture
Upload app.py
d5671ea
raw
history blame
12.9 kB
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()