From f1446b025787a2b439ce583dc0cfca2a04d34449 Mon Sep 17 00:00:00 2001 From: ines Date: Sat, 24 Mar 2018 17:31:07 +0100 Subject: [PATCH] Port over Turkish changes --- spacy/lang/tr/examples.py | 22 +++ spacy/lang/tr/lex_attrs.py | 31 +++ spacy/lang/tr/stop_words.py | 274 +++++++++++++++----------- spacy/lang/tr/tokenizer_exceptions.py | 110 ++++++++++- 4 files changed, 317 insertions(+), 120 deletions(-) create mode 100644 spacy/lang/tr/examples.py create mode 100644 spacy/lang/tr/lex_attrs.py diff --git a/spacy/lang/tr/examples.py b/spacy/lang/tr/examples.py new file mode 100644 index 000000000..e17586a37 --- /dev/null +++ b/spacy/lang/tr/examples.py @@ -0,0 +1,22 @@ +# coding: utf8 +from __future__ import unicode_literals + + +""" +Example sentences to test spaCy and its language models. +>>> from spacy.lang.tr.examples import sentences +>>> docs = nlp.pipe(sentences) +""" + + +sentences = [ + "Neredesin?", + "Neredesiniz?", + "Bu bir cümledir.", + "Sürücüsüz araçlar sigorta yükümlülüğünü üreticilere kaydırıyor.", + "San Francisco kaldırımda kurye robotları yasaklayabilir." + "Londra İngiltere'nin başkentidir.", + "Türkiye'nin başkenti neresi?", + "Bakanlar Kurulu 180 günlük eylem planını açıkladı.", + "Merkez Bankası, beklentiler doğrultusunda faizlerde değişikliğe gitmedi." +] diff --git a/spacy/lang/tr/lex_attrs.py b/spacy/lang/tr/lex_attrs.py new file mode 100644 index 000000000..862a64825 --- /dev/null +++ b/spacy/lang/tr/lex_attrs.py @@ -0,0 +1,31 @@ +# coding: utf8 +from __future__ import unicode_literals + +from ...attrs import LIKE_NUM + + +#Thirteen, fifteen etc. are written separate: on üç + +_num_words = ['bir', 'iki', 'üç', 'dört', 'beş', 'altı', 'yedi', 'sekiz', + 'dokuz', 'on', 'yirmi', 'otuz', 'kırk', 'elli', 'altmış', + 'yetmiş', 'seksen', 'doksan', 'yüz', 'bin', 'milyon', + 'milyar', 'katrilyon', 'kentilyon'] + + +def like_num(text): + text = text.replace(',', '').replace('.', '') + if text.isdigit(): + return True + if text.count('/') == 1: + num, denom = text.split('/') + if num.isdigit() and denom.isdigit(): + return True + if text.lower() in _num_words: + return True + return False + + +LEX_ATTRS = { + LIKE_NUM: like_num +} + diff --git a/spacy/lang/tr/stop_words.py b/spacy/lang/tr/stop_words.py index aaed02a3e..840fcc13e 100644 --- a/spacy/lang/tr/stop_words.py +++ b/spacy/lang/tr/stop_words.py @@ -10,16 +10,12 @@ acep adamakıllı adeta ait -altmýþ -altmış -altý -altı ama amma anca ancak arada -artýk +artık aslında aynen ayrıca @@ -29,46 +25,82 @@ açıkçası bana bari bazen -bazý bazı +bazısı +bazısına +bazısında +bazısından +bazısını +bazısının başkası -baţka +başkasına +başkasında +başkasından +başkasını +başkasının +başka belki ben +bende benden beni benim beri beriki -beþ -beş -beţ +berikinin +berikiyi +berisi bilcümle bile -bin binaen binaenaleyh -bir biraz birazdan birbiri +birbirine +birbirini +birbirinin +birbirinde +birbirinden birden birdenbire biri +birine +birini +birinin +birinde +birinden birice birileri +birilerinde +birilerinden +birilerine +birilerini +birilerinin birisi +birisine +birisini +birisinin +birisinde +birisinden birkaç birkaçı +birkaçına +birkaçını +birkaçının +birkaçında +birkaçından birkez birlikte birçok birçoğu -birþey -birþeyi +birçoğuna +birçoğunda +birçoğundan +birçoğunu +birçoğunun birşey birşeyi -birţey bitevi biteviye bittabi @@ -96,6 +128,11 @@ buracıkta burada buradan burası +burasına +burasını +burasının +burasında +burasından böyle böylece böylecene @@ -106,8 +143,34 @@ büsbütün bütün cuk cümlesi +cümlesine +cümlesini +cümlesinin +cümlesinden +cümlemize +cümlemizi +cümlemizden +çabuk +çabukça +çeşitli +çok +çokları +çoklarınca +çokluk +çoklukla +çokça +çoğu +çoğun +çoğunca +çoğunda +çoğundan +çoğunlukla +çoğunu +çoğunun +çünkü da daha +dahası dahi dahil dahilen @@ -124,19 +187,17 @@ denli derakap derhal derken -deđil değil değin diye -diđer diğer diğeri -doksan -dokuz +diğerine +diğerini +diğerinden dolayı dolayısıyla doğru -dört edecek eden ederek @@ -146,7 +207,6 @@ edilmesi ediyor elbet elbette -elli emme en enikonu @@ -168,10 +228,10 @@ evvelce evvelden evvelemirde evveli -eđer eğer fakat filanca +filancanın gah gayet gayetle @@ -197,6 +257,10 @@ haliyle handiyse hangi hangisi +hangisine +hangisine +hangisinde +hangisinden hani hariç hasebiyle @@ -207,17 +271,27 @@ hem henüz hep hepsi +hepsini +hepsinin +hepsinde +hepsinden her herhangi herkes +herkesi herkesin +herkesten hiç hiçbir hiçbiri +hiçbirine +hiçbirini +hiçbirinin +hiçbirinde +hiçbirinden hoş hulasaten iken -iki ila ile ilen @@ -240,43 +314,55 @@ iyicene için iş işte -iţte kadar kaffesi kah kala -kanýmca +kanımca karşın -katrilyon kaynak kaçı +kaçına +kaçında +kaçından +kaçını +kaçının kelli kendi +kendilerinde +kendilerinden kendilerine +kendilerini +kendilerinin kendini kendisi +kendisinde +kendisinden kendisine kendisini +kendisinin kere kez keza kezalik keşke -keţke ki kim kimden kime kimi +kiminin kimisi +kimisinde +kimisinden +kimisine +kimisinin kimse kimsecik kimsecikler külliyen -kýrk -kýsaca -kırk kısaca +kısacası lakin leh lütfen @@ -289,13 +375,10 @@ međer meğer meğerki meğerse -milyar -milyon mu mü -mý mı -nasýl +mi nasıl nasılsa nazaran @@ -304,6 +387,8 @@ ne neden nedeniyle nedenle +nedenler +nedenlerden nedense nerde nerden @@ -332,32 +417,27 @@ olduklarını oldukça olduğu olduğunu -olmadı -olmadığı olmak olması -olmayan -olmaz olsa olsun olup olur olursa oluyor -on ona onca onculayın onda ondan onlar +onlara onlardan -onlari -onlarýn onları onların onu onun +ora oracık oracıkta orada @@ -365,9 +445,26 @@ oradan oranca oranla oraya -otuz oysa oysaki +öbür +öbürkü +öbürü +öbüründe +öbüründen +öbürüne +öbürünü +önce +önceden +önceleri +öncelikle +öteki +ötekisi +öyle +öylece +öylelikle +öylemesine +öz pek pekala peki @@ -379,8 +476,6 @@ sahi sahiden sana sanki -sekiz -seksen sen senden seni @@ -393,6 +488,27 @@ sonra sonradan sonraları sonunda +şayet +şey +şeyden +şeyi +şeyler +şu +şuna +şuncacık +şunda +şundan +şunlar +şunları +şunların +şunu +şunun +şura +şuracık +şuracıkta +şurası +şöyle +şimdi tabii tam tamam @@ -400,8 +516,8 @@ tamamen tamamıyla tarafından tek -trilyon tüm +üzere var vardı vasıtasıyla @@ -429,84 +545,16 @@ yaptığını yapılan yapılması yapıyor -yedi yeniden yenilerde yerine -yetmiþ -yetmiş -yetmiţ yine -yirmi yok yoksa yoluyla -yüz yüzünden zarfında zaten zati zira -çabuk -çabukça -çeşitli -çok -çokları -çoklarınca -çokluk -çoklukla -çokça -çoğu -çoğun -çoğunca -çoğunlukla -çünkü -öbür -öbürkü -öbürü -önce -önceden -önceleri -öncelikle -öteki -ötekisi -öyle -öylece -öylelikle -öylemesine -öz -üzere -üç -þey -þeyden -þeyi -þeyler -þu -þuna -þunda -þundan -þunu -şayet -şey -şeyden -şeyi -şeyler -şu -şuna -şuncacık -şunda -şundan -şunlar -şunları -şunu -şunun -şura -şuracık -şuracıkta -şurası -şöyle -ţayet -ţimdi -ţu -ţöyle """.split()) diff --git a/spacy/lang/tr/tokenizer_exceptions.py b/spacy/lang/tr/tokenizer_exceptions.py index c945c0058..524873aa9 100644 --- a/spacy/lang/tr/tokenizer_exceptions.py +++ b/spacy/lang/tr/tokenizer_exceptions.py @@ -3,11 +3,6 @@ from __future__ import unicode_literals from ...symbols import ORTH, NORM - -# These exceptions are mostly for example purposes – hoping that Turkish -# speakers can contribute in the future! Source of copy-pasted examples: -# https://en.wiktionary.org/wiki/Category:Turkish_language - _exc = { "sağol": [ {ORTH: "sağ"}, @@ -16,11 +11,112 @@ _exc = { for exc_data in [ - {ORTH: "A.B.D.", NORM: "Amerika Birleşik Devletleri"}]: + {ORTH: "A.B.D.", NORM: "Amerika Birleşik Devletleri"}, + {ORTH: "Alb.", NORM: "Albay"}, + {ORTH: "Ar.Gör.", NORM: "Araştırma Görevlisi"}, + {ORTH: "Arş.Gör.", NORM: "Araştırma Görevlisi"}, + {ORTH: "Asb.", NORM: "Astsubay"}, + {ORTH: "Astsb.", NORM: "Astsubay"}, + {ORTH: "As.İz.", NORM: "Askeri İnzibat"}, + {ORTH: "Atğm", NORM: "Asteğmen"}, + {ORTH: "Av.", NORM: "Avukat"}, + {ORTH: "Apt.", NORM: "Apartmanı"}, + {ORTH: "Bçvş.", NORM: "Başçavuş"}, + {ORTH: "bk.", NORM: "bakınız"}, + {ORTH: "bknz.", NORM: "bakınız"}, + {ORTH: "Bnb.", NORM: "Binbaşı"}, + {ORTH: "bnb.", NORM: "binbaşı"}, + {ORTH: "Böl.", NORM: "Bölümü"}, + {ORTH: "Bşk.", NORM: "Başkanlığı"}, + {ORTH: "Bştbp.", NORM: "Baştabip"}, + {ORTH: "Bul.", NORM: "Bulvarı"}, + {ORTH: "Cad.", NORM: "Caddesi"}, + {ORTH: "çev.", NORM: "çeviren"}, + {ORTH: "Çvş.", NORM: "Çavuş"}, + {ORTH: "dak.", NORM: "dakika"}, + {ORTH: "dk.", NORM: "dakika"}, + {ORTH: "Doç.", NORM: "Doçent"}, + {ORTH: "doğ.", NORM: "doğum tarihi"}, + {ORTH: "drl.", NORM: "derleyen"}, + {ORTH: "Dz.", NORM: "Deniz"}, + {ORTH: "Dz.K.K.lığı", NORM: "Deniz Kuvvetleri Komutanlığı"}, + {ORTH: "Dz.Kuv.", NORM: "Deniz Kuvvetleri"}, + {ORTH: "Dz.Kuv.K.", NORM: "Deniz Kuvvetleri Komutanlığı"}, + {ORTH: "dzl.", NORM: "düzenleyen"}, + {ORTH: "Ecz.", NORM: "Eczanesi"}, + {ORTH: "ekon.", NORM: "ekonomi"}, + {ORTH: "Fak.", NORM: "Fakültesi"}, + {ORTH: "Gn.", NORM: "Genel"}, + {ORTH: "Gnkur.", NORM: "Genelkurmay"}, + {ORTH: "Gn.Kur.", NORM: "Genelkurmay"}, + {ORTH: "gr.", NORM: "gram"}, + {ORTH: "Hst.", NORM: "Hastanesi"}, + {ORTH: "Hs.Uzm.", NORM: "Hesap Uzmanı"}, + {ORTH: "huk.", NORM: "hukuk"}, + {ORTH: "Hv.", NORM: "Hava"}, + {ORTH: "Hv.K.K.lığı", NORM: "Hava Kuvvetleri Komutanlığı"}, + {ORTH: "Hv.Kuv.", NORM: "Hava Kuvvetleri"}, + {ORTH: "Hv.Kuv.K.", NORM: "Hava Kuvvetleri Komutanlığı"}, + {ORTH: "Hz.", NORM: "Hazreti"}, + {ORTH: "Hz.Öz.", NORM: "Hizmete Özel"}, + {ORTH: "İng.", NORM: "İngilizce"}, + {ORTH: "Jeol.", NORM: "Jeoloji"}, + {ORTH: "jeol.", NORM: "jeoloji"}, + {ORTH: "Korg.", NORM: "Korgeneral"}, + {ORTH: "Kur.", NORM: "Kurmay"}, + {ORTH: "Kur.Bşk.", NORM: "Kurmay Başkanı"}, + {ORTH: "Kuv.", NORM: "Kuvvetleri"}, + {ORTH: "Ltd.", NORM: "Limited"}, + {ORTH: "Mah.", NORM: "Mahallesi"}, + {ORTH: "mah.", NORM: "mahallesi"}, + {ORTH: "max.", NORM: "maksimum"}, + {ORTH: "min.", NORM: "minimum"}, + {ORTH: "Müh.", NORM: "Mühendisliği"}, + {ORTH: "müh.", NORM: "mühendisliği"}, + {ORTH: "MÖ.", NORM: "Milattan Önce"}, + {ORTH: "Onb.", NORM: "Onbaşı"}, + {ORTH: "Ord.", NORM: "Ordinaryüs"}, + {ORTH: "Org.", NORM: "Orgeneral"}, + {ORTH: "Ped.", NORM: "Pedagoji"}, + {ORTH: "Prof.", NORM: "Profesör"}, + {ORTH: "Sb.", NORM: "Subay"}, + {ORTH: "Sn.", NORM: "Sayın"}, + {ORTH: "sn.", NORM: "saniye"}, + {ORTH: "Sok.", NORM: "Sokak"}, + {ORTH: "Şb.", NORM: "Şube"}, + {ORTH: "Şti.", NORM: "Şirketi"}, + {ORTH: "Tbp.", NORM: "Tabip"}, + {ORTH: "T.C.", NORM: "Türkiye Cumhuriyeti"}, + {ORTH: "Tel.", NORM: "Telefon"}, + {ORTH: "tel.", NORM: "telefon"}, + {ORTH: "telg.", NORM: "telgraf"}, + {ORTH: "Tğm.", NORM: "Teğmen"}, + {ORTH: "tğm.", NORM: "teğmen"}, + {ORTH: "tic.", NORM: "ticaret"}, + {ORTH: "Tug.", NORM: "Tugay"}, + {ORTH: "Tuğg.", NORM: "Tuğgeneral"}, + {ORTH: "Tümg.", NORM: "Tümgeneral"}, + {ORTH: "Uzm.", NORM: "Uzman"}, + {ORTH: "Üçvş.", NORM: "Üstçavuş"}, + {ORTH: "Üni.", NORM: "Üniversitesi"}, + {ORTH: "Ütğm.", NORM: "Üsteğmen"}, + {ORTH: "vb.", NORM: "ve benzeri"}, + {ORTH: "vs.", NORM: "vesaire"}, + {ORTH: "Yard.", NORM: "Yardımcı"}, + {ORTH: "Yar.", NORM: "Yardımcı"}, + {ORTH: "Yd.Sb.", NORM: "Yedek Subay"}, + {ORTH: "Yard.Doç.", NORM: "Yardımcı Doçent"}, + {ORTH: "Yar.Doç.", NORM: "Yardımcı Doçent"}, + {ORTH: "Yb.", NORM: "Yarbay"}, + {ORTH: "Yrd.", NORM: "Yardımcı"}, + {ORTH: "Yrd.Doç.", NORM: "Yardımcı Doçent"}, + {ORTH: "Y.Müh.", NORM: "Yüksek mühendis"}, + {ORTH: "Y.Mim.", NORM: "Yüksek mimar"}]: _exc[exc_data[ORTH]] = [exc_data] -for orth in ["Dr."]: +for orth in [ + "Dr.", "yy."]: _exc[orth] = [{ORTH: orth}]