Internet Slang – İnternet Argosu – Turkish Twitter Corpus –

Argo dilin bir parçası. Ülkemizde argonun yaygın olarak kullanıldığı da bir gerçek. Ancak yazılı dilde argoyu görmek pek sık karşılaşılan bir durum değil. Genellikle mizah dergilerinde ve belli oranda sansüre tabi tutularak (bazı karakterlerin * ile değiştirilmesi vb.) argoyu yazılı olarak görüyoruz.
Ancak “sosyal medya” “otokontrol” dışında fazlaca bir kontrol mekanizmasının işletilmemesinin bir sonucu olarak argoyu daha sık gözlemlediğimiz bir mecra olarak karşımıza çıkıyor.
Tweet’lerden oluşan bir derlem hazırlarken, “internet argosu” etiketini kullanmamak olmazdı 🙂 Bu amaçla belirli sözcükleri int_Slang (internet argosu) etiketiyle işaretledim. Aşağıdaki liste bu sözcükleri ve bu sözcüklerin kullanım sıklıklarını göstermekte.
Yaklaşık 1 milyon Tweet – 13 milyon birimden oluşan bu derlemde ayrıca intAbbr (internete özgü kısaltmalar), Emoticons (Smiley İşaretleri), intEmphasis (yazımda kullanılan vurgular), YY (yazım yanlışları) gibi, “daha önce bir Türkçe derlemde hiç etiketlenmemiş” olan yeni birimler de var. Bu derlemle ilgili daha detaylı bilgiye buradan ulaşabilirsiniz.

Derleme 56 farklı sözcük int_Slang etiketiyle işaretlenmiş. Bu sözcüklerin toplamda 21.350 defa derlem içinde kullanılmış.

NoSearch ResultNumber of OccurencesPercent
1lan1483396.48
2amk16367.66
3aq6042.83
4len5112.39
5panpa4101.92
6ulen3881.82
7apaçi3691.73
8koyim2451.15
9laa1040.49
10a.q.1000.47
11mına930.44
12got920.43
13laan910.43
14kanki900.42
15nah900.42
16lann890.42
17tırt850.40
18koyucam810.38
19b*k810.38
20kıro770.36
21shit720.34
22pic660.31
23sikko640.30
24kro550.26
25hassiktir480.22
26cincon460.22
27g*t460.22
28wtf460.22
29bitch440.21
30amınakoyim430.20
31popisi430.20
32sikik430.20
33popi420.20
34yavsak370.17
35asdfgh360.17
36kanks350.16
37sikicem340.16
38damn340.16
39sokucam320.15
40amina320.15
41layn320.15
42uleyn310.15
43siktirgit310.15
44sıçıyım310.15
45oluum300.14
46cicişler290.14
47ipne280.13
48lağn270.13
49çiko260.12
50s*ktir260.12
51yarrak260.12
52bsg220.10
53kokoş180.08
54sikişenses150.07
55A.Q.60.03
56cicis50.02

internet_slang

TS TweetS Corpus (Turkish Twitter Corpus) İnternet Slang PosTag

TS Corpus -TS Abstract Derlemi-

Bu derlem, Öztürk ve diğerleri (2014)*, Türkçe Etiketli Metin Derlemi çalışması için oluşturan veriseti kullanılarak hazırlanmıştır.


TS Corpus projesi, farklı Türkçe derlemler üretmek ve doğal dil işlemede kullanılabilecek araçlar ve veri setleri oluşturmak üstünde yoğunlaşan bir çalışma. Geçtiğimiz 2 yıl içinde çalışma kapsamında  7 farklı çevrimiçi derlem ve yine çevrimiçi çalışan 4 farklı araç yayınladım. Bu derlemlerin sonuncusu “TS Abstract Corpus”.

TS Abstract Corpus, akademik yazından örnekler getirmek adına, 32 farklı bilimsel disiplinden toplam 6234 özet (abstract) içeren bir Türkçe derlem. Derlemde bulunan tüm metinler üstmetin bilgilerine (metadata) göre ayrıştırılmış (kaynak veriseti ilgili meta bilgilerini içerecek şekilde hazırlanmıştır) ve hem sözcük türü hem de biçimbirimsel olarak işaretlenmiş (TS Corpus çalışması için hazırlanan betikler kullanılarak) olarak sunulmakta. Toplam 1 milyon 50 bin birimden (token) oluşan veri, projenin barındırdığı tüm diğer derlemler gibi CWB/CQPWeb altyapısını kullanarak, bu altyapının sağladığı tüm özellikleri kullanıcılara sunmakta.

Derlemi oluşturan veri, alan (domain) ve metin türü (genre) sınıflandırmasının yanısıra, sonuçların daha detaylı olarak gözlenebilmesi için ilgili “bilimsel disiplin” (discipline) olarak belirlenen bir alt sınıf ile de işaretlenmiş. Böylelikle metin dağılımındaki hiyerarşi Domain > Genre > Discipline olarak sunulmuş oldu. Örnek vermek gerekirse “eczacılık” disiplini, Physical Sciences > Medicine > Pharmacology hiyerarşisinde yer almakta. Yani kullanıcı arama kriterini sadece bilimsel bir disiplin olarak eczacılık (pharmacolgy), bir üst basamakta tıp bilimleri (medicine)  veya en geniş kapsamda fen bilimleri (physical sciences) olarak seçebilecektir. Böylelikle, sözcük sıklığı gibi temel çalışmaların detaylı biçimde yapılabilmesine, farklı disiplinlerin kolaylıkla karşılaştırılabilmesine olanak sağlanmıştır.

Derlemleri yalnızca dilbilime veri sağlayan araçlar olarak görmemek gereklidir. Doğal dil işleme, makina öğrenme (machine learning) ve benzeri konularla ile ilgili çalışanlar araştırmacılar ve akademisyenler de derlemlerden faydalanmaktadır.

Alanda, akademik yazımla ilgili derlem çalışmaları bulunsa da, bu çalışmalara konu olan verisetleri (ve derlemler) kullanıcılarla paylaşılmamış veya kullanıma açılmamıştır. Bu anlamda TS Abstract Corpus’un konuya ilgi duyan araştırmacılara kaynak sağlayacağını umuyorum. Aynı zamanda derlemin sözcük türü (PosTag) ve biçimbirimsel (Morphological Analysis) olarak etiketlenmiş olması ve sözcük kökü (Lemma) bazında aramalar yapmaya izin vermesi, umuyorum ki derlemi verimli bir kaynak olarak kullanmayı sağlayacaktır.

Bu çalışmanın (kendi adıma) temel amaçlarından biri de “otomatik metin türü ayrıştırma”  çalışmalarında kullanmak üzere veri setleri elde etmektir.  Derlemdeki metin türü ayrıştırmasını da bu amaca uygun olacak şekilde yapmaya çalıştım.

Derlemdeki metin dağılımı aşağıdaki tabloda verilmiştir.

Social
Sciences
  Physical Sciences  
Humanities&ArtsSocial SciencesPolitics&Law&EducationMedicineNatural SciencesTechnology&Engineering
AnthropologyStock And MarketingPolitical SciencesBasic Medical SciencesGeologyEnvironmental Engineering
ArcheologyEconomyEducational SciencesInternal MedicineBiologyIndustrial Engineering
LinguisticsGeogrohpyLawExternal DiseasesAnimal BreedingFood Engineering
ReligionEconometricsPharmacologyCivil Engineering
PhilosophyTourismBiomedicalMechanical Engineering
CommunicationArchitecture
Information Management
Sociology
History

Derlemde yapılan tüm aramaları yukarıda anılan meta bilgilerine göre ayrıştırarak sonuçları hem liste halinde hem de grafik olarak görmek ve sonuçları daha sonra kullanmak üzere indirebilmek mümkündür. bağlam* sözcüğünün sorgusu sonrası elde edilen dağılım grafiği aşağıdaki resimde görüldüğü gibi olacaktır.

Türkçe Derlem - Türkçe Akademik Yazın Özet Derlemi

TS Abstract Corpus – Distribution Graphic

Derleme erişmek için TS Corpus websitesindeki kayıt formunu doldurarak bir kullanıcı oluşturmak yeterlidir.

Ve elbette bu çalışma, proje altındaki tüm diğer çalışmalar gibi, tamamıyla özgür yazılımlar kullanılarak hazırlandı.

 Kaynakça

* Ozturk, S., Sankur, B., Gungor, T., Yilmaz, M. B., Koroglu, B., Agin, O., … & Ahat, M. (2014, April). Turkish labeled text corpus. In Signal Processing and Communications Applications Conference (SIU), 2014 22nd (pp. 1395-1398). IEEE.

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:
* Sezer, T. 2016. Tweets Corpus: Building a Corpus by Social Media. Journal of Milli Eğitim Education and Social Sciences. Spring 2016, 210, ss: 621-633
* 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.

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.