Günümüzde aradığımız birçok kaynak internette kolaylıkla bulunabilmektedir. Bu da bilgi fazlalığı ve çok fazla bilgi arasında kaybolmaya sebep olmaktadır. Bu nedenle metin özetleme uygulaması geliştirilmesine karar verilmiştir. Metin özetleme uygulamasında doğal dil işleme algoritmaları kullanılacaktır. Uygulama sayesinde bulunan kaynaklardaki çok uzun metinler özetlenebilecektir. Özetlenen metin içeriği okunarak aranan bilginin metin içerisine yer alıp almadığı kolaylıkla anlaşılabilecektir. İnternette literatür taraması ve kaynak taraması yapılırken hangi kaynakların incelenebileceğinin seçiminde kolaylık sağlayacaktır. Metin özetleme çalışmalarının örnekleri birçok kaynakta mevcuttur. Bu yüzden projeye özgünlük kazandırmak adına özgün bir ara yüz tasarımı yapılacaktır. Uygulama ara yüz üzerinden girilen metnin özetini bize yine ara yüz aracılığı ile gösterecektir. Projenin geliştirilme süresine bağlı olarak imkân olursa uygulama, ara yüze belirli formatlarda dosya eklenebilmesi ve dosyaların özetinin çıkarılması şeklinde revize edilecektir.
Projenin geliştirilmesindeki amaç insanların bir bilgiye ulaşmak için doğru kaynak ararken çok zaman harcamalarını engellemektir. Metin özetleme ile uzun metinler ve akademik çalışmaların kısa bir özeti elde edilecektir. Elde edilen özet incelenerek istenilen bilginin o çalışmada bulunup bulunmadığı anlaşılacaktır. Bu şekilde kaynak ve literatür taramasında harcanılan zamandan tasarruf edilecektir. Projedeki temel amaç zamandan tasarruf etmektir. Projenin bir diğer hedefi, kullanıcılara kullanışlı bir ara yüz sunmaktır. Ara yüz kullanımının basit olması kullanım kolaylığı sağlayacaktır.
Algoritmanın geliştirilme aşamasında Python programlama dili kullanılacaktır. Python, nesne yönelimli, yorumlamalı, birimsel, etkileşimli ve yüksek seviyeli bir programlama dilidir. Python programlama dili ile algoritmayı kodlamak için Visual Studio Code ortamı kullanılacaktır. Visual Studio Code, içerisinde birçok eklentiyi barındıran, çapraz platformlarda çalışabilen ve birçok programlama dili (C, C#, Java, Python, PHP ve Go) desteği olan tam özellikli bir kod editörüdür. Visual Studio Code, hata ayıklama, gömülü Git kontrolü, sözdizimi vurgulama, akıllı kod tamamlama, snippet’ler ve kodu yeniden yapılandırma desteği içerir. Uygulamada kullanılacak ara yüz için pyqt5 kullanılacaktır. Pyqt, bir Python eklentisi olarak uygulanan platformalar arası GUI araç seti Qt’nin bir Python bağlantısıdır.
Proje geliştirilirken öncelikle bir veri setinin gerekli olup olmadığı araştırılmıştır. Yapılan araştırmalar sonucunda veri setine gerek duyulmadığı anlaşılmıştır. Projede kullanılacak ara yüz için pyqt5 [3] kütüphanesi kurulumu gerçekleştirilmiştir. Kurulum aşaması ve kullanılan komut Şekil 1’de görülmektedir.
Şekil 1: Pyqt5 kurulumu
Pyqt5 kurulumu gerçekleştirildikten sonra metin üzerinde işlemler yapılmasını sağlayan ntlk [4] kütüphanesi kurulumu ve internet üzerinden veri çekerken kullanılacak beautifulsoup [5] kütüphanesi kurulumu gerçekleştirilmiştir. Gerekli kurulumlar gerçekleştirildikten sonra ilk olarak metin özetleme fonksiyonu üzerinde çalışılmıştır. Sonrasında ara yüz oluşturulmuştur ve özetleme fonksiyonu ile ara yüz birleştirilmiştir. Projede metin özetleme kısmında iki seçenek bulunmaktadır. Wikipedia sitesinde istenilen konuda bir metin üzerinde özetleme gerçekleştirilebilmektedir. Özetlenmesi istenilen konunun url adresi belirtilerek buradan çekilen konu ile ilgili metin özetleme algoritmasına verilerek özetlenecektir. Şekil 2’de verilerin çekilmesi ve özetlenecek metin formatına getirilmesi görülmektedir.
Şekil 2: Verilerin çekilmesi ve istenilen formata getirilmesi
Veriler çekildikten sonra wikipedia metinlerinde bulunan referans numaraları kaldırılmıştır. Metindeki cümleler ayrıştırılmıştır ve bir liste yapısında tutulmuştur. Sonrasında kelimelerin tekrar sayılarını bulmak için metinlerde bulunan noktalama işaretleri kaldırılmıştır. Şekil 3’te bu işlemlerin sırası ile yapıldığı görülmektedir.
Şekil 3: Veri ön işleme adımları
Noktalama işaretlerinin kaldırıldığı ve sadece kelimelerden oluşan metin üzerinden kelimelerin tekrar etme sayıları bir sözlük yapısında tutulmuştur. En çok tekrar eden kelimenin tekrar sayısı elde edilmiştir. Bu maksimum tekrar sayısı tüm kelimelerin tekrar sayılarına tek tek bölünerek ağırlıklı sıklık değeri elde edilmiştir. Sonrasında bu değerler cümle puanlamaları yapmak için kullanılacaktır. Yapılan işlemlere ait kod blokları Şekil 4’te görülmektedir.
Şekil 4: Kullanılacak değerlerin elde edilmesi
Elde edilen metindeki cümleler ayrılıp bir cümle listesinde tutulmuştur. Cümlelerin bulunduğu liste for döngüsü ile gezilerek her bir cümle tek tek ele alınmıştır sonrasında bu cümlelerdeki kelimeler yine for döngüsü ile ayrıştırılmıştır. Sonrasında cümlelerde bulunan kelimeler oluşturulan kelime tekrarı sözlüğünde bulunuyorsa bu cümlelerin puanı hesaplanmıştır. Cümlelerdeki kelimeler boşluklara göre ayrılmıştır ve bu kelimeler kelime tekrarlarının bulunduğu sözlük yapısında mevcut ise buradaki frekans değerleri eklenmiştir mevcut değil ise başlangıç olarak 1 değeri atanmıştır. Şekil 5’te yapılan cümle puanlarının hesaplanması görülmektedir.
Şekil 5: Cümle puanlarının hesaplanması
Hesaplanan cümle puanlarından en yüksek puana sahip n adet cümle alınarak özetleme işlemi bitiriliyor. Kaç adet cümle alınacağı isteğe göre belirlenebilir. Şekil 6’da en yüksek puana sahip ilk 7 cümlenin alındığı görülmektedir. Daha sonra bu cümleler birleştirilerek bir özet metin oluşturulmuştur.
Şekil 6: Özetlenen cümlelerin birleştirilmesi ve özet metnin oluşturulması
Özetlenen metin kayıt altına alınması ve tutulması için bir txt dosyasına yazdırılmıştır. Şekil 7’de bu işlem görülmektedir.
Şekil 7: Özetlenen metnin txt formatında kayıt edilmesi
Metin özetleme algoritmaları bittikten sonra ara yüz tasarımına geçilmiştir. Ara yüz tasarımın Qt Designer kullanılmıştır. Şekil 8’de ara yüz uygulamalarının oluşturulma aşaması görülmektedir. Qt Designer kullanılarak oluşturulan ara yüz dosyası, python dosyası haline çevrilerek metin özetleme fonksiyonları dâhil edilmiştir. Şekil 9’da .ui uzantılı tasarım dosyasının python dosyasına dönüşümü görülmektedir.
Şekil 8: Ara yüz oluşturulma aşaması
Şekil 9: .ui dosyasının .py dosyasına dönüşümü
Kullanıcı hangi tür metin özetlemek istediğini seçim ekranı aracılığıyla seçebilmektedir. Bu seçimlere göre kullanıcının hizmetine iki ayrı pencere açılmaktadır.
Şekil 10: Seçim ekranı
Kullanıcı wikipedia seçeneğini seçtiğinde url girilmesi gereken bir kısım gelmektedir. Girilen url adresindeki metnin özetlenmiş hali özet metin kutusunda görülecektir. Wikipedia için geliştirilen ara yüz ve kullanımı Şekil 11’de görülmektedir.
Şekil 11: Wikipedia için geliştirilen ara yüz ve kullanımı
Kullanıcının istediği herhangi bir metni girmesi ve bu metnin özetlenmesi için bir de metin ara yüzü oluşturulmuştur. Şekil 12’de kullanıcıdan alınan metin özetlenmiştir.
Şekil 12: Kullanıcıdan alınan metnin özetlenmesi
Ara yüz üzerindeki wikipedia ve kullanıcı metinlerinin özetlenmiş hallerinin kayıt edilmesi ve kaybolmaması için özetler txt formatında tutulmuştur. Şekil 13’ de görülmektedir.
Şekil 13: Özet metinlerin txt formatında tutulması
[1] Metin Özetleme Algoritmaları. Available: https://mgminsights.com/2021/05/09/nlpde-metin-ozetleme-algoritmalari/
[2] Text Summarization. Available: https://www.projectpro.io/article/text-summarization-python-nlp/546
[3] PyQT5. Available: https://pypi.org/project/PyQt5/
[4] NLTK Library. Available: https://www.nltk.org/
[5] Beatiful Soup Library. Available: https://pypi.org/project/beautifulsoup4/