Hababam Sınıfı’nda En Çok Kimden Bahsediliyor? R’da Kurallı İfadelerin Kullanımı

R Turkce

Örnekli açıklama.

Mine Dogucu https://minedogucu.com
2020-09-26

Eğer sadece gerçekten Hababam Sınıfı’nda en çok kimden bahsedildiğini merak ediyorsanız, yazının sonuna göz atabilirsiniz. Soruyu R ile nasıl yanıtladığımı merak ediyorsanız ve de benzer analizi siz de tekrarlamak isterseniz okumaya devam edin.

Bu yazın başlarında R Ladies için R Markdown üzerine sunum yaptığımda katılımcılara ve kendime Türkçe R kaynaklarının sayısını arttırma ödevi vermiştim. Güz dönemine başlamadan kısa da olsa R ile Türkçe bir örnek vermek istedim. Dürüst olmak gerekirse amacım Hababam Sınıfı’nda en çok kimden bahsedildiğini bulmak değil. Sadece bu örneğin R’da kurallı ifadelerden bahsetmek için uygun olduğunu düşünüyorum.

Veri

Veri setini turkcealtyazi.org sitesinden indirdim. Altyazı dosyası .srt uzantılı bir dosya. Bu dosyayı R’da açmak için subtools paketindeki read.subtitles fonksiyonuna ihtiyacımız olacak. Paket CRAN’de olmadığı için paketin GitHub’daki versiyonunu devtools yardımıyla indirebiliriz.

devtools::install_github("fkeck/subtools")

İndirdiğim altyazı dosyasını data klasörüme hababam-sinifi.srt diye kaydetmiştim. Dosyayı okuyabiliriz.

hababam <- subtools::read_subtitles('hababam-sinifi.srt')

Veri setinin başına ve sonuna göz atabiliriz.

head(hababam)
# A tibble: 6 x 4
  ID    Timecode_in Timecode_out Text_content                         
  <chr> <time>      <time>       <chr>                                
1 1     00'18.967"  00'23.400"   Oturun! Oturun! Beyler gene 5 dakika…
2 2     00'23.481"  00'26.240"   - Kusura bakmayın Hocam. - Otur tebi…
3 3     00'27.000"  00'31.200"   - Mööö! - Hocam, sırama gene ot koym…
4 4     00'31.321"  00'34.440"   - Ee, ne olmuş? - Bana şey demek ist…
5 5     00'34.481"  00'36.121"   Ne demek istiyor?                    
6 6     00'36.480"  00'40.800"   - İnek demek istiyor Hocam. - İnek Ş…
tail(hababam)
# A tibble: 6 x 4
  ID    Timecode_in  Timecode_out Text_content                        
  <chr> <time>       <time>       <chr>                               
1 1047  01:23:38.105 01:23:39.585 Evet Hocam.                         
2 1048  01:23:39.600 01:23:42.389 Gerçekten bana en güzel hediyeyi ve…
3 1049  01:23:44.660 01:23:46.534 Bu uğultu ne?                       
4 1050  01:23:46.605 01:23:49.590 - Kalkabilir misiniz Hocam? - Tabiî.
5 1051  01:23:51.287 01:24:01.400 <- Mahmut Hoca! Mahmut Hoca! Mahmut…
6 1052  01:24:20.300 01:24:24.010 - Bunlar kim? - Gelecekteki öğrenci…

Veri setinde 4 tane değişken var. ID spesifik bir sahnedeki altyazı numarası. Timecode_in altyazının başlangıç zamanı. Timecode_out ise bitiş zamanı. Text_content ise altyazı. Farkederseniz aslında bir satırda birden fazla kişinin konuşması var. Verimizi düzenleyelim. Dize biçimlendirme için en sık kullandığım paket stringr’dan yararlanacağız. Bu pakette bütün fonksiyonlar str_ ile başlıyor. Paket tidyverse’ün parçası olduğu için ve de genel olarak tidyverse fonksiyonlarından yararlanacağımız için tidyverse’ü yükleyelim.

Yapacağımız üç şey var. Bunları görmemiz açısından bir satır ile örneklendireceğim. Daha sonra bütün dizeleri uygulayacağız

ornek_satir <- hababam$Text_content[2]
ornek_satir
[1] "- Kusura bakmayın Hocam. - Otur tebiyesiz herif."
  1. Konuşma çizgisinin olduğu ifadeleri ayıralım. Bunu str_split() fonksiyonu ile yapabiliriz.
ornek_satir <- str_split(ornek_satir, '-')
ornek_satir
[[1]]
[1] ""                         " Kusura bakmayın Hocam. "
[3] " Otur tebiyesiz herif."  

ornek_satir tek elemanli vektör iken artik bir liste.

  1. Listeden vektöre geçiş yapalım.
ornek_satir <- unlist(ornek_satir)
ornek_satir
[1] ""                         " Kusura bakmayın Hocam. "
[3] " Otur tebiyesiz herif."  
  1. Aslında bu vektörde iki eleman olması gerekirken üç tane var. İlk eleman boş. Ondan kurtulalım. Bunu yapmak zorunda değiliz fakat temiz veri ile çalışmak her zaman daha iyi.
ornek_satir[ornek_satir != ""]
[1] " Kusura bakmayın Hocam. " " Otur tebiyesiz herif."  

Şimdi bu üç adımı bütün film için yapalım.

hababam <- str_split(hababam$Text_content, '-') %>% 
  unlist() 
hababam <- hababam[hababam != ""]

Analiz

Aslında Hababam Sınıfı’nda bir çok karakter var. Amacımız R öğrenmek olduğu için IMDB’nin de filmin de öne çıkardığı beş karaktere odaklanacağız: İnek Şaban, Kel Mahmut, Güdük Necmi, Damat Ferit ve de Hafize Ana.

İnek Şaban

Kodun detaylarını İnek Şaban için detaylı anlatacağım. Öncelikle kaç kere İnek Şaban’dan bahsedildiğine bakalım. str_subset içinde ‘inek’ geçen altyazıları görmek için faydalı.

str_subset(hababam, "inek") 
 [1] " Yok oğlum inek şakası bu."                                         
 [2] " Duymaz o inek."                                                    
 [3] "İç oğlum bu enayi hoşafı değil, inek hoşafı!"                       
 [4] " Kim o inek? "                                                      
 [5] "Yaa. Memnun oldum, neden inek diyorlar sana, çok mu çalışkansın?"   
 [6] " Hocam onun inekliği çalışkanlığından değil. "                      
 [7] " Uçan inek geliyor arkadaşlar dikkat edin."                         
 [8] "...inek gibi yüzüme bakıyorsun."                                    
 [9] "Hâlâ inek diyor yahu!"                                              
[10] "Anlat bakayım oğlum, ineklerde mantık var mıdır?"                   
[11] "Seni haylaz seni, seni inek seni! Geç yerine!"                      
[12] "Millet Kadıköylere taşınıyor biz burada pinekliyoruz. Şansa bak be!"
[13] "Çok ineksin be!"                                                    

Fakat dikkat ederseniz 12. satırda pinekliyor kelimesi de içinde inek geçtiği için seçildi. Bunu engellemek için kelimenin başlangıcında inek aradığımıza dair kurallı ifadeler kullanarak bir kelime sınırı koyabiliriz. Bunu \\b ekleyerek kelime sınırımızı kelimenin başında belirleyebiliriz.

str_subset(hababam, "\\binek") 
 [1] " Yok oğlum inek şakası bu."                                      
 [2] " Duymaz o inek."                                                 
 [3] "İç oğlum bu enayi hoşafı değil, inek hoşafı!"                    
 [4] " Kim o inek? "                                                   
 [5] "Yaa. Memnun oldum, neden inek diyorlar sana, çok mu çalışkansın?"
 [6] " Hocam onun inekliği çalışkanlığından değil. "                   
 [7] " Uçan inek geliyor arkadaşlar dikkat edin."                      
 [8] "...inek gibi yüzüme bakıyorsun."                                 
 [9] "Hâlâ inek diyor yahu!"                                           
[10] "Anlat bakayım oğlum, ineklerde mantık var mıdır?"                
[11] "Seni haylaz seni, seni inek seni! Geç yerine!"                   
[12] "Çok ineksin be!"                                                 

Bir de Türkçe de ünsüz yumuşamasını göz önüne alıp inekten ineği,ineğe gibi kelimeleri düşünelim. Bunu ine ile başlayıp k veya ğ ile devam eden kelimeleri aratarak bulabiliriz.

str_subset(hababam, regex("\\bine[k|ğ]")) 
 [1] " Yok oğlum inek şakası bu."                                      
 [2] " Duymaz o inek."                                                 
 [3] "İç oğlum bu enayi hoşafı değil, inek hoşafı!"                    
 [4] " Kim o inek? "                                                   
 [5] "Yaa. Memnun oldum, neden inek diyorlar sana, çok mu çalışkansın?"
 [6] " Hocam onun inekliği çalışkanlığından değil. "                   
 [7] " Uçan inek geliyor arkadaşlar dikkat edin."                      
 [8] "...inek gibi yüzüme bakıyorsun."                                 
 [9] "Hâlâ inek diyor yahu!"                                           
[10] "Anlat bakayım oğlum, ineklerde mantık var mıdır?"                
[11] "Seni haylaz seni, seni inek seni! Geç yerine!"                   
[12] "Çişşşş. Hadi benim ineğim."                                      
[13] "Çok ineksin be!"                                                 

Fark ettiyseniz bulduğumuz altyazılarda hiç İnek geçmiyordu. Büyük küçük harf duyarını göz önüne alıp İnek kelimesini de arayalım.

str_subset(hababam, regex("\\b[i|İ]ne[k|ğ]"))
 [1] " İnek demek istiyor Hocam. "                                     
 [2] " İnek Şaban değil mi senin adın?"                                
 [3] "Hadi oğlum Güdük öp İneği de barışın hadi."                      
 [4] " İnek öyle beleşten affetme ha!"                                 
 [5] " Yok oğlum inek şakası bu."                                      
 [6] " Duymaz o inek."                                                 
 [7] " İnek Şaban, Güdük ile aynı takımda oynamaz."                    
 [8] "İç oğlum bu enayi hoşafı değil, inek hoşafı!"                    
 [9] " Bir daha bu İneği takıma almayın."                              
[10] " İnek mektubun var. "                                            
[11] " İnek giriyor da kedi niye girmesin?"                            
[12] " Atıyorsun İnek, ver bakayım. "                                  
[13] " Kim o inek? "                                                   
[14] "Yaa. Memnun oldum, neden inek diyorlar sana, çok mu çalışkansın?"
[15] " Hocam onun inekliği çalışkanlığından değil. "                   
[16] "İnek cazibesi."                                                  
[17] "Atla İnek senin keyfini mi bekleyeceğiz burada."                 
[18] " Uçan inek geliyor arkadaşlar dikkat edin."                      
[19] " Çocuklar, İneğe bakın!"                                         
[20] " Ne o İnek sen de mi kaçıyorsun? "                               
[21] " Kalk ulan İnek! Kalk."                                          
[22] "...inek gibi yüzüme bakıyorsun."                                 
[23] "İnek diyor ulan. Senin ananı!"                                   
[24] "Hocam? Bu çocuk biraz gerizekâlı galiba. İneğe benziyor."        
[25] "Hâlâ inek diyor yahu!"                                           
[26] "Laf aramızda arkadaşları da ona İnek diyor."                     
[27] "Anlat bakayım oğlum, ineklerde mantık var mıdır?"                
[28] "İnek senin babandır."                                            
[29] "Seni haylaz seni, seni inek seni! Geç yerine!"                   
[30] "Görsün o İnek, bak ne oyun edeceğiz şimdi ona."                  
[31] " İneğin leblebilerini araklamadan uyuyamayız. "                  
[32] " İşkembesini doldurdu zıbardı İnek."                             
[33] "Çişşşş. Hadi benim ineğim."                                      
[34] "Tulum al ye. İneğin malı deniz yemeyen domuz."                   
[35] " Hasta olmuş ateşi varmış İneğin."                               
[36] " Yok! İneğin birinden yürüttüm."                                 
[37] "At sineği değil be! İnek sineği."                                
[38] " Ne yazıyorsun ulan İnek? "                                      
[39] "Anlamadığın şeylere burnunu sokma İnek."                         
[40] " İnek, bir kız geldi seni soruyor."                              
[41] " İdare et İnek. "                                                
[42] "Çok ineksin be!"                                                 
[43] " Şakanın sırası mı İnek."                                        
[44] "...çektiğiniz halk sanatçısı Ali Rıza Binboğa değil Şaban İnek." 

Tabii bir de Şaban geçen altyazıları arayalım.

str_subset(hababam, regex("(\\b[i|İ]ne[k|ğ])|(Şaban)"))
 [1] " İnek demek istiyor Hocam. "                                                
 [2] " İnek Şaban değil mi senin adın?"                                           
 [3] "Şaban sen söyle ne ile beslenirler memeliler? Ne ile beslenirler?"          
 [4] "Hadi oğlum Güdük öp İneği de barışın hadi."                                 
 [5] " İnek öyle beleşten affetme ha!"                                            
 [6] " Yok oğlum inek şakası bu."                                                 
 [7] "Canım Şabancığım. Benim tatlı sevgilim. Vahşi cazibene artık dayanamıyorum."
 [8] " Duymaz o inek."                                                            
 [9] "Şaban artık buluşalım. Bugün okuldan kaç."                                  
[10] " İnek Şaban, Güdük ile aynı takımda oynamaz."                               
[11] "Şaban yakana da bir karanfil tak da seni tanıyabileyim."                    
[12] "İç oğlum bu enayi hoşafı değil, inek hoşafı!"                               
[13] " Bir daha bu İneği takıma almayın."                                         
[14] "Şaban... Yaksana bir tane yahu."                                            
[15] " Şaban! Ne o elindeki?"                                                     
[16] " İnek mektubun var. "                                                       
[17] " İnek giriyor da kedi niye girmesin?"                                       
[18] " Atıyorsun İnek, ver bakayım. "                                             
[19] " Kim o inek? "                                                              
[20] "Yaa. Memnun oldum, neden inek diyorlar sana, çok mu çalışkansın?"           
[21] " Hocam onun inekliği çalışkanlığından değil. "                              
[22] "İnek cazibesi."                                                             
[23] "Atla İnek senin keyfini mi bekleyeceğiz burada."                            
[24] " Uçan inek geliyor arkadaşlar dikkat edin."                                 
[25] " Çocuklar, İneğe bakın!"                                                    
[26] " Ne o İnek sen de mi kaçıyorsun? "                                          
[27] " Kalk ulan İnek! Kalk."                                                     
[28] "...inek gibi yüzüme bakıyorsun."                                            
[29] "İnek diyor ulan. Senin ananı!"                                              
[30] "Hocam? Bu çocuk biraz gerizekâlı galiba. İneğe benziyor."                   
[31] "Hâlâ inek diyor yahu!"                                                      
[32] "Laf aramızda arkadaşları da ona İnek diyor."                                
[33] "Anlat bakayım oğlum, ineklerde mantık var mıdır?"                           
[34] "İnek senin babandır."                                                       
[35] "Seni haylaz seni, seni inek seni! Geç yerine!"                              
[36] " Ne yiyorsun Şaban? "                                                       
[37] "Görsün o İnek, bak ne oyun edeceğiz şimdi ona."                             
[38] " İneğin leblebilerini araklamadan uyuyamayız. "                             
[39] " İşkembesini doldurdu zıbardı İnek."                                        
[40] "Çişşşş. Hadi benim ineğim."                                                 
[41] "Tulum al ye. İneğin malı deniz yemeyen domuz."                              
[42] " Günaydın Şabancığım. "                                                     
[43] " Hasta olmuş ateşi varmış İneğin."                                          
[44] "Alsana Şaban. Bu leblebiler Güdüğün."                                       
[45] " Yok! İneğin birinden yürüttüm."                                            
[46] "Şaban, ne söyleniyorsun orada? Kalk sen oku."                               
[47] "At sineği değil be! İnek sineği."                                           
[48] " Ne yazıyorsun ulan İnek? "                                                 
[49] "Anlamadığın şeylere burnunu sokma İnek."                                    
[50] " İnek, bir kız geldi seni soruyor."                                         
[51] " İdare et İnek. "                                                           
[52] "Yalnız Şaban'a 2 verdim."                                                   
[53] "Çok ineksin be!"                                                            
[54] " Şakanın sırası mı İnek."                                                   
[55] " 323 Şaban. "                                                               
[56] "...çektiğiniz halk sanatçısı Ali Rıza Binboğa değil Şaban İnek."            

Yazdığımız kurallı ifadeyi kısaca özetleyelim:

(Kelime başında i veya İ olan ne ile devam eden k veya ğ ile devam eden) veya içinde Şaban geçen dizeler.

Bir de length() fonksiyonunu kullanarak vektörün uzunluğunu ölçüp, 56 dizede İnek Şaban’dan bahsedildiğini kaydedelim.

inek_saban <- length(str_subset(hababam, regex("(\\b[i|İ]ne[k|ğ])|(Şaban)")))

Diğer Oyuncular

Diğer oyuncular için de aynı stratejiyi izleyeceğiz. Kel Mahmut için Kel veya kel ile başlayan kelimeleri veya içinde Mahmut geçen dizeleri arayacağız.

kel_mahmut <- length(str_subset(hababam, regex("(\\b[k|K]el)|(Mahmut)")))

Geriye kalan oyuncular için de kod stilimiz pek değişmeyecek.

guduk_necmi <- length(str_subset(hababam, regex("(\\b[g|G]üdü[k|ğ])|(Necmi)")))
damat_ferit <- length(str_subset(hababam, regex("(\\b[d|D]ama[t|d])|(Ferit)")))
hafize_ana <- length(str_subset(hababam, "Hafize"))

Görselleştirme

Görselleştirmeden önce veri setini oluşturalım.

veri <- data.frame(
  isim = c("İnek Şaban","Kel Mahmut","Güdük Necmi","Damat Ferit","Hafize Ana"),  
  sayi = c(inek_saban, kel_mahmut, guduk_necmi, damat_ferit, hafize_ana)
  )

veri
         isim sayi
1  İnek Şaban   56
2  Kel Mahmut   59
3 Güdük Necmi   27
4 Damat Ferit   21
5  Hafize Ana   12

Çubuk grafik ile verimizi görselleştirebiliriz.

ggplot(veri, aes(x = reorder(isim, sayi), y = sayi)) + #isimleri sayıya göre sıralayıp eksenleri belirleme
  geom_bar(stat = "identity", fill = "darkorange4") + # çubuk grafiğinin istatistiğini ve rengini belirleme 
  coord_flip() + # çubuk grafiğini yataylaştırma
  labs(y = "Bahsedilme sayısı",
       x = "Karakter",
       caption = "@MineDogucu") + # eksen etiketlerini belirleme
  theme_minimal() + # ggplotun temasını değiştirme
  theme(text = element_text(size=16)) # fontları büyültme

Aslında burada amacımız R öğrenmekti ama yine de sorumuzun yanıtının Mahmut Hoca olduğunu hem sayı hem de grafik olarak görmüş olduğumuzu belirtelim.

Kurallı ifadeler hakkında not

Kurallı ifadeler veri biliminde çokça dikkat isteyen bir iş. Elimizde kalan dizelerin gerçekten aradığımız ifadeleri içerdiğinden emin olmamız lazım. Aynı zamanda aramadığımız ifadelerin de elimizde kalmaması lazım. Türkçe’de arama daha da zor. Mesela kel ararken, kelden türeyen keli, kele, kelde gibi ifadeler kalsın istiyorsunuz. Bunun için kel ile başlayan kelimeler için ifade yazabilirsiniz. Fakat bu sefer kelle gibi kelimeler de seçilecektir. Onun için veriye çok detaylı bakmak gerekiyor. Benim burada amacım R’da birkaç fonksiyon göstermekti, umarım Türkçe ile ilgili bu tarz bir hata yapmamışımdır.