Otomatik Tamamlama Sorunu - Çözüm Önerisi (Python)

Selamlar herkese,
Pythonla işim düştükçe program geliştiren bir insanım. Web-scraping,crawling alanlarında bol bol yazılım geliştirdim vakti zamanında. Şimdi de boş kaldıkça birşeyler yapmaya çalışıyorum. Ancak beni acayip irite eden bir durum var. Doğru düzgün bir otomatik tamamlama asla bulamıyorum. En iyisi ‘kite’ dediler onu da beğenmiyorum. Benim cafcaflı yapay zekalı otomatik tamamlamalara, detaylı açıklamalara ihtiyacım yok. Ben sadece şunu istiyorum (örnek üzerinden anlatacağım):

import pytesseract
dir(pytesseract)

output :

['ALTONotSupported', 'Output', 'TSVNotSupported', 'TesseractError', 'TesseractNotFoundError', '_ _builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'get_languages', 'get_tesseract_version', 'image_to_alto_xml', 'image_to_boxes', 'image_to_data', 'image_to_osd', 'image_to_pdf_or_hocr', 'image_to_string', 'pytesseract', 'run_and_get_output']

Görüldüğü gibi ve bildiğim kadarıyla en baştakiler modülün içindeki hata tipleri, _ ile başlayanlar özellikleri ve en son kısımda içinde gömülü fonksiyonlar.
Benim istediğim oto tamamlayıcı sadece bir modülü import ettiysem onun fonksiyonlarını gösterse bana yeter. Vallahi açıklamasında, fazlasında gözüm yok. Diyelim pytesseract modülünün yine kendi isminde olan pytesseract fonksiyonunu yazdım. Yani:

pytesseract.pytesseract

O halde bana

dir(pytesseract.pytesseract)

bunun fonksiyonlarını gösterse yeter.
Derdimi en basit haliyle anlatabilmişimdir umarım. Yıllardır her python ile uğraştığımda bu kadar mükemmel bir dilin nasıl diğer diller gibi gelişmiş bir autocomplate özelliği olmaz aklım almıyor.

Sonuç olarak: Çözüm önerim de şu şekilde; ben şimdi bu konuyu açarken ayak üstü bir program yazdım. kodlar bunlar:

import pytesseract
module_list = []
temp_list = []

dir_of_imported_module = dir(pytesseract)
print(dir_of_imported_module)
for item in dir_of_imported_module:
    print(item)
    if item.startswith('_'):
        temp_list.append(dir_of_imported_module.index(item))
        print("temp_list : ",temp_list)

for item in dir_of_imported_module[temp_list[-1]+1:]:
    module_list.append(item)
print("module_list : ",module_list)

bu kod ilk for döngüsünde _ ile başlayan dir(modül_adı) içinde _ ile başlayan itemleri buluyor.
ikinci for döngüsünde ilk forda bulduğu son indexten 1 fazlasından başlayıp sonuna kadar tüm elemanlarını alıyor. Yani fonksiyonlarının tamamını almış oluyor çıktı şu şekilde;

module_list :  ['get_languages', 'get_tesseract_version', 'image_to_alto_xml', 'image_to_boxes', 'image_to_data', 'image_to_osd', 'image_to_pdf_or_hocr', 'image_to_string', 'pytesseract', 'run_and_get_output']

bu tarz bir program yazıp buna bir arayüz geçirip kullanıcı her modül import ettiğinde onun fonksiyonlarını gösteren bir program yazamaz mıyız? Bu çok mu zor? İlla kite’ye 50$ 100$ hatırlamıyorumda dünyanın parasını mı veriyor herkes? Veya herkes tüm modüllerin fonksiyonlarını kafasında mı tutuyor?

Kullandığım IDE > Atom

Cevap veren arkadaşlara önden teşekkürlerimi ileteyim. Umarım herkese faydalı olur bu konu.

1 Beğeni

Cunku autocomplete dilin degil, editorun bir ozelligi.

Ortaliktaki yuzlerce auto-complete mekanizmasini goz ardi etmemizin sebebi nedir?

Sahsen cogu modulu/fonksiyonu bir kez kullandigim ve kullanmadan once dokumentasyonuna baktigim icin buna gerek kalmiyor. Cok kullanilanlar da akilda kaliyor, veya hatirlanmayan sey isimlerinden ziyade nasil kullanildiklari/parametreleri oluyor.

1 Beğeni

yüzlerce mekanizmadan 1 tanesi

import os
x = os.

yazdığımda kullanabileceğim tüm fonksiyonları alfabetik olarak sıralamıyor. Matlabda var bu olay mesela. Python’da da olmalı diye düşünüyorum. Evet yazılım dili ile alakalı birşey değil ancak dünyanın en çok kullanılan yazılım dilinin böyle bir eksiği olmasını aklım almıyor. Mutlaka bilmediğim birşey vardır diye açtım bu konuyu.
autocomplete paketlerini bende indirdim hatta şuan atomu silip tekrar yükledim jediyi deniyorum ama bir türlü aradığım kaliteyi bulamadım. Çok değil matlab ayarı birşey istiyorum. Noktayı koyunca fonksiyonlar gelsin yeter.

Bu konuyu ileride görecek arkadaşlara not: Aradığım şeyi sonunda buldum. kiteden daha çok beğendim.


Bazı dir(modüladı) yazdığımda çıkmayan ekstra bilgilerde çıkıyor henüz ne olduklarını çözemedim ama en azından modülün tüm fonksiyonlarını tek tek listeliyor. Nasıl yaptığıma gelecek olursak,

  1. atomu bilgisayarımdan sildim
  2. atomla ilgili tüm herşeyi temizledim appdata da felan kalıntı bırakmıştı hepsini tek tek sildim
  3. tekrar atomu indirdim
  4. atom>settings>install’a gelip autocomplete-python’u indirdim.
  5. cmd’ye pip install jedi yazarak jediyi indirdim
    Aradığım şey jediymiş, bunca zaman boşuna acı çekmişim.
    Emek verip yorum yazan kardeşime teşekkür ediyorum. Birgün jedi-kite gibi eklentileri geliştirebilecek seviyeye gelirsem bunlardan çok daha iyisini yapacağım ahtım olsun:)
1 Beğeni

Deyince hepsini deneyip memnun kalmadınız sandım.

Demişsiniz.

Google a şöyle yazdım.

“python autocomplete tools”

Sonra:

4 Top Autocomplete Coding Tools For Python Programmers (analyticsindiamag.com)

Gibi bir başlığa baktım.

  1. Kite 2. Jedi 3.Wing 4.Finisher yazıyor.

Herhalde ver yansın ettiğine göre, bunların hepsini denemiş diye düşündüm.

Zevk meselesidir.

Muhtemelen her dört aracında scope la ilgili sayısız ayarı vardır ne gösterip ne göstermeyecekleri ayarlanabiliyordur.

Sizin göz zevkinize ve kullanım ihtiyaçlarınıza göre hepsi de düzeltilebiliyordur.

Geliştirelim sorun değil de,

Hangi editörü kullanıyorsanız ona göre tasarlamak gerekir.

Bari kullandığınız editörü söyleseydiniz.

Bu arada ilk söylediğim gibi dört tane aracı denemeden sorup sonra dört araçtan birini beğenmeniz.

:slight_smile:
İnsanların içinde fırtınalar kopuyor da biz anlamıyoruz.

1 Beğeni

Baya iğneleyicisiniz hocam :slight_smile:
Her detayı anlatmıyoruz diye bağlamda kopma oldu bunu da yakaladınız şöyle söyleyeyim autocomplete toolları IDE ile alakalı olduğu için atom’un packages’lerinden indirip indirip deniyordum. Çoğunu bir türlü çalıştıramıyordum. İçimde fırtınalar koparan olay buydu:) Sorun ayrıyetten pip install şeklinde paket yüklemesi yapmamammış. Bunları bir modül olarak düşünmediğim için böyle birşeye ihtiyaç kalacağını hiç düşünmemiştim. Stackoverflow’un bu tarz bir konuda açılmış bir konusunun yorumlarının birinde pip install jite komutunu görünce taşlar yerine oturdu :slight_smile:
Kullandığım editörün Atom olduğunu söylemiştim :slight_smile:
Wing ve Finisher’i denemedim birde onları deneyeyim belki kiteden iyilerdir.

1 Beğeni