Twitter Derlemi – TS TweetS Corpus

TS TweetS Corpus

TS TweetS Corpus

Sosyal medya son zamanlarda hayatın ayrılmaz bir parçası. Sosyal medyaya karşı yapılan eleştirileri hemen herkes biliyor. Ancak sosyal medyanın gözardı edilemeyecek şekilde bizlere “yazabilme fırsatı” sunduğu da bir gerçek. Bu açıdan bakıldığında sosyal medyanın “dilbilim” açısından önemli bir kaynak olduğu da gözardı edilmemeli. Bu kaynağı kullanmak amacıyla TS Corpus altında yaklaşık bir yıl önce TS TweetS derlemini yayınlamıştım. Araya giren işlerin yoğunluğundan bir türlü bu derlemi ve özelliklerini anlatmaya fırsatım olmamıştı. Bu eksikliği biraz gidermeye çalışayım.

TS TweetS derlemi, sözcük türü olarak etiketlenmiş toplam 1 milyon tweet’ten oluşan (12 milyon 564 bin 769 birim) bir Türkçe Twitter derlemi. Derlemi TS Corpus altında yer alan diğer 5 derlemden ayıran en önemli özelliği yeni bazı sözcük türü etiketlerinin kullanılıyor olması. Bu etiketler YY (Yazım Yanlışı), intAbbr (Internet Abbreviations), Emoticons (Smiley İşaretleri), intEmphasis (Internet Emphasis) ve intSlang (Internet Slang). Bunun yanısıra TRmorph tarafından işaretlenmekte olan Abbreviations (abbr etiketiyle) ve tinglish (tinglish etiketiyle) etiketleri de ilk defa bir Türkçe derlemde kullanılmış oldu. Öncelikle bu etiketlere yakından bakalım.

YY (Yazım yanlışı): Sosyal medyaya erişimin temel araçlarından biri akıllı telefonlar ve tablet bilgisayarlar. Bu cihazlarda Türkçe karakterler genellikle ekran klavyesinin ikinci bir katmanından erişilebilir durumda oluyor. Bu düzen “ı“, “ş” vb. karakterleri içeren sözcüklerin yazımında bu karakterlere ulaşmak yazım hızını belirgin şekilde düşürmekte. Dolayısıyla kullanıcılar bu karakterler yerine ekran klavyesinden direk erişilebilir olan karakterleri kullanmayı tercih ediyorlar. “ı” yerine “i“, “ş” yerine “s” kullanımı sosyal medyada sıklıkla karşılaşılan bir durum oluyor. YY etiketiyle bu sözcüklerin bir kısmını işaretlemeye çalıştım. Bu sözcüklerin imla kurallarına uygun olarak yazılmış halleri “Correct” olarak yeni katmanda etiketlenmiş olarak derlemde sunulmaktadır.

Öte yandan belirli karakterlerin, özellikle sözcük sonuna gelen karakterlerin, “internetçe” yazmaya çalışan kullanıcılar tarafından farklı yazılması da sıklıkla gözlenen bir durum. YY etiketi bu sözcükleri de kapsamakta.

TS Corpus – Yeni Etiketler

intAbbr (Internet Abbreviations): Zaman içinde internet ve sosyal medyanın kendine ait bir dilinin oluştuğunu hepimiz biliyoruz. “Selam” yerine “slm“, “mesaj” yerine “msj” yazmak artık hepimizin bildiği internete özgü kısaltmalar. Derlemde toplam 131,369 sözcük, 815 farklı internete özgü kısaltma ile etiketlenmiş olarak sunulmakta.

Emoticons(Smiley İşaretleri): İnternet üzerinden sohbet etmenin hayatımıza girdiği IRC günlerinden beri smiley işaretleri de sıklıkla kullanılmaya başladı. Özellikle “duyguların ifadesi” olarak ele alındığında bu işaretler mimik ve jest gibi bedensel ifadelerin bulunmadığı ortamda önem taşımakta. Dahası, verinin duygu analizinin (sentiment analysis) yapılması için smiley işaretleri en temel öğeler olarak kolaylıkla kullanılabilecek ipuçları taşımaktadır. Derlemde toplam 293.857 birim 106 farklı emoticon etiketiyle işaretlenmiş olarak sunulmakta.

intEmphasis (Internet Emphasis): İnternette yazılan yazılarda, vurgunun belirtilmesi için bir karakterin bilinçli olarak tekrarlanarak sözcüğün yazılması sıkça gözlemlenen bir durum. Bu şekilde yazılan sözcükler, cümlenin bir noktasındaki vurguyu belirtme işlevini yerine getirmektedir. Smiley işaretlerine benzer şekilde “sentiment analysis” için bu etiket kullanılabilir.

intSlang (Internet Slang): Argo dilin önemli bir parçası. İnternet yazımında da argonun geniş bir kullanımı görülmekte. Özellikle editöryal bir süreçten geçmemiş, olduğu gibi yazılan yazılarda argo sıklıkla kullanılmakta. Tweet’lerde de kullanılan argo sözcükler TweetS derleminde toplam 9046 sözcük argo olarak işaretlenmiştir.


TRmorph Etiketleri

Kısaltmalar (TRT – Türkiye Radyo ve Televizyon kurumu, YGS – Yüksek Öğrenime Geçiş Sınavı, vb.) TweetS derleminde etiketlenmiştir. Etiketlemede TRmorph’un içerdiği kısaltmalar kullanılmıştır.

Tinglish etiketi,  TRmorph belgelendirmesinde Çöltekin tarafından  “İngilizce bir sözcüğün Türkçe yazımında İngilizce sesletimini kullanmak” olarak  tanımlanmış sözcükleri içermektedir. Population – popülasyon, duplication – duplikasyon vb. sözcükler TS TweetS derleminde Tinglish olarak etiketlenmiştir.


 


TokenPosTagMorphLemmaCorrect
geliyor_VerbVerb+Pos+Prog1+A3sggelgel
🙂_emoticonemoticonNo_Lemmasmile
qısa_YYNo_MorphNo_Lemmakısa
coook_intEmphasisNo_MorphNo_Lemmaçok
TS TweetS Corpus - Etiket Katmanları

 

Tabloda TS TweetS derleminde kullanılan katmanlar ve bu katmanların derlem veritabanını oluşturan yapıları örneklenmiştir. İlk dört sütunda görülen Token, PosTag, Morph ve Lemma katmanları sorgu oluşturmakta kullanılabilmektedir.


Derlemi oluşturmak için  TS Corpus projesindeki diğer derlemleri de birimlendirmek için (tokenize) kullanmakta olduğum TS Tokenizer betiğini de içeriğe uygun olarak güncellemem gerekti. Twitter’a özgü olarak kullanılan ve kullanıcıyı işaret eden “@” sembolü ile konu başlıklarını (HasTag) işaret etmek için kullanılan “#” sembollerinin bağlı bulunduğu sözcüklerden ayrılmaması gerekmekteydi. Birimlendiriciyi bu işaretlerin kullanıldığı sözcükleri bu derlem için doğru şekilde ayrıştırıcak şekilde güncelledim.

Böylelikle her ne kadar bu işaretleri içeren sözcükler için (henüz) birer PosTag atamamış olsam da, CQP’nin sunduğu özellikler ile derlem kullanıcıları bu işaretleri “Frequency Lists” aracıyla sorgulayabilir oldular. Bu işaretleri içeren örnek bir metin şöyle görünmekte. Görüldüğü gibi sonuçlar, her bir tweet bir satırda gösterilecek şekilde ekrana yansıtılmakta.


TokenPosTagMorphLemmaCorrect
#TS_TweetS_DerlemiUnDefUnDef#TS_TweetS_Derlemi#TS_TweetS_Derlemi
yayındaNounNoun+A3sg+Pnon+Locyayınyayında
@usersUnDefUnDef@users@users

TS TweetS derleminin arayüzü de projede yer alan diğer derlemlere göre biraz farklı. Özellikle smiley (emoticons) ve yazım yanlışı (YY) etiketleriyle işaretlenmiş sözcüklerin arayüzde kolaylıkla kullanıcılara sunulabilmesi için sonuçlar iki satırda ekrana yansıtılmakta. Aşağıdaki ekran resiminde, anahtar sözcük konumunda bulunan  ve smiley olarak etiketlenmiş sözcüklerin karşılıklarının derlem arayüzündeki gösterimleri görülmekte.

TS_Tweets_Corpus_User_Interface

Sonuçlar

 

Sosyal medya dilbilim için oldukça zengin bir veri kaynağı sağlamakta.

  • TS TweetS derlemi ile bu kaynağa ilişkin online erişimli, Türkçe tweet’lerden oluşan bir derlem kullanıcılara sunulmuş oldu.
  • Bu çalışmada ilk defa kullanılan zenginleştirilmiş etiket setiyle birlikte, kullanıcıların ilk defa farklı yapılar için direk sorgular yapması sağlanmış oldu.
  • Sosyal medya ve internetten elde edilecek veri üstünde yapılacak çalışmalarda Türkçe için eksikliği hissedilen noktaları (tokenizer, PosTagger, etc.) görme fırsatı oluştu.
PS:
* Derlemle ilgili daha detaylı bir yazıya buradan ulaşabilirsiniz.
* Derleme erişmek için http://tscorpus.com adresinde bulunan formu doldurarak kayıt olmalısınız.

 

 

 

Dizi Üreteci Örnekleri

Belirli bir karakter setini kullanarak olası tüm dizilimleri üretmek oldukça basit bir çalışma. Perl ile tek satırlık bir komut kullanarak terminal üstünde bir dizi üretmek için şöyle bir komut kullanılabilir:

$perl -le "print while glob '{a,b,c,ç,d,e,f,g,h,ı,i,j,k,l,m,n,o,ö,p,r,s,ş,t,u,ü,v,y,z}'x5" >>5_char_length.txt

Bu komutu çalıştırarak Türkçe alfabede bulunan harfler ile oluşturulabilecek tüm 5 karakterlik dizileri 5_char_length.txt dosyasına yazdırmış olacağız. Komut 114 MB büyüklüğünde bir txt dosyasına 17 milyon 210 bin 368 satırlık bir diziler listesi yazdıracaktır. Aynı diziyi 6 karakter uzunluğunda ürettiğimizdeyse toplam 594 milyon 823 bin 321 satırdan oluşan ve 4.6 GB büyüklüğünde bir dosya elde edeceğiz.

Bu diziler içinde aaaaa, zzzzz veya şzeaş gibi genellikle bir işe yaramayan diziler de bulunuyor. Yani ham halleriyle bu dizileri kullamak dilibilimsel açıdan çok akılcı bir yaklaşım değil.

Ürettiğimiz diziden geçerli Türkçe sözcükleri çekmek için bir doğal dil  işleme kütüphanesi olan Zemberek’ten faydalanabiliriz. Bunun için basit bir bash betiği ile Zemberek’in komut satırında çalışan denetleyicisi olan zpspell’den yararlanmak mümkün.

#!/bin/bash
# Sample bash script for Zemberek interactive SpellChecker
# Taner Sezer admin@tscorpus.com
while read line
do
    name=$line
    zpspell $name | grep "doğru"
done < $1

Bir metin editörü kullanarak yukarıdaki örnek betiği bir metin dosyasına yazıp

$vi check_spell.sh

Bu dosyayı çalıştırılabilir hale getirelim.

$chmod +x check_spell.sh

Bu betik ile ürettiğimiz listedeki geçerli Türkçe sözcükleri döndürebiliriz. Örneğin alfabedeki 29 harfi kullanarak 2 karakterlik bir dizi ürettiğimizde elimizde 784 satırlık bir dosya olacaktır. Bu dosyayı check_spell.sh betiğimizi kullanarak işlediğimizdeyse yazım denetimini geçebilen 114 sözcüklük bir liste elde edeceğiz.

aç ad af ah ak al an ar as aş at av ay az be bu cm da de dk dl dm do eh ek el em en er es eş et ev ey ez fa ha he hı hl hm hu ıh ıs iç il im in ip is iş it iv iz kg ki km la le mı mi mm mu mü na ne nü od of oh ok ol om on ot ov oy öç öd öf öl ön öp ör öt öv öz pi re sa si sn su şu ta ti uç uf um un ur us ut uy uz üç ün üs üş üt üz ve ya ye

Aynı işlemi 3 karakterlik bir dizi için yaptığımızda 21 bin 952 sözcüklük bir liste üretecek ve check_spell.sh betiği ile işlediğimizde geçerli 924 sözcük elde edeceğiz:

aba abd abu acı aça açı ada adı adi afi aft agu aha ahı ahi ahu ait aka akı aks akü ala aba abd abu acı aça açı ada adı adi afi aft agu aha ahı ahi ahu ait aka akı aks akü ala alg alı ali alo alp alt ama ana anı ani ant ara arı ark arp arş art arz asa ası asi ask ast aşa aşı aşk ata ate atı ati aut ava avı aya ayı ayn aza azı baç bak bal bam ban bap bar bas baş bat bav bay baz bej bek bel ben beş bet bey bez bık biç bil bin bip bir bit biz boa bok bol bom bor boş bot boy boz böl bön bös bre bul bum bun bur but buy buz bük büz cam can car cay caz cep cer cet cık cır cıs cız cif cim cin cip cop coş cup cüz çak çal çam çan çap çar çat çav çay çeç çek çel çer çık çın çıt çıv çil çim çir çis çiş çit çiy çiz çok çor çök çöl çöm çöp çör çöz çul çüş dal dam dan dar dav daz def deh dek del dem den der deş det dev dır dış dik dil din dip diş dit diz dok dol dom don doy doz dök döl dön döş döv dua dul dun duo dur duş dut duy dük dün dür düş düz ebe ece eda ede efe ege ego ehe ehi eke eki ela ele eli eme ene eni epe ere erg eri erk ese esi eşe eşi ete eti evç eve evi eye eyi eza eze fak fal fam fan far faş fay faz fek fen fer fes fır fıs fış fil fiş fit fob fok fol fon fos ful fut füg gaf gag gak gam gar gaz geç ged gel gem gen ger gev gez gık gır gıy gir git giy giz gol göç gök göl göm gön gör göt göy göz gri gut güç gül güm gün gür güt güz hac haç had haf hah hak hal ham han hap har has hat hav hay haz hem hen hep her hey hık hım hın hır hız hiç hin his hiş hol hop hor hoş höl höt hum hun huş huy hür ıha ıhı ılı ıra ırk ırz ısa ısı ışı içe içi ide idi ifa ika iki iks ile ili ilk ima ime imi inç ine ini ipe ipi iri irk irs ise isi işe işi ita ite iti ive iye iyi ize izi jel jet jön jul jüt kaç kah kak kal kam kan kap kar kas kaş kat kav kay kaz kek kel kem kep kes keş ket kez kıç kıh kıl kın kıp kır kıs kış kıt kıy kız kik kil kim kin kip kir kit koç kod kof kok kol kom kon kop kor koş kot kov koy koz kök kör kös köy köz kul kum kup kur kus kuş kut kuz küf kül küp kür küs küt laf lak lal lam lan lap lav lef leh lem len lep leş ley lif lig lir lok lop lor loş lök löp lös lüp maç mai mal mas maş mat meç mel men met mey mıh mık mır mil mim mir mis mit mor mum muş muz nah nal nam nan nar nas naz nem nen net ney nim niş not nur nüm nün oba oda odu ofa ofu oha ohm ohu oje oka oku ola ole olu oma omu ona ons onu ora org osu ota oto otu ova oya oyu öce öcü öde ödü öfe öfü öge öhö öke ölç öle ölü öne önü öpe öre örf örk örs ört örü öte öve öze özü pah pak pal pas pat pay pek pes peş pey pır pıt piç pik pil pim pin pir pis piş pli pof pop pos pot poy poz pöç pöf puf pul pus put püf pür püs raf rap ray rem ren ret rey rıh rol rom rop rot ruf ruh ruj ruz sac saç saf sah sak sal sam san sap sar sat sav say saz seç sek sel sem sen ser ses set sev sez sıç sık sın sır sız sif sik sil sim sin sis siy siz ski sof sok sol som son sop sor sos soy sök sön sör söv söz suç sun sup sur sus sut sün sür süs süt süz şad şah şak şal şan şap şaş şat şaz şeb şef şek şen şer şeş şet şev şey şık şıp şif şip şiş şok şom şov şua şuh şum şun şut taç tak tal tam tan tap tar tas taş tat tav tay tef tek tel tem ten tep ter tez tık tın tıp tıs tik tim tin tip tir tiz tok tol ton top tor tos toy toz tör tös töz tuh tul tun tur tuş tut tuz tüf tüh tük tül tüm tün tüp tür tüt tüy uca ucu uça uda udi udu ufa ufu ula ulu uma una unu ura uru usa usu uta uya uyu uza uzu üçe üçü üne ünü üre ürk ürü üst üşe üşü üte ütü üye üze vah var vat vay vem ven ver vık vır vız vur yad yak yal yam yan yap yar yas yaş yat yay yaz yed yek yel yem yen yer yet yık yıl yır yit yiv yok yol yom yon yor yoz yön yuf yum yun yut yük yün yüz zaç zam zan zar zat zem zen zer zıh zıp zıt zil zir zom zor zum zül

Elbette buradaki geçerlilik yazım denetleyicisinin başarımıyla doğru orantılı.


Bu dizileri verimli bir amaçla kullanmak için farklı yöntemler izlenebilir. Örneğin aşağıdaki komut ile üretilen dizi için istenilen karakter sayısındaki tüm sözcükler bir örnek derlemden çekilebilir:

$perl -n -e 'print if (/^[ANAHTAR_KARAKTERLER]+$/);' [sample_corpus] >> matched_strings

Böylece örnek derlemimizde bulunan ve istediğimiz karakterlerden üretilmiş tüm dizilere uygun sözcükleri elde edebiliriz. Bu işlemin “X sayıdaki karakterden oluşan tüm sözcükleri” örnek derlemden çekebilecek bir düzenli ifadeden farkını hepimizin bildiği bir oyun ile açıklayayım. Oyunumuzda “y, k, m, e, l, s” harflerinden oluşan tüm sözcükleri bulmaya çalışalım. Yukarıdaki komutu şu şekilde çalıştırmamız yeterli olacaktır:

$time perl -n -e 'print if (/^[ykmels]+$/);' [sample_corpus] >> matched_strings

Toplam 1 milyon 140 bin 208 tekil sözcükten oluşan örnek derlemimizden bu komut ile 0.340 saniye içinde bizim istediğimiz kurallara uygun olan 359 sözcüğü bulabiliyoruz. (time komutu ile işlem tamamlandığında toplam süre ekranda yansıtılacaktır.)

ek  el  em  es  ey  le  ye  eke  ele  eme  ese  eye  kek  kel  kem  kes  lem  ley  mel  mey  sek  sel  sem  ses  yek  yel  yem  ekle  ekme  ekse  elek  elem  elle  else  emek  emel  emme  emse  esme  esse  eyle  keke  kele  keme  kese  leke  leme  leye  mele  meme  meye  seke  seks  sele  sese  yeke  yele  yeme  yese  eklem  ekmek  ekmem  eksek  eksel  eksem  eleme  elese  eleye  elsel  elsem  emele  ememe  emmek  emmem  emsem  esmek  essek  essel  eylem  eysel  kekle  kelek  kelem  kelle  kelse  kesek  kesel  kesem  kesle  kesme  kesse  lekem  lemle  leyle  leyse  melek  meles  melle  melse  memem  mesel  meses  meyle  meyse  sekle  sekme  sekse  selek  selem  selle  semle  semse  sesle  sesse  seyek  yekle  yelek  yelem  yelle  yemek  yemem  yemle  yesek  yesem  ekemem  ekleme  eklese  ekleye  ekmese  ekmeye  elekle  elemek  elemem  elemle  elesek  elleme  ellese  elleye  emekle  emekse  emelle  emelse  emmeme  emmese  emmeye  esmese  esmeye  eyleme  eylese  eyleye  kekele  kekeme  kekeye  keleme  kellem  kememe  kemeye  kesele  keseme  keseye  kesmek  kesmem  kessek  kessel  kessem  lekele  lekeme  lekeye  leylek  meleke  meleme  melese  meleye  melsek  mememe  memeye  mesele  meslek  meysel  meysem  sekmek  seksek  seksle  seksse  seleme  seleye  semsek  sessel  yeksek  yeleme  yememe  yemese  yemeye  yemsel  eklemek  eklemem  eklemle  eklesek  eklesem  ekmekle  ekmekse  ekmemek  ekmesek  elememe  elemeye  ellemek  ellemem  ellesem  emmekle  emmemle  emmeyle  esmekle  esmeyle  eylemek  eylemem  eylemle  eylemse  eylesek  eylesem  kekleme  kelekle  kelekse  kelleme  kelleye  kesekle  kesemem  kesemle  keseyle  kesmeme  kesmese  kesmeye  kessele  lekesel  lekeyle  lekeyse  melekle  melekse  melemek  memesel  memeyle  memeyse  meselem  meselle  sekmese  sekmeye  selekle  seleyle  sesleme  sesleye  yelekle  yelleme  yemekle  yemekse  yememek  yememem  yemesek  yemesem  yemeyle  yemleme  eklememe  eklemese  eklemeye  ekmemeye  elemekle  elemeyle  ellememe  ellemeye  emekleme  emekleye  eylemeye  eylemsel  kekeleme  kekeleye  keklemek  kelleyle  keseleme  kesememe  kesemese  kesemeye  kesmekle  kesmekse  kesmemek  kesmemem  kesmesek  kesmesem  kesmeyle  lekeleme  lekelese  leylekle  leylekse  melekeye  meleksel  melemeye  meseleme  meseleye  meselsel  meslekle  meslekse  sekmeyle  yellemek  yemeksek  yemememe  yememeye  yemlemek  eklemekle  eklemekse  eklememek  eklemesek  eklemeyle  eklemleme  eklemleye  ekleyemem  ellememek  ellemesek  ellemesem  elleyemem  emeklemek  eylemekle  eyleyemem  kekelemek  keklemeye  keselemek  keselemem  kesememek  kesmememe  kesmemeye  lekelemek  melekeyle  meselemle  meseleyle  meseleyse  mesleksel  seslemeye  yememekle  yemlemeye  eklememeye  eklemlemek  eklemlesek  ekleyemeye  emeklemeye  kekelemeye  kesmemekle  lekelememe  lekelemese  lekelemeye  yellemekle  yellemeyle  yemlemeyle  eklememekse  eklemlemeye  ekleyememek  emeklemekle  kekelememek  kekelememle  keselemeyle  lekelemekle  lekelememek  eklemlemekle  emekleyememe

Komutun doğru çalışması için örnek derlemimizin her satıra bir sözcük (word-per-line) gelecek şekilde hazırlanmış olması gerekli. (Bu amaçla TS Tokenizer aracını kullanabilirsiniz.)

Python kullanarak da benzer bir çalışma yapabilir ve oyunumuzu biraz daha eğlenceli hale getirebiliriz. İnternette onlarca farklı metod ile çalışan, Python için yazılmış dizi üreteci örneklerine kolaylıkla ulaşmak mümkün. (Aşağıda verilen örnek betikte StackOverFlow sitesinde bulduğum bir fonksiyonu temel aldım.) Bu fonksiyonu,  çalıştırıldığında kullanıcıdan gerekli değerleri girmesini isteyecek ve her satıra bir sözcük olacak şekilde örnek derlemimizden bulduğu geçerli sonuçları döndürecek bir betik içinde kullandım. Betik kullanıcıdan ihtiyaç duyduğu üç değeri girmesini istiyor:

  • Dizide kullanılacak karakterler
  • Diziyi oluşturacak karakterlerin minimum sayısı
  • Diziyi oluşturacak karakterlerin maximum sayısı
#!/usr/bin/env python
# -*- coding: utf-8 -*-
####################################
#   Generate Strings               #
#            and                   #
#   Find Matches in Sample Corpus  #
####################################

import sys
import os
import re
import nltk
from sys import argv
from nltk import bigrams
from nltk.util import ngrams

list = raw_input("Please enter characters(Do not write same character twice): ")
min = int(raw_input("Please input min length of the string:"))
max = int(raw_input("Please input max length of the string:"))

upper = max+1

def generate(l,d):
  if d<1:
    return
  for c in l:
    if d==1:
      yield c
    else:
      for k in generate(l,d-1):
        yield c+k

for d in range(min,upper):
  for c in generate(list,d):
    
    words = c
    tokens = nltk.word_tokenize(words)
    text = nltk.Text(tokens)
    str(c)
    with open("sample_corpus") as search:
        for line in search:
            line = line.rstrip()
            if c == line:
                print(line)

Betiğimizi çalıştıralım:

taner@ts-msi-server ~/tscorpus/fun $ time python word_generator_and_matcher.py 
Please enter characters(Do not write same character twice): elmk
Please input min length of the string:3
Please input max length of the string:4

Ve sonuçlarımıza ulaşalım:

ele eme eke lem mel kel kem kek elem elek elle emel emek emme ekle ekme leme leke mele meme kele keme keke

Ürettiğimiz bu dizileri biçimbirimsel çözümleyici (morphological parser) veya sözcük türü işaretleyici (Part of Speech Tagger) ile işleyerek doğal dil işleme çalışmalarında farklı amaçlarla da kullanabiliriz.

TS Corpus -İstatistiki Veriler-

TS Corpus’u 1 Mart 2012 tarihinde kullanıcıların erişimine açmıştım, yani yaklaşık 2 yıl önce.
Çalışmayı en başından itibaren aktif, üretken ve sürekli gelişen bir altyapı ile, işaretlenmiş Türkçe derlemler ve bu konuda kullanılacak araçlar oluşturacak bir yapı olarak tasarlamıştım. Aradan geçen 2 yıl içinde de bu fikre uygun olarak çalışmayı sürdürdüm.
İki yıl sonra 3 ayrı derlem (toplam 550 milyon birim), online olarak çalışan Türkçe Tokenizer ve Türkçe PosTagger, iki ayrı crawler ve buna bağlı olarak çalışan bir arama arayüzüyle birlikte TS Corpus projesi büyümeye devam ediyor.
Bazen altyapıdaki sınırlılıklar yüzünden, bazen bilgi eksikliğim yüzünden, bazen de daha önce yapılmış yol gösterici bir çalışma bulamadığım için elbette eksikler, yanlışlar ve hatalar oldu. Ama sonuçta öğrenme aktif bir süreç ve attığım her küçük adım ileri gitmenin bir parçasını oluşturuyor.
Çalışmanın internete açılan temel yüzü olan tscorpus.com adresi ve bu adrese bağlı subdomainlerden gelen istatistiki verilere bakmak daha fazlasını yapmak için motive edici oluyor. Buyrun, iki yılın Google Analytics verilerini beraber inceleyelim:

Toplam Ziyaretçi

tscorpus.com adresini ve bağlı subdomain adreslerini 2 yıl içinde toplam 5004 kullanıcı ziyaret etmiş. Bu kullanıcıların 2346‘sı unique (ayrı) kullanıcılar. Kullanıcılara toplamda 15.815 sayfa gösterilmiş. (Bu sayıya derlemlerde yapılan aramalar sonucunda gösterilen sayfalar dahil değil.) Kullanıcıların %54‘ü yurtiçi, %46‘sı ise yurtdışından gelmişler.
Sitenin en fazla ziyaret edildiği günler 13 Kasım 2013 (69 ziyaretçi), 25 Nisan 2013 (64 ziyaretçi) ve 30 Ağustos 2013 (55 ziyaretçi) olarak görülmekte.

TS Corpus Overall Visitors

TS Corpus Overall Visitors

Coğrafi Bilgiler

Coğrafi olarak baktığımızda 80 ayrı ülke, 442 farklı şehirden ziyaretçinin siteye geldiğini görüyoruz. Doğal olarak en çok kullanıcının geldiği Türkiye’yi sırasıyla ABD, Japonya, İngiltere, Almanya, Hollanda, İrlanda, Çin, Rusya, Kanada ve Fransa izlemekte. Bu ülkeler ziyaretçi trafiğinin %22′sini oluşturuyorlar. Bir başka deyişle her beş ziyaretçiden biri bu ülkelerden gelmiş. Türkiye ziyaretçi trafiğinin %54‘ünü oluştururken, geri kalan 69 ülkeden gelen ziyaretçiler %24‘lik bir paya sahip.

TS Turkish Corpus

TS Turkish Corpus Visitors  – Countries Overview

Teknoloji Profili

Ziyaretçilerin kullandığı teknolojik altyapı dağılımına bakıldığında, 12 farklı işletim sistemi, 51 ayrı sistem yereli (sistem dili) ve  17 farklı internet tarayıcısı kullandıkları görülmekte. Hatta bir kullanıcı PlayStation’daki internet tarayıcısını kullanarak giriş yapmış 🙂

Ayrıca 39 farklı mobil cihazdan (tablet bilgisayar, smart phone vs.) toplam 188 ziyaretçi siteye gelmiş. (Bu, derlem arayüzünü CQPWeb’in klasik görünümünden alıp şu an beta haldeki responsive bir yapıya taşımanın gerekliliği açıkça ortaya koymakta.)

TS Corpus Visitors - Browsers

TS Corpus Visitors – Browsers

Referrals

Google Analytics’e göre 6 farklı sosyal paylaşım platformunda (Facebook, Twitter, Google+, FriendFeed, Academia ve LinkedIn) TS Corpus’a aktif link verilmiş. Daha geniş kapsamdaysa 73 ayrı websitesinde aktif link verilerek çalışmaya bağlantı sağlanmış. (Bu bağlantıların çok büyük bir kısmı Michigan Üniversitesi, Washington Üniversitesi, CWB resmi sitesi, Linguist List vb. dış kaynaklar.)

Aramalar

TS Corpus’un (şu an için) barındırdığı 3 ayrı derlemde toplam 689 kayıtlı kullanıcısı var. Kullanıcılar toplam 8723 arama yapmış.  (Günlük ortalama 12 arama)

Bu aramaların 6142‘si büyük-küçük harf duyarsız (ignore-case), 987‘si büyük-küçük harf duyarlı (case-sensitive) ve 1594‘ü CQP syntax ile yapılmış.

Teknik Altyapı

TS Corpus OVH veri merkezine (Fransa) taşındığından beri %99.7 uptime zamanıyla hizmet vermiş. %0.3 sunucunun ilk kurulumu sırasında yaşanmış. Sunucunun son üç aylık uptime oranı ve anlık durumu (Check  TS Server Status) adresinden görülebilir. TS Corpus sunucusu bugün itibarıyla 362 gündür kesintisiz çalışmakta. (15 Şubat 2013-12 Şubat 2014)

Sonuçlar

2 yıllık çalışmanın rakamsal sonuçları bunlar işte. Bundan bir yıl sonra, yani 3. yılın sonunda daha detaylı ve verimli çalışmalar ile şu an planlama aşamasında olan işlerin hayata geçirilmesi sonucunda bu rakamların katlanarak artacağına inanıyorum.

TS Corpus Aktif Çalışmalar

TS Corpus v2 +491M Tokens, PosTagged, Morphologically Tagged
TS Wikipedia +43M Tokens, PosTagged, Morphologically Tagged
TS TweetS +13M Tokens, PosTagged by a new tagset, Morphologically Tagged
TS Search Engine Over 1.2 million web pages indexed
TS Tokenizer Turkish Tokenizer capable of catching smileys, misspelling, etc.
PosTagger Turkish PosTagger

PS: Derlemlere erişmek için kullanıcı adı ve parola gerekmektedir. Eğer kullanıcı adı ve parolanız yoksa buraya tıklayarak yeni bir kullanıcı oluşturabilirsiniz.

Teşekkürler Türker Sezer ve Bengü Sezer 🙂

Sözcük Türü İşaretleme Üstüne Tespitler

Sözcük türü işaretleme (PosTagging), en basit haliyle, bir metni oluşturan her bir birime  görevini belirten bir etiket iliştirmektir.
Türkçe için de sözcük türü işaretleyiciler vardır. Basit bir Google araması yaparak bu yazılımlara ulaşmak ve kullanmak mümkündür.

Örnek vermek gerekirse, bir PosTagger ile “Ali eve geldi.” cümlesini işaretlediğimizde, Ali ve eve sözcüklerinin birer isim, geldi sözcüğünün bir eylem ve “.” noktalama işaretinin de bir noktalama işareti olduğunu yazılım ilgili her sözcüğe bir etiket ile iliştirecektir. Eğer yazılım girdi sözcük için bir etiket bulamazsa bu durumda o birimi “UnDef” olarak işaretleyecektir.

Son dönemde üstünde çalıştığım yeni bir derlem için 2004- 2013 yılları arasını kapsayan, 3 farklı gazeteden ve 6 haber başlığından toplam 500 bin sözcük içeren işaretlenmiş bir derlem hazırladım. Her yeni derlemde yaptığım gibi öncelikle UnDef (yani herhangi bir sözcük türü etiketi iliştirilememiş) olarak işaretlenen sözcükleri kontrol ettim.

Hazırladığım derlem hem sözcük türü olarak işaretlenmiş hem de metin türlerine göre ayrıştırılmış olduğu için, Türkçe adına sözcük türü ayrıştırmada metin türüne bağımlı başarım oranını da görüntülemiş oldum. Elbette 500 bin sözcüklük küçük bir derlem yeterli  örneklemi sağlayamasa da, temel bir görüntü vermek anlamında aşağıdaki verilerin önemli olduğunu düşünüyorum.

Resimde görüldüğü üzere “yıllar” ve UnDef olarak işaretlenmiş sözcükler arasında doğru bir orantı bulunmakta. “Hits”  ve “Cat Size” (MW) (words per million – wpm)satırındaki sayılar incelendiğinde yıllar içindeki artış açıkça görülebilmekte.TS CorpusÖte yandan bu dağılımı metin türlerine göre ele aldığımızda “Sanat” ve “Teknoloji” türlerinde diğer metin türlerine göre neredeyse iki kat daha fazla işaretlenememiş sözcük bulunduğu görünmekte.

distributionTeknoloji alanında, tahmin edilebileceği gibi yabancı sözcüklerin, sanat alanında ise özel isimlerin etiketlemesi sırasında başarım oranı oldukça düşük kalmakta.

Bu aynı zamanda, “her yıl dilimize giren yabancı sözcük sayısının artış göstermesi veya Türkçe karşılıkları yerine yabancı sözcüklerin daha sıklıkla kullanılıyor olması” şeklinde yorumlanabilir.

Bunun yanında iki önemli nokta daha var. Yazılım, metin içinde kullanılan kısaltmalar ve yazım yanlışları konusunda da (bunun beklenen bir durum olduğunu belirtmekte fayda var) oldukça düşük bir başarıma sahip.

Yazım yanlışları nedeniyle yazılım normalde çözümleyebildiği (“arzmetmek / arzetmek“, “uuslararası / uluslararası” vb.) sözcükleri de UnDef etiketiyle işaretlemekte.

Bunların yanısıra yabancı sözcüklerin “sanki Türkçe bir sözcükmüş gibi” ele alınması ve bu sözcüklerin sonlarına ek getirilerek üretilmiş sözcükler var. Örneğin “Google’ın” veya “tweetimin” gibi.

UnDeffs“UnDef” olarak etiketlenmiş sözcükleri belirli kategorilere ayırdığımda elde ettiğim sıralama

  • %34 Yabancı sözcükler
  • % 26 Yazım yanlışı
  • % 19 Diğer
  • % 14 Unclear
  • % 7 Kısaltmalar

şeklinde oluşmakta.

Unclear kategorisinde maç sonuçları (78-84), standard dışı imla işareti kullanımı (:!!?) ve girdi metni her bir satıra bir sözcük (word per line) yapısına çevirirken yapılan hatalardan kaynaklanan unsurlar bulunmakta.

Sonuçta, daha verimli sözcük türü işaretleme yazılımları için

  • dilimize yerleşmiş yabancı sözcüklerin detaylı bir listesini hazırlayarak yazılıma sağlamak,
  • kısaltmaların detaylı bir listesini hazırlayarak yazılıma sağlamak,
  • Türkçe metinleri daha doğru şekilde (özellikle imla işaretlerini ve sayıları) her satıra bir sözcük (wpl) gelecek şekilde dönüştürecek yazılımlar oluşturmak

öncelikli işler olarak görülüyor. Bu üç adımın yapılması, yukarıdaki rakamlar gözününde bulundurulduğunda UnDef olarak işaretlenmiş sözcüklerde başarımı %50’nin üstünde artıracak gibi görünüyor.

 

 

Debian 7 Wheezy

Uzun süredir beklediğim Debian 7 Wheezy nihayet biz kullanıcılara ulaştı. Dağıtımın sunulduğu 4 Mayıs tarihinde evimden uzakta olduğum için ne yazık ki 2 günlük bir gecikmeyle bilgisayarıma kurabildim. Uzun süredir kullandığım ve yine  Debian tabanlı olan bir başka dağıtım Linux Mint (14 Nadia) ise diğer diskimde yedeklerimi ve aktif çalışmalarımı tutmaya devam ediyor. (İki fiziksel diske sahip laptop kullanmanın ayrıcalığı olsa gerek 🙂 )tsCorups-Workstation

Sistemi kurar kurmaz da çalışmaya başladım. Resimden sanırım sistemin en büyük özelliği olan “stability” becerisini bu sürümde de devam ettireceği açıkça anlaşılmakta. Kurulum aşamasından başlayarak göze çarpan değişiklikler dağıtımla ilgili duyurulurda bahsedilen şekilde. Kurulum sırasında hiçbir zorluk yaşamıyorsunuz. Ayrıca yeni sürüme yükseltilen kernel ile donanım uyumluluğu da artırılmış. Debian 6 ile kullandığım MSI GT780DXR dizüstü bilgisayarın bazı donanım bileşenlerini sisteme tanıtmam gerekiyordu. Debian 7 ile wireless bağlantı dışında hiçbir sorun yaşamadan tüm donanımımı sistem kurulumundan itibaren kullanabilmeye başladım. Kablosuz ağ kartı için de Debian deposunda gelen firmware-iwlwifi paketini kurmak yeterli oldu.

$sudo apt-get install firmware-iwlwifi

Eğer benzer bir sorun yaşarsanız

$apt-cache search wireless

komutu ile birçok wireless sürücüsü ile ilgili paketleri listeleyebilir, donanımınıza uygun olanı seçip kurabilirsiniz.

Hızlı bir şekilde kendi isteklerime göre tanımladığım .bashrc dosyasını Nadia’dan alıp home dizinime kopyaladıktan sonra sistem kullanıma hazırdı. Alışkanlık gereği önce güncelleme olup olmadığını kontrol edip hemen ardından

$ sudo nano /etc/apt/sources.list

altına

deb http://ftp.debian.org/debian testing main contrib non-free

reposunu ekledim. Ve güncellemeleri tekrar kotrol edip sistemi kullanmaya başladım.

$sudo apt-get update && sudo apt-get upgrade

Sistemin kurulumundan itibaren tüm bu işlemleri yapmak ve çalışaya başlamak sadece 50 dakika kadar sürdü.

Debian 7 Wheezy öntanımlı olarak Gnome Shell 3.4.2 kullanarak geliyor.  Ubuntu’nun pek de hoşlanmadığım Unity masaüstü ortamı yerine zaten kullanmaya alışkın olduğum Gnome Shell şıklığı ve bana göre kullanım kolaylığı ile oldukça verimli bir masaüstü ortamı sağlamakta. Elbette diğer masaüstü ortamları da kullanıma hazır şekilde paket yöneticisinden erişilebilir durumda.

Sisteme genel olarak bakacak olursakDebian 7 Info System Settings>Details altından resimdeki gibi sistem bilgisine ulaşmak mümkün.

İlk izlenim olarak, hem kullandığım dizüstü bilgisayara (MSI GT780DXR) hem de evimde barındırdığım sunucuma (HP Pavillion 6000d) Debian 7’yi sorunsuz şekilde kurabilmek, önceki sürümlerde yaşadığım donanım sorunlarını yaşamamak ve tabi ki kullandığım tüm paketlerin paket yöneticisinde yerini almış olması kesinlikle keyif verici.