Jekyll2019-02-17T20:26:53+00:00https://tech.teaddict.net/root > Coding Blog, Programming, Scala, Software Developer, Finlandcoding blog about programming and linux systems. learning scala, dotty, linux, ubuntu, software development, software engineering, security, angular, javascript, docker.teaddictGet a free alert when your website is down!2019-02-16T18:30:00+00:002019-02-16T18:30:00+00:00https://tech.teaddict.net/server/web%20site/optimization/2019/02/16/free-website-down-notifier<p>I have been struggling with weird server problems for a while and sometimes I couldn’t notice my server is down. Mostly I notice them when I check my Google Analytics reports because the visitor numbers drops quickly. Finally, I found a free service which checks your web site every 10 minute and sends you a free alert if it is down. They have some pro versions too but free version is neough for me because I only want to get alert when it is down. After sign-up I waited a day, and tested the service, so my server was down for ten minutes, and I got the mail:</p>
<div class="highlighter-rouge"><pre class="highlight"><code>Hello,
We found https://teaddict.net to be down.
Reason: Could not connect to server in 25 seconds.
We will notify you again when your website is back.
</code></pre>
</div>
<p>Basically they try to connect every ten minutes to your website, and their threshold is 25 seconds. After my website was up again, I got the next mail:</p>
<div class="highlighter-rouge"><pre class="highlight"><code>Hello,
We found https://teaddict.net to be up again.
Your site was down for 3 minutes.
</code></pre>
</div>
<p>The service called <code class="highlighter-rouge">DownNotifier</code> and can be signed-up from <a href="https://www.downnotifier.com">here</a></p>teaddictI have been struggling with weird server problems for a while and sometimes I couldn’t notice my server is down. Mostly I notice them when I check my Google Analytics reports because the visitor numbers drops quickly. Finally, I found a free service which checks your web site every 10 minute and sends you a free alert if it is down. They have some pro versions too but free version is neough for me because I only want to get alert when it is down. After sign-up I waited a day, and tested the service, so my server was down for ten minutes, and I got the mail:Scala Dotty Nedir?2018-08-02T18:30:00+00:002018-08-02T18:30:00+00:00https://tech.teaddict.net/scala/scala%203/software%20development/coding/dotty/2018/08/02/scala-dotty-nedir<p><code class="highlighter-rouge">DOT</code> açılımı <code class="highlighter-rouge">Dependent Object Types (DOT)</code> yani <code class="highlighter-rouge">Bağımlı Nesne Tipleri</code>. Scala 2 için <code class="highlighter-rouge">scalac</code> derleycisini kullanırken, Scala 3 ile birlikte artık <code class="highlighter-rouge">dotc</code> derleyicisini kullanacağız. <code class="highlighter-rouge">DOT</code> hakkında daha fazla bilgi için <a href="http://lampwww.epfl.ch/~amin/dot/fool.pdf">bu dokümanı</a> okuyabilirsiniz.</p>
<h5 id="dotty-yeni-bir-programlama-dili-mi">Dotty yeni bir programlama dili mi?</h5>
<p>Hayır. Dotty, Scala dilinin yeni versiyonu olacak.</p>
<h5 id="dotty-yeni-scala-derleyicisi">Dotty: Yeni Scala Derleyicisi</h5>
<p>Dotty, Scala ile yazılmış ve Scala 3.0 diye tanımlanmış olsa da yeni bir progralama dili olarak kabul edebiliriz çünkü yeni bir derleyici ve araçlarla birlikte geliyor.</p>
<h5 id="kısaca-scala-3deki-yeni-Özellikler">Kısaca Scala 3’deki Yeni Özellikler</h5>
<ul>
<li>basitleştirildi</li>
<li>tutarsızlık ve beklenmedik davranışlar düzeltildi.</li>
<li>tasarım güçlü temeller üzerine kuruldu</li>
<li>dil yapısı güçlendirilerek dilin tutarlılığı, güvenliği, ergonomisi ve performansı iyileştirildi</li>
</ul>teaddictDOT açılımı Dependent Object Types (DOT) yani Bağımlı Nesne Tipleri. Scala 2 için scalac derleycisini kullanırken, Scala 3 ile birlikte artık dotc derleyicisini kullanacağız. DOT hakkında daha fazla bilgi için bu dokümanı okuyabilirsiniz.Kelime Zinciri Algoritmasıyla Türkçe Metin Özetleme | Online otomatik metin özetleme | Metin özetleme programı | Özet Çıkarma Programı2018-07-26T15:36:15+00:002018-07-26T15:36:15+00:00https://tech.teaddict.net/t%C3%BCrk%C3%A7e%20metin%20%C3%B6zetleme/software%20development/coding/scala/2018/07/26/turkce-metin-ozetleme-ornegi<h1 id="kelime-zinciri-algoritmasıyla-türkçe-metin-Özetleme---scala">Kelime Zinciri Algoritmasıyla Türkçe Metin Özetleme - SCALA</h1>
<hr />
<h3 id="algoritma">Algoritma</h3>
<blockquote>
<p><strong>Kelime Zinciri Algoritması:</strong></p>
</blockquote>
<p>Bu algoritma metnin ana konusunu belirmeye çalışmaktadır. Metindeki kelimeler arasında “anlamsal” bağ kurup, aynı anlama gelen kelimelerden bir zincir oluşturulmaktadır [9]. Daha sonra belirlenen puanlama ve sezgisel yöntemlere göre özet niteliği taşıyabilecek cümleleri seçerek belirlemektedir. Bu algoritma için en önemli şey güçlü bir “kelime ağının” var olmasıdır. Çünkü tüm zincirler kelimeler arasındaki ilişkilerden yola çıkarak oluşturulacağı için, güçlü bir kelime ağı belirsiz kalacak kelime sayısını azaltacak, güçlü zincirler kurulmasını sağlayacaktır. Türkçe için hazırlanmış tek kelime ağı Dr. Özlem Çetinoglu ve Dr. Kemal Oflazer tarafından 2004 yılında “BalkaNet” projesiyle oluşturulmuştur [10]. Tarafımızdan geliştirilecek bu proje kapsamında, wordnetin javaya aktarılması ve kullanılabilir hale getirilmesi gerekmekte idi. Öncelikle XML halinde bulunan bu listeyi çözümleyerek (parsing) yeniden oluşturulmuştur. Kullanılacak formata dönüşüm gerçekleştirilmiştir. Daha sonra Yıldız Teknik Üniversitesi Bilgisayar Mühendisliği bölümünden Emre Yıldız’ın oluşturduğu “Anlamsal İlişkiler Veri Kümesi” projesi dökumanları da kullanılacak formata dönüştürülmüştür [11]. Bu iki listeyi birleştirip kendi projemiz için ortak bir kelime ağı oluşturduk. Bu kelime ağı içindeki verileri ön aşamadan geçirdik, bu aşamalar;</p>
<blockquote>
<ul>
<li>Etkisiz kelimeler temizlendi.</li>
<li>Atasözler ve deyimler çıkartıldı.</li>
<li>Hyponymy ilişkiler, hypernymy ilişkilere dönüştürüldü. (Çünkü bu şekilde kelimelerin aranması kolaylaşmaktadır.)</li>
<li>Sıfatlar ve fiiller çıkartıldı.</li>
<li>Yer belirten adlar düzenlendi.</li>
<li>Terim listeleri eklendi.</li>
<li>Sayılar çıkartıldı.</li>
</ul>
</blockquote>
<p>Uygulamamızda tüm bu listeyi okuyup her kelime için bir ilişki listesi oluşturuyoruz, bir kelime girildiğinde bunun ilişkili olduğu kelimeler liste halinde kullanıcıya gönderilmektedir. Bu sistemin ileride ayrı bir servis olarak kullanıma sunulması planlanmaktadır. Böylece çevrimiçi Türkçe kelime ağı erişime açılmış olacaktır.</p>
<blockquote>
<p><strong>Zincirlerin puanlanması:</strong></p>
<p>Bu aşamada zincirdeki kelimelerin aralarındaki ilişkiye göre puanlamasını gerçekleştirdik. Regina Barzilay tarafından hazırlanmış olan “Using Lexical Chains for Text Summarization [13]” doktora tezinden ve “Assessing the Impact of Lexical Chain Scoring Methods and Sentence Extraction Schemes on Summarization [14]” makalesinden faydalanılmıştır. Oluşturdukları puanlama sistemi kendi uygulamamıza göre değiştirilmiştir. Aşağıdaki şekilde bir puanlama sistemi oluşturulmuştur:</p>
</blockquote>
<blockquote>
<ul>
<li>synonymy = 10</li>
<li>antonymy = 7</li>
<li>hypernymy = 4</li>
<li>hyponymy = 4</li>
<li>related_with =4</li>
<li>holo_part = 4</li>
<li>holo_member = 4</li>
<li>yan_kavram = 4</li>
</ul>
</blockquote>
<p>Ayrıca zincirlerin gücünü belirlemek için ayrı bir sistem daha kullanılmıştır. Bu sistem şu
aşamalardan oluşmaktadır:</p>
<blockquote>
<ul>
<li>Zincirdeki benzersiz kelimelerin sayısını bul</li>
<li>Homojenlik değerini bul = 1 - (benzersiz kelime sayısı / tüm kelimelerin sayısı)</li>
<li>Eşik değerini bul = ortalama puan + (2 ∗ puanların standart sapması)</li>
<li>Eşik değerinin üstündeki zincirleri güçlü zincirler olarak listeye al
######
<strong>Cümle Seçimi İşlemleri:</strong></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>Sezgisel Algoritma 1
Bu algoritma her zincirdeki ilk kelimenin yani zinciri başlatan kelimenin anahtar kelime olarak alınmasına dayanmaktadır. Bu anahtar kelimenin geçtiği ilk cümle tespit edilerek seçilmiştir.</li>
<li>Sezgisel Algoritma 2
Bu algoritma her zincirdeki kelimelerin frekansının hesaplanmasına dayanmaktadır. Öncelikle tüm kelimelerin frekansı hesaplanır ve zincirdeki kelimelerin frekans ortalaması bulunur. Ortalama frekansın üstündeki kelimeler işleme alınır. Bu kelimelerin ortak olarak geçtikleri bir cümle mevcut ise bu cümle seçilir, eğer hiçbir kelimenin kesiştiği bir cümle yoksa, en yüksek frekanslı cümlenin geçtiği cümle alınır.</li>
<li>Sezgisel Algoritma 3
Bu algoritma her zincirin yoğunlaştığı paragrafı bulmaya ve bu paragrafta zincirdeki
kelimeleri içeren cümle frekansına dayanmaktadır. Eğer tüm kelimeler aynı paragraftaysa doğrudan bu paragraftaki cümlelerin analizi yapılır. Eğer zincirdeki kelimeler farklı paragraflardaysa öncelikle paragrafların frekansları alınır. En yüksek frekanslı paragraf seçilir ve bu paragraftaki cümlelerin analizi yapılır. Cümle analizi, öncelikle zincirdeki kelimelerin hangi cümlelerde geçtiği bilindiği için bu kelimeler paragraflara göre ayıklanır ve her paragraf içinde bu kelimelerin ait oldukları cümlelerin frekansı alınır. En yüksek frekanslı cümleyi o zincir için seçilmektedir.</li>
</ul>
</blockquote>
<hr />
<blockquote>
<ul>
<li>[10] Stamou, S., Oflazer, K., Pala, K., Christodoulakis, D., Cristea, D., Tufis, D., Koeva, S.,Totkov,G., Dutoit, D., Grigoriadou, M.: Balkanet: A multilingual semantic network for Balkan languages.Proceedings of the 1st Global Wordnet Conference. Mysore, Hindistan, (2002).</li>
<li>[11] Emre Yıldız, “Anlamsal İlişkiler Veri Kümesi”, Yıldız Teknik Üniversitesi, Bilgisayar Müh.
Bölümü,(2010).</li>
<li>[12] Oğuz Yıldırım, Fatih Atık, M. Fatih AMASYALI, “42 Bin Haber Veri Kümesi”, Yıldız Teknik
Üniversitesi, Bilgisayar Müh. Bölümü,(2003).</li>
<li>[13] Regina Barzilay and Michael Elhadad, “Using Lexical Chains for Text Summarization”, In
Proceedings of the ACL Workshop on Intelligent Scalable Text Summarization,(1997), 10-17.</li>
<li>[14] William Doran, Nicola Stokes, Joe Carthy, John Dunnion. “Assessing the Impact of Lexical Chain Scoring Methods and Sentence Extraction Schemes on Summarization”, Computational Linguistics and Intelligent Text Processing Volume 2945 of the series Lecture Notes in Computer Science , (2004), 627-635.</li>
</ul>
</blockquote>
<hr />
<p>#####</p>
<blockquote>
<p><strong>Gereksinimler:</strong></p>
<ul>
<li>JavaSE 1.8</li>
<li>MongoDb</li>
<li>Docker & Docker Compose</li>
</ul>
</blockquote>
<blockquote>
<p><strong>Sunucu kurulumu :</strong></p>
<ul>
<li>LINUX</li>
<li>Terminal ile öncelikle uygulama dizinine geciyoruz</li>
<li>sbt docker:stage</li>
<li>sudo docker-compose -f docker-compose.yml up -d –build</li>
<li>localhost:9999 adresinden sunucuya ulasabiliriz</li>
<li>sunucuyu durdurmak icinse</li>
<li>sudo docker-compose down</li>
</ul>
</blockquote>
<hr />
<p>###Örnek</p>
<blockquote>
<p><strong>Haber metni:</strong></p>
</blockquote>
<p>Yıldız Kızlarımız Dünya Şampiyonu</p>
<p>Dünya Yıldız Kızlar Voleybol Şampiyonası’nda Yıldız Milli Takım, final maçında Çin’i 3-0 yenerek şampiyon oldu. Türkiye, böylece voleybol tarihinin ilk Dünya şampiyonluğunu elde etti.</p>
<p>Yıldız Milli Takım, TVF Başkent Salonu’nda yapılan final maçında baştan sona üstün bir performans sergileyerek, Dünyanın en iyi takımları arasında yer alan Çin’e adeta göz açtırmadı. Tüm oyuncuların iyi oynadığı Türk Milli Takımı’nda Kübra Akman performansıyla göz doldururken, Çin Milli Takımı’nın solak smaçörü Peiyi Liu, Yıldız kızları zorlayan en önemli oyuncu oldu. Türkiye, 2007 yılında Meksika’da yapılan Dünya Yıldız Kızlar Şampiyonası finalinde Çin’e karşı 3-1 kaybederek Dünya ikincisi olduğu maçın rövanşını set kayıpsız aldı.</p>
<p>Bu arada karşılaşmayı Gençlik ve Spor Bakanı Suat Kılıç, Türkiye Voleybol Federasyonu Başkanı Erol Ünal Karabıyık ile birlikte protokol tribününden takip etti. TVF Başkent Salonu’nun tamamını dolduran seyirciler, ellerindeki Türk bayraklarıyla maç boyunca Türk Milli Takımı’nı coşkulu bir şekilde desteklediler.Voleybolseverler, TVF Bandosunun çaldığı hareketli parçalara eşlik ederek, takımlarını bir an bile yalnız bırakmadılar.</p>
<p>Yıldız Kızlar Dünya Şampiyonası FIVB’nin düzenlediği ve 18 yaşının altındaki voleybolcuların katılabildiği bir şampiyonadır. İlk şampiyona 1989 yılında Brezilya’nın Curitiba kentinde yapılmıştır. Her iki yılda bir düzenlenen şampiyonaya kıta elemelerini geçen ülke takımları katılabilmektedir.</p>
<blockquote>
<p><strong>Özet:</strong>
[Dünya Yıldız Kızlar Voleybol Şampiyonası’nda Yıldız Milli Takım, final maçında Çin’i 3-0 yenerek şampiyon oldu., Türkiye, böylece voleybol tarihinin ilk Dünya şampiyonluğunu elde etti., Yıldız Milli Takım, TVF Başkent Salonu’nda yapılan final maçında baştan sona üstün bir performans sergileyerek, Dünyanın en iyi takımları arasında yer alan Çin’e adeta göz açtırmadı.]</p>
</blockquote>
<blockquote>
<p><strong>Kelime Zincirleri</strong></p>
<ul>
<li>
<p>“P1 S2” kelimenin 1. paragrafdaki 2. cümlede geçtiğini belirtir</p>
</li>
<li>(şampiyon synonymy kişi) P0-S0,(yıldız hypernymy kişi) P1-S0,(şampiyon synonymy kişi) P1-S0,(şampiyon synonymy kişi) P1-S1,(el hypernymy kişi) P1-S1,(baş hypernymy kişi) P2-S0,(üst hypernymy kişi) P2-S0,(türk hypernymy kişi) P2-S1,(başkan hypernymy kişi) P3-S0,(el hypernymy kişi) P3-S1,(türk hypernymy kişi) P3-S1,(türk hypernymy kişi) P3-S1,</li>
<li>Zincirdeki kelime sayisi: 12</li>
<li>Zincirin iliskisel puan degeri: 66</li>
<li>Zincirin guc degeri: 5</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(mil related_with matematik) P1-S0,(mil related_with matematik) P2-S0,(mil related_with matematik) P2-S1,(mil related_with matematik) P2-S1,(mil related_with matematik) P3-S1,(şekil related_with matematik) P3-S1,:6:24:4.0</li>
<li>Zincirdeki kelime sayisi: 6</li>
<li>Zincirin iliskisel puan degeri: 24</li>
<li>Zincirin guc degeri: 4.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(dünya holo_member güneş sistemi) P0-S0,(dünya holo_member güneş sistemi) P1-S0,(dünya holo_member güneş sistemi) P1-S1,(dünya holo_member güneş sistemi) P2-S0,(dünya holo_member güneş sistemi) P2-S2,(dünya holo_member güneş sistemi) P2-S2,(dünya holo_member güneş sistemi) P4-S0,:7:28:6.0</li>
<li>Zincirdeki kelime sayisi: 7</li>
<li>Zincirin iliskisel puan degeri: 28</li>
<li>Zincirin guc degeri: 6.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(dünya related_with astronomi) P0-S0,(yıldız holo_member astronomi) P1-S0,(yıldız hypernymy astronomi) P1-S0,(yıldız holo_member astronomi) P1-S0,(yıldız holo_member astronomi) P2-S0,(yıldız holo_member astronomi) P2-S1,(yıl related_with astronomi) P2-S2,(yıldız holo_member astronomi) P2-S2,(yıldız holo_member astronomi) P4-S0,(yıl related_with astronomi) P4-S1,(yıl related_with astronomi) P4-S2,:11:44:8.0</li>
<li>Zincirdeki kelime sayisi: 11</li>
<li>Zincirin iliskisel puan degeri: 44</li>
<li>Zincirin guc degeri: 8.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(çin hypernymy ülke) P1-S0,(türkiye holo_member ülke) P1-S1,(türkiye holo_part ülke) P1-S1,(türkiye hypernymy ülke) P1-S1,(el synonymy ülke) P1-S1,(türkiye holo_member ülke) P2-S2,(meksika hypernymy ülke) P2-S2,(türkiye holo_member ülke) P3-S0,(brezilya hypernymy ülke) P4-S1,(kıta synonymy ülke) P4-S2,:10:52:4.0</li>
<li>Zincirdeki kelime sayisi: 10</li>
<li>Zincirin iliskisel puan degeri: 52</li>
<li>Zincirin guc degeri: 4.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(voleybol related_with spor) P1-S0,(takım related_with spor) P1-S0,(final related_with spor) P1-S0,(voleybol related_with spor) P1-S1,(final related_with spor) P2-S0,(oyun related_with spor) P2-S1,(smaçör related_with spor) P2-S1,(oyun related_with spor) P2-S1,(final related_with spor) P2-S2,(set related_with spor) P2-S2,(voleybol related_with spor) P3-S0,(voleybol related_with spor) P4-S0,:12:48:6.0</li>
<li>Zincirdeki kelime sayisi: 12</li>
<li>Zincirin iliskisel puan degeri: 48</li>
<li>Zincirin guc degeri: 6.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(dünya synonymy grup) P0-S0,(takım synonymy grup) P1-S0,(takım synonymy grup) P2-S0,(takım synonymy grup) P2-S0,(takım synonymy grup) P2-S1,(takım synonymy grup) P2-S1,(takım synonymy grup) P3-S1,(takım synonymy grup) P3-S2,(takım synonymy grup) P4-S2,:9:90:7.0</li>
<li>Zincirdeki kelime sayisi: 9</li>
<li>Zincirin iliskisel puan degeri: 90</li>
<li>Zincirin guc degeri: 7.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(şampiyona synonymy bökelik) P1-S0,(şampiyona synonymy bökelik) P2-S2,(şampiyona synonymy bökelik) P4-S0,(şampiyona synonymy bökelik) P4-S0,(şampiyona synonymy bökelik) P4-S1,(şampiyona synonymy bökelik) P4-S2,:6:60:5.0</li>
<li>Zincirdeki kelime sayisi: 6</li>
<li>Zincirin iliskisel puan degeri: 60</li>
<li>Zincirin guc degeri: 5.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><b> TOPLAM SONUCLAR</b></li>
<li>Tüm zincirler: 429</li>
<li>Benzersiz zincirler: 98</li>
<li>Güçlü zincirler: 8</li>
<li>Kelime zinciri ortalama puan değeri: 15.33673469387755</li>
<li>Kelime zinciri ortalama güç değeri: 0.5918367346938775</li>
<li>Kelime zinciri kriter değeri: 3.8724132730465493</li>
</ul>
</blockquote>
<blockquote>
<p><strong>JSON API RESPOND:</strong></p>
<ul>
<li>{<b>“result”</b>:”[Dünya Yıldız Kızlar Voleybol Şampiyonası’nda Yıldız Milli Takım, final maçında Çin’i 3-0 yenerek şampiyon oldu., Türkiye, böylece voleybol tarihinin ilk Dünya şampiyonluğunu elde etti., Yıldız Milli Takım, TVF Başkent Salonu’nda yapılan final maçında baştan sona üstün bir performans sergileyerek, Dünyanın en iyi takımları arasında yer alan Çin’e adeta göz açtırmadı.] “
}</li>
</ul>
</blockquote>
<hr />
<h3 id="api-kullanım">API Kullanım</h3>
<blockquote>
<ul>
<li><a href="https://teaddict.net/ozetle">https://teaddict.net/ozetle</a> adresinden özetleme işlemini browser üzerinden yapabilirsiniz.</li>
<li><a href="https://turkcemetinozetleme.teaddict.net/">https://turkcemetinozetleme.teaddict.net</a> adresinde swagger mevcut</li>
<li>Örnek API kullanım için <a href="https://github.com/teaddict/turkce-metin-ozetleme-scala/tree/master/ornek-api-kullanim">bu dokümanları</a> inceleyebilirsiniz.</li>
<li><a href="https://github.com/teaddict/turkce-metin-ozetleme/tree/master/ornek-metinler">Örnek metin dosyaları</a></li>
</ul>
</blockquote>teaddictKelime Zinciri Algoritmasıyla Türkçe Metin Özetleme - SCALA Algoritma Kelime Zinciri Algoritması:Angularjs parsedNgModelAssign is not a function?2018-07-01T18:30:00+00:002018-07-01T18:30:00+00:00https://tech.teaddict.net/angular/software%20development/coding/javascript/2018/07/01/parsedngmodelassign-is%20not-function<p>It is one of the basic problem, but if you search in google probably you will find a lot of solutions which is not related. When you have input field with <code class="highlighter-rouge">getterSetter</code>, and you didn’t give the function name correctly then you will get this error:</p>
<div class="highlighter-rouge"><pre class="highlight"><code>TypeError: parsedNgModelAssign is not a function
at NgModelController.$$setOptions.ngModelSet (angular.js:20414)
at NgModelController.$$writeModelToScope (angular.js:20863)
at writeToModelIfNeeded (angular.js:20857)
at angular.js:20851
</code></pre>
</div>
<p>Example field:</p>
<div class="language-html highlighter-rouge"><pre class="highlight"><code><span class="nt"><textarea</span>
<span class="na">class=</span><span class="s">"form-control"</span>
<span class="na">name=</span><span class="s">"test"</span>
<span class="na">cols=</span><span class="s">"5"</span>
<span class="na">data-ng-model=</span><span class="s">"ctrl.testGetterSetter(test)"</span>
<span class="na">data-ng-model-options=</span><span class="s">"{getterSetter:true}"</span>
<span class="na">data-required</span><span class="nt">></span>
<span class="nt"></textarea></span>
</code></pre>
</div>
<p>Basicly this problem appears if <code class="highlighter-rouge">data-ng-model="ctrl.testGetterSetter(test)"</code> can’t find the <code class="highlighter-rouge">testGetterSetter</code> function.</p>teaddictIt is one of the basic problem, but if you search in google probably you will find a lot of solutions which is not related. When you have input field with getterSetter, and you didn’t give the function name correctly then you will get this error: TypeError: parsedNgModelAssign is not a function at NgModelController.$$setOptions.ngModelSet (angular.js:20414) at NgModelController.$$writeModelToScope (angular.js:20863) at writeToModelIfNeeded (angular.js:20857) at angular.js:20851 Example field:Kelime Zinciri Algoritmasıyla Türkçe Metin Özetleme | Online otomatik metin özetleme | Metin özetleme programı | Özet Çıkarma Programı2018-07-01T15:36:15+00:002018-07-01T15:36:15+00:00https://tech.teaddict.net/t%C3%BCrk%C3%A7e%20metin%20%C3%B6zetleme/software%20development/coding/scala/2018/07/01/turkce-metin-ozetleme<h1 id="kelime-zinciri-algoritmasıyla-türkçe-metin-Özetleme---scala">Kelime Zinciri Algoritmasıyla Türkçe Metin Özetleme - SCALA</h1>
<hr />
<h3 id="algoritma">Algoritma</h3>
<blockquote>
<p><strong>Kelime Zinciri Algoritması:</strong></p>
</blockquote>
<p>Bu algoritma metnin ana konusunu belirmeye çalışmaktadır. Metindeki kelimeler arasında “anlamsal” bağ kurup, aynı anlama gelen kelimelerden bir zincir oluşturulmaktadır [9]. Daha sonra belirlenen puanlama ve sezgisel yöntemlere göre özet niteliği taşıyabilecek cümleleri seçerek belirlemektedir. Bu algoritma için en önemli şey güçlü bir “kelime ağının” var olmasıdır. Çünkü tüm zincirler kelimeler arasındaki ilişkilerden yola çıkarak oluşturulacağı için, güçlü bir kelime ağı belirsiz kalacak kelime sayısını azaltacak, güçlü zincirler kurulmasını sağlayacaktır. Türkçe için hazırlanmış tek kelime ağı Dr. Özlem Çetinoglu ve Dr. Kemal Oflazer tarafından 2004 yılında “BalkaNet” projesiyle oluşturulmuştur [10]. Tarafımızdan geliştirilecek bu proje kapsamında, wordnetin javaya aktarılması ve kullanılabilir hale getirilmesi gerekmekte idi. Öncelikle XML halinde bulunan bu listeyi çözümleyerek (parsing) yeniden oluşturulmuştur. Kullanılacak formata dönüşüm gerçekleştirilmiştir. Daha sonra Yıldız Teknik Üniversitesi Bilgisayar Mühendisliği bölümünden Emre Yıldız’ın oluşturduğu “Anlamsal İlişkiler Veri Kümesi” projesi dökumanları da kullanılacak formata dönüştürülmüştür [11]. Bu iki listeyi birleştirip kendi projemiz için ortak bir kelime ağı oluşturduk. Bu kelime ağı içindeki verileri ön aşamadan geçirdik, bu aşamalar;</p>
<blockquote>
<ul>
<li>Etkisiz kelimeler temizlendi.</li>
<li>Atasözler ve deyimler çıkartıldı.</li>
<li>Hyponymy ilişkiler, hypernymy ilişkilere dönüştürüldü. (Çünkü bu şekilde kelimelerin aranması kolaylaşmaktadır.)</li>
<li>Sıfatlar ve fiiller çıkartıldı.</li>
<li>Yer belirten adlar düzenlendi.</li>
<li>Terim listeleri eklendi.</li>
<li>Sayılar çıkartıldı.</li>
</ul>
</blockquote>
<p>Uygulamamızda tüm bu listeyi okuyup her kelime için bir ilişki listesi oluşturuyoruz, bir kelime girildiğinde bunun ilişkili olduğu kelimeler liste halinde kullanıcıya gönderilmektedir. Bu sistemin ileride ayrı bir servis olarak kullanıma sunulması planlanmaktadır. Böylece çevrimiçi Türkçe kelime ağı erişime açılmış olacaktır.</p>
<blockquote>
<p><strong>Zincirlerin puanlanması:</strong></p>
<p>Bu aşamada zincirdeki kelimelerin aralarındaki ilişkiye göre puanlamasını gerçekleştirdik. Regina Barzilay tarafından hazırlanmış olan “Using Lexical Chains for Text Summarization [13]” doktora tezinden ve “Assessing the Impact of Lexical Chain Scoring Methods and Sentence Extraction Schemes on Summarization [14]” makalesinden faydalanılmıştır. Oluşturdukları puanlama sistemi kendi uygulamamıza göre değiştirilmiştir. Aşağıdaki şekilde bir puanlama sistemi oluşturulmuştur:</p>
</blockquote>
<blockquote>
<ul>
<li>synonymy = 10</li>
<li>antonymy = 7</li>
<li>hypernymy = 4</li>
<li>hyponymy = 4</li>
<li>related_with =4</li>
<li>holo_part = 4</li>
<li>holo_member = 4</li>
<li>yan_kavram = 4</li>
</ul>
</blockquote>
<p>Ayrıca zincirlerin gücünü belirlemek için ayrı bir sistem daha kullanılmıştır. Bu sistem şu
aşamalardan oluşmaktadır:</p>
<blockquote>
<ul>
<li>Zincirdeki benzersiz kelimelerin sayısını bul</li>
<li>Homojenlik değerini bul = 1 - (benzersiz kelime sayısı / tüm kelimelerin sayısı)</li>
<li>Eşik değerini bul = ortalama puan + (2 ∗ puanların standart sapması)</li>
<li>Eşik değerinin üstündeki zincirleri güçlü zincirler olarak listeye al
######
<strong>Cümle Seçimi İşlemleri:</strong></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>Sezgisel Algoritma 1
Bu algoritma her zincirdeki ilk kelimenin yani zinciri başlatan kelimenin anahtar kelime olarak alınmasına dayanmaktadır. Bu anahtar kelimenin geçtiği ilk cümle tespit edilerek seçilmiştir.</li>
<li>Sezgisel Algoritma 2
Bu algoritma her zincirdeki kelimelerin frekansının hesaplanmasına dayanmaktadır. Öncelikle tüm kelimelerin frekansı hesaplanır ve zincirdeki kelimelerin frekans ortalaması bulunur. Ortalama frekansın üstündeki kelimeler işleme alınır. Bu kelimelerin ortak olarak geçtikleri bir cümle mevcut ise bu cümle seçilir, eğer hiçbir kelimenin kesiştiği bir cümle yoksa, en yüksek frekanslı cümlenin geçtiği cümle alınır.</li>
<li>Sezgisel Algoritma 3
Bu algoritma her zincirin yoğunlaştığı paragrafı bulmaya ve bu paragrafta zincirdeki
kelimeleri içeren cümle frekansına dayanmaktadır. Eğer tüm kelimeler aynı paragraftaysa doğrudan bu paragraftaki cümlelerin analizi yapılır. Eğer zincirdeki kelimeler farklı paragraflardaysa öncelikle paragrafların frekansları alınır. En yüksek frekanslı paragraf seçilir ve bu paragraftaki cümlelerin analizi yapılır. Cümle analizi, öncelikle zincirdeki kelimelerin hangi cümlelerde geçtiği bilindiği için bu kelimeler paragraflara göre ayıklanır ve her paragraf içinde bu kelimelerin ait oldukları cümlelerin frekansı alınır. En yüksek frekanslı cümleyi o zincir için seçilmektedir.</li>
</ul>
</blockquote>
<hr />
<blockquote>
<ul>
<li>[10] Stamou, S., Oflazer, K., Pala, K., Christodoulakis, D., Cristea, D., Tufis, D., Koeva, S.,Totkov,G., Dutoit, D., Grigoriadou, M.: Balkanet: A multilingual semantic network for Balkan languages.Proceedings of the 1st Global Wordnet Conference. Mysore, Hindistan, (2002).</li>
<li>[11] Emre Yıldız, “Anlamsal İlişkiler Veri Kümesi”, Yıldız Teknik Üniversitesi, Bilgisayar Müh.
Bölümü,(2010).</li>
<li>[12] Oğuz Yıldırım, Fatih Atık, M. Fatih AMASYALI, “42 Bin Haber Veri Kümesi”, Yıldız Teknik
Üniversitesi, Bilgisayar Müh. Bölümü,(2003).</li>
<li>[13] Regina Barzilay and Michael Elhadad, “Using Lexical Chains for Text Summarization”, In
Proceedings of the ACL Workshop on Intelligent Scalable Text Summarization,(1997), 10-17.</li>
<li>[14] William Doran, Nicola Stokes, Joe Carthy, John Dunnion. “Assessing the Impact of Lexical Chain Scoring Methods and Sentence Extraction Schemes on Summarization”, Computational Linguistics and Intelligent Text Processing Volume 2945 of the series Lecture Notes in Computer Science , (2004), 627-635.</li>
</ul>
</blockquote>
<hr />
<p>#####</p>
<blockquote>
<p><strong>Gereksinimler:</strong></p>
<ul>
<li>JavaSE 1.8</li>
<li>MongoDb</li>
<li>Docker & Docker Compose</li>
</ul>
</blockquote>
<blockquote>
<p><strong>Sunucu kurulumu :</strong></p>
<ul>
<li>LINUX</li>
<li>Terminal ile öncelikle uygulama dizinine geciyoruz</li>
<li>sbt docker:stage</li>
<li>sudo docker-compose -f docker-compose.yml up -d –build</li>
<li>localhost:9999 adresinden sunucuya ulasabiliriz</li>
<li>sunucuyu durdurmak icinse</li>
<li>sudo docker-compose down</li>
</ul>
</blockquote>
<hr />
<p>###Örnek</p>
<blockquote>
<p><strong>Haber metni:</strong></p>
</blockquote>
<p>Yıldız Kızlarımız Dünya Şampiyonu</p>
<p>Dünya Yıldız Kızlar Voleybol Şampiyonası’nda Yıldız Milli Takım, final maçında Çin’i 3-0 yenerek şampiyon oldu. Türkiye, böylece voleybol tarihinin ilk Dünya şampiyonluğunu elde etti.</p>
<p>Yıldız Milli Takım, TVF Başkent Salonu’nda yapılan final maçında baştan sona üstün bir performans sergileyerek, Dünyanın en iyi takımları arasında yer alan Çin’e adeta göz açtırmadı. Tüm oyuncuların iyi oynadığı Türk Milli Takımı’nda Kübra Akman performansıyla göz doldururken, Çin Milli Takımı’nın solak smaçörü Peiyi Liu, Yıldız kızları zorlayan en önemli oyuncu oldu. Türkiye, 2007 yılında Meksika’da yapılan Dünya Yıldız Kızlar Şampiyonası finalinde Çin’e karşı 3-1 kaybederek Dünya ikincisi olduğu maçın rövanşını set kayıpsız aldı.</p>
<p>Bu arada karşılaşmayı Gençlik ve Spor Bakanı Suat Kılıç, Türkiye Voleybol Federasyonu Başkanı Erol Ünal Karabıyık ile birlikte protokol tribününden takip etti. TVF Başkent Salonu’nun tamamını dolduran seyirciler, ellerindeki Türk bayraklarıyla maç boyunca Türk Milli Takımı’nı coşkulu bir şekilde desteklediler.Voleybolseverler, TVF Bandosunun çaldığı hareketli parçalara eşlik ederek, takımlarını bir an bile yalnız bırakmadılar.</p>
<p>Yıldız Kızlar Dünya Şampiyonası FIVB’nin düzenlediği ve 18 yaşının altındaki voleybolcuların katılabildiği bir şampiyonadır. İlk şampiyona 1989 yılında Brezilya’nın Curitiba kentinde yapılmıştır. Her iki yılda bir düzenlenen şampiyonaya kıta elemelerini geçen ülke takımları katılabilmektedir.</p>
<blockquote>
<p><strong>Özet:</strong>
[Dünya Yıldız Kızlar Voleybol Şampiyonası’nda Yıldız Milli Takım, final maçında Çin’i 3-0 yenerek şampiyon oldu., Türkiye, böylece voleybol tarihinin ilk Dünya şampiyonluğunu elde etti., Yıldız Milli Takım, TVF Başkent Salonu’nda yapılan final maçında baştan sona üstün bir performans sergileyerek, Dünyanın en iyi takımları arasında yer alan Çin’e adeta göz açtırmadı.]</p>
</blockquote>
<blockquote>
<p><strong>Kelime Zincirleri</strong></p>
<ul>
<li>
<p>“P1 S2” kelimenin 1. paragrafdaki 2. cümlede geçtiğini belirtir</p>
</li>
<li>(şampiyon synonymy kişi) P0-S0,(yıldız hypernymy kişi) P1-S0,(şampiyon synonymy kişi) P1-S0,(şampiyon synonymy kişi) P1-S1,(el hypernymy kişi) P1-S1,(baş hypernymy kişi) P2-S0,(üst hypernymy kişi) P2-S0,(türk hypernymy kişi) P2-S1,(başkan hypernymy kişi) P3-S0,(el hypernymy kişi) P3-S1,(türk hypernymy kişi) P3-S1,(türk hypernymy kişi) P3-S1,</li>
<li>Zincirdeki kelime sayisi: 12</li>
<li>Zincirin iliskisel puan degeri: 66</li>
<li>Zincirin guc degeri: 5</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(mil related_with matematik) P1-S0,(mil related_with matematik) P2-S0,(mil related_with matematik) P2-S1,(mil related_with matematik) P2-S1,(mil related_with matematik) P3-S1,(şekil related_with matematik) P3-S1,:6:24:4.0</li>
<li>Zincirdeki kelime sayisi: 6</li>
<li>Zincirin iliskisel puan degeri: 24</li>
<li>Zincirin guc degeri: 4.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(dünya holo_member güneş sistemi) P0-S0,(dünya holo_member güneş sistemi) P1-S0,(dünya holo_member güneş sistemi) P1-S1,(dünya holo_member güneş sistemi) P2-S0,(dünya holo_member güneş sistemi) P2-S2,(dünya holo_member güneş sistemi) P2-S2,(dünya holo_member güneş sistemi) P4-S0,:7:28:6.0</li>
<li>Zincirdeki kelime sayisi: 7</li>
<li>Zincirin iliskisel puan degeri: 28</li>
<li>Zincirin guc degeri: 6.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(dünya related_with astronomi) P0-S0,(yıldız holo_member astronomi) P1-S0,(yıldız hypernymy astronomi) P1-S0,(yıldız holo_member astronomi) P1-S0,(yıldız holo_member astronomi) P2-S0,(yıldız holo_member astronomi) P2-S1,(yıl related_with astronomi) P2-S2,(yıldız holo_member astronomi) P2-S2,(yıldız holo_member astronomi) P4-S0,(yıl related_with astronomi) P4-S1,(yıl related_with astronomi) P4-S2,:11:44:8.0</li>
<li>Zincirdeki kelime sayisi: 11</li>
<li>Zincirin iliskisel puan degeri: 44</li>
<li>Zincirin guc degeri: 8.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(çin hypernymy ülke) P1-S0,(türkiye holo_member ülke) P1-S1,(türkiye holo_part ülke) P1-S1,(türkiye hypernymy ülke) P1-S1,(el synonymy ülke) P1-S1,(türkiye holo_member ülke) P2-S2,(meksika hypernymy ülke) P2-S2,(türkiye holo_member ülke) P3-S0,(brezilya hypernymy ülke) P4-S1,(kıta synonymy ülke) P4-S2,:10:52:4.0</li>
<li>Zincirdeki kelime sayisi: 10</li>
<li>Zincirin iliskisel puan degeri: 52</li>
<li>Zincirin guc degeri: 4.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(voleybol related_with spor) P1-S0,(takım related_with spor) P1-S0,(final related_with spor) P1-S0,(voleybol related_with spor) P1-S1,(final related_with spor) P2-S0,(oyun related_with spor) P2-S1,(smaçör related_with spor) P2-S1,(oyun related_with spor) P2-S1,(final related_with spor) P2-S2,(set related_with spor) P2-S2,(voleybol related_with spor) P3-S0,(voleybol related_with spor) P4-S0,:12:48:6.0</li>
<li>Zincirdeki kelime sayisi: 12</li>
<li>Zincirin iliskisel puan degeri: 48</li>
<li>Zincirin guc degeri: 6.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(dünya synonymy grup) P0-S0,(takım synonymy grup) P1-S0,(takım synonymy grup) P2-S0,(takım synonymy grup) P2-S0,(takım synonymy grup) P2-S1,(takım synonymy grup) P2-S1,(takım synonymy grup) P3-S1,(takım synonymy grup) P3-S2,(takım synonymy grup) P4-S2,:9:90:7.0</li>
<li>Zincirdeki kelime sayisi: 9</li>
<li>Zincirin iliskisel puan degeri: 90</li>
<li>Zincirin guc degeri: 7.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>(şampiyona synonymy bökelik) P1-S0,(şampiyona synonymy bökelik) P2-S2,(şampiyona synonymy bökelik) P4-S0,(şampiyona synonymy bökelik) P4-S0,(şampiyona synonymy bökelik) P4-S1,(şampiyona synonymy bökelik) P4-S2,:6:60:5.0</li>
<li>Zincirdeki kelime sayisi: 6</li>
<li>Zincirin iliskisel puan degeri: 60</li>
<li>Zincirin guc degeri: 5.0</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li><b> TOPLAM SONUCLAR</b></li>
<li>Tüm zincirler: 429</li>
<li>Benzersiz zincirler: 98</li>
<li>Güçlü zincirler: 8</li>
<li>Kelime zinciri ortalama puan değeri: 15.33673469387755</li>
<li>Kelime zinciri ortalama güç değeri: 0.5918367346938775</li>
<li>Kelime zinciri kriter değeri: 3.8724132730465493</li>
</ul>
</blockquote>
<blockquote>
<p><strong>JSON API RESPOND:</strong></p>
<ul>
<li>{<b>“result”</b>:”[Dünya Yıldız Kızlar Voleybol Şampiyonası’nda Yıldız Milli Takım, final maçında Çin’i 3-0 yenerek şampiyon oldu., Türkiye, böylece voleybol tarihinin ilk Dünya şampiyonluğunu elde etti., Yıldız Milli Takım, TVF Başkent Salonu’nda yapılan final maçında baştan sona üstün bir performans sergileyerek, Dünyanın en iyi takımları arasında yer alan Çin’e adeta göz açtırmadı.] “
}</li>
</ul>
</blockquote>
<hr />
<h3 id="api-kullanım">API Kullanım</h3>
<blockquote>
<ul>
<li><a href="https://teaddict.net/ozetle">https://teaddict.net/ozetle</a> adresinden özetleme işlemini browser üzerinden yapabilirsiniz.</li>
<li><a href="https://turkcemetinozetleme.teaddict.net/">https://turkcemetinozetleme.teaddict.net</a> adresinde swagger mevcut</li>
<li>Örnek API kullanım için <a href="https://github.com/teaddict/turkce-metin-ozetleme-scala/tree/master/ornek-api-kullanim">bu dokümanları</a> inceleyebilirsiniz.</li>
<li><a href="https://github.com/teaddict/turkce-metin-ozetleme/tree/master/ornek-metinler">Örnek metin dosyaları</a></li>
</ul>
</blockquote>teaddictKelime Zinciri Algoritmasıyla Türkçe Metin Özetleme - SCALA Algoritma Kelime Zinciri Algoritması:Kelime Zinciri Algoritmasıyla Türkçe Metin Özetleme | Online otomatik metin özetleme | Metin özetleme programı | Özet Çıkarma Programı2018-06-15T15:36:15+00:002018-06-15T15:36:15+00:00https://tech.teaddict.net/t%C3%BCrk%C3%A7e%20metin%20%C3%B6zetleme/software%20development/coding/scala/2018/06/15/turkce-metin-ozetleme-scala<p>Uzun bir aradan sonra nihayet fırsat bulup projeye geri dönüş yapabildim. Programın ilk sürümü bitirme projesi olduğu için biraz karışık ve aceleyle yazıldı. Büyüzden tüm projeyi scala dilinde yeniden yazdım. Hem daha anlaşılır hem daha kısa ve öz oldu. Spring MVC, Tomcat ve Postgresql üçlüsünü bırakarak , Finatra + Mongodb ikilisine geçtim. Şimdi ayrıca docker-compose ile özetleme servisini hızlıca kurabilirsiniz.</p>
<p>Algorıtma olarak çok bir değişiklik yapmadım, sadece daha önce farketmediğim hataları düzelttim, bu da performansı ve özet kalitesini artırdı. Metnin sınıfını bulma işlemini uygulamadan kaldırdım. İlk sürümde deneme amaçlı eklenmişti, suan kullanılmadığı için gerekli olduğunu düşünmüyorum.</p>
<p>Kodlari buradan inceleyebilirsiniz. <a href="https://github.com/teaddict/turkce-metin-ozetleme-scala">github</a></p>
<p>Uygulamayi buradan deneyebilirsiniz: <a href="http://teaddict.net/ozetle/index.html">http://teaddict.net/ozetle/index.html</a></p>teaddictUzun bir aradan sonra nihayet fırsat bulup projeye geri dönüş yapabildim. Programın ilk sürümü bitirme projesi olduğu için biraz karışık ve aceleyle yazıldı. Büyüzden tüm projeyi scala dilinde yeniden yazdım. Hem daha anlaşılır hem daha kısa ve öz oldu. Spring MVC, Tomcat ve Postgresql üçlüsünü bırakarak , Finatra + Mongodb ikilisine geçtim. Şimdi ayrıca docker-compose ile özetleme servisini hızlıca kurabilirsiniz.How to Fix 504 Gateway Timeout using Nginx!2018-06-08T23:34:00+00:002018-06-08T23:34:00+00:00https://tech.teaddict.net/scala/programming/server/nginx/2018/06/08/nginx-timeout-configuration<p>Currently I am trying to use my summarizer service with my orangepi. I was getting <code class="highlighter-rouge">504 Gateway Timeout</code> errors all the time, because orangepi is slow for calculations. I thought it is related with Finatra , but found out it was Nginx. It has default 75 seconds. For fixing it, you have to create ne file and then restart nginx service.</p>
<blockquote>
<p>create <code class="highlighter-rouge">/etc/nginx/conf.d/timeout.conf</code> file</p>
<div class="highlighter-rouge"><pre class="highlight"><code>proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
</code></pre>
</div>
</blockquote>
<p>Now It will wait 5 minutes!</p>
<blockquote>
<p>sudo systemctl restart nginx.service</p>
</blockquote>teaddictCurrently I am trying to use my summarizer service with my orangepi. I was getting 504 Gateway Timeout errors all the time, because orangepi is slow for calculations. I thought it is related with Finatra , but found out it was Nginx. It has default 75 seconds. For fixing it, you have to create ne file and then restart nginx service.Finatra default JacksonModule settings?2018-06-08T23:34:00+00:002018-06-08T23:34:00+00:00https://tech.teaddict.net/scala/programming/2018/06/08/custom-finatra-jackson-module<p>Currently I am moving from spring mvc + tomcat to finatra. I had a weird problem with my api. My api post request expects <code class="highlighter-rouge">contextOfText: String</code> , but when I make request , it returns error and expects <code class="highlighter-rouge">context_of_text</code>. I have never such problem before. Couldn’t know how to search for this problem.. Anyway my work mate told that might be serializer problem. After some research I found some custom jackson module for finatra. Tried to see if it has any effects and fixed with first try. It seems default FinatraJacksonModule is using <code class="highlighter-rouge">SNAKE_CASE</code>, therefore it converts variable names. Here I changed it to <code class="highlighter-rouge">CamelCasePropertyNamingStrategy</code>.</p>
<div class="language-scala highlighter-rouge"><pre class="highlight"><code><span class="k">import</span> <span class="nn">com.fasterxml.jackson.annotation.JsonInclude.Include</span>
<span class="k">import</span> <span class="nn">com.fasterxml.jackson.core.JsonGenerator.Feature</span>
<span class="k">import</span> <span class="nn">com.fasterxml.jackson.databind.ObjectMapper</span>
<span class="k">import</span> <span class="nn">com.twitter.finatra.json.modules.FinatraJacksonModule</span>
<span class="k">import</span> <span class="nn">com.twitter.finatra.json.utils.CamelCasePropertyNamingStrategy</span>
<span class="k">object</span> <span class="nc">CustomJacksonModule</span> <span class="k">extends</span> <span class="nc">FinatraJacksonModule</span> <span class="o">{</span>
<span class="k">override</span> <span class="k">val</span> <span class="n">serializationInclusion</span> <span class="k">=</span> <span class="nc">Include</span><span class="o">.</span><span class="nc">ALWAYS</span>
<span class="k">override</span> <span class="k">val</span> <span class="n">propertyNamingStrategy</span> <span class="k">=</span> <span class="nc">CamelCasePropertyNamingStrategy</span>
<span class="k">override</span> <span class="k">def</span> <span class="n">additionalMapperConfiguration</span><span class="o">(</span><span class="n">mapper</span><span class="k">:</span> <span class="kt">ObjectMapper</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mapper</span><span class="o">.</span><span class="n">configure</span><span class="o">(</span><span class="nc">Feature</span><span class="o">.</span><span class="nc">WRITE_NUMBERS_AS_STRINGS</span><span class="o">,</span> <span class="kc">true</span><span class="o">)</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre>
</div>
<p>In your FinatraServer class you need to override:
<code class="highlighter-rouge">override def jacksonModule = CustomJacksonModule</code></p>
<p>You can check it from github too:
<strong><em><a href="https://gist.github.com/teaddict/10929366d3a39268d34d2ce50d092aba">gist</a></em></strong></p>teaddictCurrently I am moving from spring mvc + tomcat to finatra. I had a weird problem with my api. My api post request expects contextOfText: String , but when I make request , it returns error and expects context_of_text. I have never such problem before. Couldn’t know how to search for this problem.. Anyway my work mate told that might be serializer problem. After some research I found some custom jackson module for finatra. Tried to see if it has any effects and fixed with first try. It seems default FinatraJacksonModule is using SNAKE_CASE, therefore it converts variable names. Here I changed it to CamelCasePropertyNamingStrategy.Moving from (spring mvc,tomcat,postgresql) to (finatra,mongodb)2018-06-07T23:34:00+00:002018-06-07T23:34:00+00:00https://tech.teaddict.net/scala/programming/finatra/2018/06/07/moving-to-finatra-and-mongodb<p>I was thinking to rewrite my summarizer app for a while. But couldn’t decide what to use, should I move to play mvc or sth else.. There was a Scala meeting in Helsinki this year, so I joined to meeting and first time I heard about Finatra. Finatra is an HTTP API framework built on top of Finagle. Twitter, Tumblr vs. some big companies use it and develop same time. The project is very active! The documentation is well written. You can easily start to write a sample app. So after some tryings I decided to use Finatra for my service. And about database, basically I store text documents and summaries, so it was easy decision to use Mongodb.</p>
<p>You can check my new project from github too:
<strong><em><a href="https://github.com/teaddict/turkce-metin-ozetleme-scala">turkish text summarizer</a></em></strong></p>teaddictI was thinking to rewrite my summarizer app for a while. But couldn’t decide what to use, should I move to play mvc or sth else.. There was a Scala meeting in Helsinki this year, so I joined to meeting and first time I heard about Finatra. Finatra is an HTTP API framework built on top of Finagle. Twitter, Tumblr vs. some big companies use it and develop same time. The project is very active! The documentation is well written. You can easily start to write a sample app. So after some tryings I decided to use Finatra for my service. And about database, basically I store text documents and summaries, so it was easy decision to use Mongodb.Scala does not read file from resources folder after compiling2018-05-31T22:34:00+00:002018-05-31T22:34:00+00:00https://tech.teaddict.net/scala/programming/2018/05/31/scala-read-resources-folder<p>While running my app with Intellij Idea , I had no problems with resource folder. It was reading files and passing tests. It was implemented like this:</p>
<div class="language-scala highlighter-rouge"><pre class="highlight"><code><span class="k">val</span> <span class="n">resourcesPath</span> <span class="k">=</span> <span class="n">getClass</span><span class="o">.</span><span class="n">getResource</span><span class="o">(</span><span class="s">"/lexical/stopWords.csv"</span><span class="o">).</span><span class="n">getPath</span>
<span class="k">val</span> <span class="n">source</span> <span class="k">=</span> <span class="n">fromFile</span><span class="o">(</span><span class="n">resourcesPath</span><span class="o">)</span>
<span class="k">val</span> <span class="n">text</span> <span class="k">=</span> <span class="k">try</span> <span class="n">source</span><span class="o">.</span><span class="n">mkString</span> <span class="k">finally</span> <span class="n">source</span><span class="o">.</span><span class="n">close</span><span class="o">()</span>
</code></pre>
</div>
<p>But when I started to test my server with <code class="highlighter-rouge">docker-compose</code>, I started to get error about my files, It couldn’t read them anymore. So I have to change my code again:</p>
<div class="language-scala highlighter-rouge"><pre class="highlight"><code><span class="k">val</span> <span class="n">source</span> <span class="k">=</span> <span class="nc">Source</span><span class="o">.</span><span class="n">fromInputStream</span><span class="o">(</span><span class="n">getClass</span><span class="o">().</span><span class="n">getClassLoader</span><span class="o">().</span><span class="n">getResourceAsStream</span><span class="o">(</span><span class="n">path</span><span class="o">))(</span><span class="nc">Codec</span><span class="o">.</span><span class="nc">UTF8</span><span class="o">)</span>
<span class="k">val</span> <span class="n">text</span> <span class="k">=</span> <span class="k">try</span> <span class="n">source</span><span class="o">.</span><span class="n">mkString</span> <span class="k">finally</span> <span class="n">source</span><span class="o">.</span><span class="n">close</span><span class="o">()</span>
</code></pre>
</div>
<ul>
<li>(Codec.UTF8) -> makes sure all characters readable</li>
<li>getClass().getClassLoader().getResourceAsStream(path) -> will consider all paths to be absolute paths.</li>
</ul>teaddictWhile running my app with Intellij Idea , I had no problems with resource folder. It was reading files and passing tests. It was implemented like this: val resourcesPath = getClass.getResource("/lexical/stopWords.csv").getPath val source = fromFile(resourcesPath) val text = try source.mkString finally source.close()