Yazan: Şadi Evren ŞEKER

Verilen bir dizilimdeki (sequence) tekrar oranını bulmaya yarayan yöntemdir. İsmi n ve gram kelimelerinin birleşiminden oluşmaktadır. Buradaki n, tekrarın kontrol edildiği değerdir. Gram ise bu tekrarın dizilim içerisindeki ağrılığını ifade etmek için kullanılmıştır.

Örneğin bir dizgi (string) içerisindeki n-gram değerini bulmak isteyelim ve buradaki n değeri 2 olsun (n = 2)

“wwwbilgisayarkavramlaricomsadievrenseker”

Yukarıdaki yazının 2-gram değerleri aşağıda verilmiştir:

ww 2 ka 1 ad 1
wb 1 av 1 di 1
bi 1 vr 2 ie 1
il 1 ra 1 ev 1
lg 1 am 1 re 1
gi 1 ml 1 en 1
is 1 la 1 ns 1
sa 2 ri 1 se 1
ay 1 ic 1 ek 1
ya 1 co 1 ke 1
ar 2 om 1 er 1
rk 1 ms 1

 

Yukarıdaki değerler üzerinde çalıştığımız dizginin (string) 2şer komşuluktaki alt kümesidir.

Benzer şekilde aynı dizginin 3-gram değerleri aşağıda verilmiştir:

www 1 kav 1 sad 1
wwb 1 avr 1 adi 1
wbi 1 vra 1 die 1
bil 1 ram 1 iev 1
ilg 1 aml 1 evr 1
lgi 1 mla 1 vre 1
gis 1 lar 1 ren 1
isa 1 ari 1 ens 1
say 1 ric 1 nse 1
aya 1 ico 1 sek 1
yar 1 com 1 eke 1
ark 1 oms 1 ker 1
rka 1 msa 1

 

Benzer şekillerde sayı arttırılarak istenilen bir n-gram değeri listelenebilir. Bu değerlerin bazıları literatürde özel olarak isimlendirilmektedir.

Örneğin bu isimlendirme listesi aşağıda verilmiştir:

  • 1-gram > unigram
  • 2-gram > bigram
  • 3-gram > trigram

3’ten büyük değerler için sadece n-gram terimi kullanılır.

n değerine bağlı olarak dizilimin alacağı ihtimal uzayı artmaktadır. Örneğin 29 harfli Türkçe için unigram bir işleme sonucunda 29 farklı alternatife göre dizilinim dağılımı ortaya çıkar. Yani listemizin sonucunda 29 farklı ihtimal ve bu ihtimallerin her birisinin kaçar kere tekrarlandığı bulunur.

n değerini arttırdıkça bu ihtimal uzayı büyür ve yine 29 harfli Türkçe için (Sadece alfabedeki harflerin olduğunu kabul ediyoruz) 29n olarak bulunabilir.

Yukarıda anlatıldığı üzere bir dizginin (String) üzerinde n-gram işlemesi yapan kod aşağıda verilmiştir:

Yukarıdaki kodda, iki adet sınıf kullanılmıştır. sayac isimli sınıf, bulunan n-gramları tutmak için kullanılan bir veri ünitesidir. Bu veri ünitesi, test sınıfında kullanılan vektör (vector) içerisinde tutulmakta ve bulunan her n-gram’ın kaç tane olduğunu saymaktadır.

Kodun 17 ile 34. satırları arasında verilen dizgi (String) önce verilen n boyutunda parçalara ayrılmakta (kodun 18. satırındaki String kütüphanesinden substring fonksiyonu marifeti ile) ardından bu n boyutundaki parça veri yapımız olan Vektör içerisinde var mı diye bakılmaktadır (kodun 20 ile 26. satırları arasında). Şayet yoksa vektör eklenmekte (kodun 27,28. satırları) varsa da kaç tane olduğu değeri arttırılmaktadır (kodun 24. satırı).

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir