Terminal Üzerinde Çalışan TR-EN Sözlük Programı

Başlatan lafurus, 02 Ocak 2019 - 23:01:17

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

lafurus

Pythonla yazdığım terminalden çalışan online sözlük programını burada paylaşmak istedim. Programı tamamen kendi ihtiyaçlarım doğrultusunda yazdım. Belki işlevsel olduğunu düşünen başkası da olur diye buraya bırakıyorum. Program terminal üzerinden çalışmaktadır. Yazılan Türkçe kelimenin İngilizce karşılıklarını listelemede, İngilizce kelimelerin de İngilizce tanımlarını çıkartmaktadır. Dosyayı indirdiğiniz dizinde ./sozluk şeklinde çalıştırsanız zaten kullanım yönergesi karşınıza çıkacaktır. Bu programı Ubuntu'da pyinstaller ile derledim. Muhtemelen diğer linux dağıtımlarda da çalışır fakat çalışmazsa kaynak koddan kendiniz de derleyebilirsiniz. Ayrıca indirdiğiniz dosyayı /usr/bin klasörüne kopyalarsanız dizinden bağımsız olarak programı doğrudan her yerden sozluk yazarak kullanabilirsiniz. Bence güzel oldu :), bazen turreng'in sitesi çöküyor, yavaş veri geliyor filan ama browser aç, google translate'e gir yerine doğrudan terminal açıp kelimenin İngilizcesini öğrenmek güzel bence. Bu arada kodu geliştirmekle ilgili önerilere, yorumlara açığım. Bazı yerler ilerde başka şeyler ile kullanacağımdan ötürü kaynak kodda anlamsız görünebilir. Onları kendiniz derlemek isterseniz düzeltebilirsiniz. 

İndirme Linki: http://dosya.co/g4rh29kqp4r9/sozluk.html

Ekran Görüntüleri:




Kaynak kodlar:
from bs4 import BeautifulSoup as bs
import requests
import re
from urllib.parse import quote
import sys

mesaj = "Bu program en az 2 tane argüman ile terminal üzerinden çalışmaktadır." \
        "\nİlk argüman aramak istediğiniz kelimenin DİLİ(en veya tr)," \
        "\nikinci argüman da aramak istediğiniz KELİME olmalıdır." \
        "\nÖrnek kullanım:" \
        "\n'sozluk en hello'" \
        "\n'sozluk tr merhaba' "


class TrEnDict():
    def __init__(self):
        self.url = "http://tureng.com/tr/turkce-ingilizce/"+ quote(kelime)
        self.baglanti = requests.get(self.url)
        self.data = bs(self.baglanti.content, "html.parser")
        self.table = self.data.find_all("table")
        self.ceviriler = []
        for i in self.table:
            dil = i.find("th", attrs={'class': 'c2'})
            if dil.text == "Türkçe":
                self.ceviriler += i.find_all('td', attrs={"class": "en tm"}, limit=15)
        if __name__ == "__main__":
            self.ekranabas()

    def ekranabas(self, sira=0):
        print(kelime.upper().replace("%20", " ") + " kelimesi için İngilizce çeviriler:")
        self.sozluk = {}
        for i in self.ceviriler:
            sira += 1
            print("{}){}".format(sira, i.find().text))
            self.sozluk[sira] = i.find().text
        if len(self.sozluk) == 0:
            print("Çeviri bulunamadı :( Olası sebepler:"
                  "\nKelimenin yanlış yazımı."
                  "\nİnternet bağlantınızla ilgili problemler."
                  "\nVerilerin alındığı siteye ulaşılamamış olması.")
        else:
            self.ingtanim()

    def ingtanim(self):
        self.secim=input("\nİngilizce tanımını görmek istediğiniz kelimenin numarasını girin:"
              "\n(Çıkış için q)")
        if self.secim == "q":
            sys.exit()

        elif int(self.secim) <= len(self.sozluk):
            global kelime
            kelime = self.sozluk[int(self.secim)]
            kelime = kelime.replace(" ", "%20")
            EnTrDict()

        else:
            print("Hatalı seçim yaptınız!")
            self.ingtanim()

class EnTrDict():
    def __init__(self):
        self.url = "https://en.oxforddictionaries.com/definition/" + quote(kelime)
        self.baglanti = requests.get(self.url)
        self.data = bs(self.baglanti.content, "html.parser")
        self.tanimlar = self.data.find_all('span', attrs={'class': 'ind'})
        self.ekranabas()

    def ekranabas(self, sira=0):
        print(kelime.replace("%20", " ").upper() + " kelimesinin tanımları:")
        phrasal = []
        for i in self.tanimlar:
            if re.search(kelime.replace("%20", " ")+"[a-z]*", i.text.lower()):
                phrasal.append(i.text)
            else:
                sira += 1
                print("{}){}".format(sira, i.text))
        print("\nPhrases or Phrasal verbs:\n")
        for i in phrasal:
            print(i)
def secim():
    if len(sys.argv) >= 3:
        global kelime
        kelime = sys.argv[2:]
        kelime = "%20".join(kelime)
        if sys.argv[1].lower() == "tr":
            TrEnDict()
        elif sys.argv[1].lower() == "en":
            EnTrDict()
        else:
            print("Hatalı dil girişi yaptınız." + mesaj)
    else:
        print("Programa hoş geldiniz!\n" + mesaj)


if __name__ == "__main__":
    secim()

edge35



Sorunlarımı çözerken her şeyiyle öğrenmeye çalışıyorum. Bana balık verenden Allah razı olsun, ama bana balık tutmayı öğretenden Allah daha çok razı olsun :)

alicilin

Elinize sağlık yararlı bir uygulama. google translate ten de çekebilirdiniz aslında verileri.
<Developer/>

illedelinux

Ubuntu, Debian ve Arch dağıtımlarında çalışmadı.
Denediğim oturumlar, JWM, Openbox, Lxde ve Xfce.
Farklı masaüstü ortamında çalışmıyor olabilir.
GNU/Linux kullanmıyorum, onu yaşıyorum...

lafurus

Alıntı yapılan: illedelinux - 05 Ocak 2019 - 00:31:19
Ubuntu, Debian ve Arch dağıtımlarında çalışmadı.
Denediğim oturumlar, JWM, Openbox, Lxde ve Xfce.
Farklı masaüstü ortamında çalışmıyor olabilir.

Hata olarak ne veriyor? Bir arkadaşıma da atmıştım onda önce bir permission error verdi, sonra dosya haklarını değiştirince düzeldi.

Alıntı yapılan: edge35 - 03 Ocak 2019 - 04:05:14
elinize sağlık :)

Teşekürler :)

Alıntı yapılan: alicilin - 04 Ocak 2019 - 23:49:37
Elinize sağlık yararlı bir uygulama. google translate ten de çekebilirdiniz aslında verileri.

Teşekkürler. Google translateden veri çekmeyi deneyecektim ama google translate'nin kodları sanırım kriptolu gibi bir şey html jargonunu bilmiyorum tam olarak ona ne deniyor bilmiyorum ama, yani page source'a düşmüyor doğrudan istediğim veri. Google translate için özel kütüphaneler vardı, onlar da bir google cloud hesabı istiyordu çalışması için. Google cloud'da çok az, biraz daha farklı bir translate uygulaması var sanırım. Neyse bunları görünce çok uğraşmak istemedim. Ama tabi google translateden düzgün veri çekebilseydim, aslında hem ingilizce-ingilizce'yi hem türkçe-ingilizceyi oradan alabilirim ve çok daha güvenilir çeviriler olabilir Turreng'e göre.

illedelinux

Zaten ilk işim dosyaya çalışma hakkı vermek oldu, sonra girdiğim komutlarda hep alttaki sonucu verdi.



Güzel bir uygulama, eline, emeğine sağlık, biraz daha dokunursan olacak gibi :)
GNU/Linux kullanmıyorum, onu yaşıyorum...

lafurus

Alıntı yapılan: illedelinux - 05 Ocak 2019 - 13:47:22
Zaten ilk işim dosyaya çalışma hakkı vermek oldu, sonra girdiğim komutlarda hep alttaki sonucu verdi.



Güzel bir uygulama, eline, emeğine sağlık, biraz daha dokunursan olacak gibi :)


Teşekkür ederim. Aynen biraz daha bunun üstüne farklı şeyler gitmek istiyorum. Mesela kelime öğrenme programı gibi, rastgele kelimelerle. Tabi önce şuanki bu uygulama düzgün çalışmalı :D.

sozluk dosyası /usr/bin klasöründe dimi? Eğer indirilenlerdeyse ./sozluk şeklinde çalıştırılması gerekiyor.

Ayrıca az önce başka bir pcde linux mintte denedim orada da python versionu ile ilgili sorun oldu sanırım pyinstaller'ı biraz daha öğrenmem gerekiyor.

illedelinux

/usr/bin dizine attığımda da alttaki sonucu veriyor.

GNU/Linux kullanmıyorum, onu yaşıyorum...

lafurus

Alıntı yapılan: illedelinux - 05 Ocak 2019 - 14:12:13
/usr/bin dizine attığımda da alttaki sonucu veriyor.



Bu hatayı vermişti diğer bilgisayar da. Orada Linux Mint kuruluydu. Ben Ubuntu 18.10'da derlediğim için GLIBC_2.28 kullanıyormuş, Ubuntu 18.04'te sanırım sürüm biraz daha eski. Linux Mint'te tekrar derledim. O bilgisayarda GLIBC_2.27 versiyonunu kullanıyor. Belki şimdi upload edeceğim dosyayı deneyebilirsiniz şimdilik kullanmak isterseniz. Ben de bu sorunu nasıl daha iyi çözebilirim diye araştırmaya başlarım :) Çok teşekkür ederim geri bildiriminiz için. Eğer bu dosya da çalışmazsa, tek çıkar yol sanırım kendinizin derlemesi olacak kullanmak istiyorsanız. Dediğim gibi ilerleyen günlerde GLIBC kütüphanesi ile ilgili sorunu çözmeye çalışacağım, tekrardan çok teşekkür ederim.

http://dosya.co/kqw4bylmi6je/sozluk.html

alicilin

https://translate.googleapis.com/translate_a/single?client=gtx&sl=tr&tl=en&dt=t&q=metin
şu şekilde istenilen metni dönüştürüp çıktıyı json olarak alabilirsiniz
<Developer/>

user

Konu hortlatmak gibi olacak belki,  :D ama eklemek istedim. Hep böyle bir şey olsun istemiştim :) Eline sağlık.
Nacizane bir şey ekleyeyim, yeni başlayanlar için bir hoşluk olsun.


#!/bin/bash

PASTE=$(xclip -o)
python3 /home/.../sozluk en "$PASTE"     #ya da bin dosya her nerede ise ve dosya adı ile birlikte;


Bunu çevrilmesi istenen kelimeyi seçip belirlediği kısayol tuşları ile çalıştırabilir. Ben şeffaf kenarsız sağ alt köşede biliren bir terminal açtırıyorum. 

Python klasörünü çalıştıramayan olursa ilk satıra  #!/usr/bin/env python3 bunu eklemeli.

Python dosyasının içerisine 30-40 sn sonra kendi kendini kapatı ekledim.
        time.sleep(30)     
        sys.exit()
bu iki satırı tam for ve if'in hizasında konursa 30 saniye sonra ekran otomatik olarak kapanır. 30 istediğiniz gibi yükseltip alçaltabilirsiniz.


import time #importların altına

        for i in self.ceviriler:
            sira += 1
            print("{}) {}".format(sira, i.find().text))
            self.sozluk[sira] = i.find().text
        time.sleep(30)     
        sys.exit()
        if len(self.sozluk) == 0:


q ile kapat ve 1-2 çeviriyi bul özellikleri çalışmadı bende, bunu getirdiğinizde o seçenek hiç gelmiyor.

gorkemalmaz