Metadata-Version: 2.4
Name: traisearch
Version: 1.0.0
Summary: Hafif, CLI tabanlı akıllı arama motoru
License: TraiSearch License v1.0
        
        Bu yazılımın tüm hakları saklıdır.
        
        İzin verilenler:
        - Yazılımın kişisel kullanım amacıyla indirilmesi ve çalıştırılması
        
        Yasaklananlar:
        - Kaynak kodunun değiştirilmesi
        - Türev çalışmalar oluşturulması
        - Yazılımın yeniden dağıtılması
        - Ticari kullanım
        
        Bu yazılım "olduğu gibi" sunulmaktadır, hiçbir garanti verilmez.
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file
Dynamic: requires-python

# 🔎 traisearch

> Hafif, sıfır bağımlılıklı CLI tabanlı akıllı arama motoru.  
> Sadece Python standart kütüphanesi. Dış paket yok.

```
traisearch "bitcoin kaç tl"
traisearch "dolar kaç tl"
traisearch "son dakika haber"
traisearch "yapay zeka nedir"
```

---

## 📋 İçindekiler

- [Özellikler](#özellikler)
- [Kurulum](#kurulum)
- [Kullanım](#kullanım)
- [Mimari](#mimari)
- [Modüller](#modüller)
- [Intent Sistemi](#intent-sistemi)
- [Veri Kaynakları](#veri-kaynakları)
- [Örnek Çıktılar](#örnek-çıktılar)
- [Kısıtlar ve Tasarım Kararları](#kısıtlar-ve-tasarım-kararları)

---

## ✨ Özellikler

| Özellik | Detay |
|---|---|
| **Sıfır bağımlılık** | Sadece Python stdlib (urllib, json, xml, argparse…) |
| **Akıllı intent tespiti** | Keyword puanlama, çok kelimeli ifade eşleşmesi |
| **4 canlı veri kaynağı** | CoinGecko, Frankfurter, BBC RSS, Wikipedia TR |
| **Fusion motoru** | Birden fazla kaynak → tek temiz cevap |
| **Retry sistemi** | Her API isteğinde 3 deneme, kademeli bekleme |
| **Graceful hata yönetimi** | Sistem asla crash olmaz, her zaman anlamlı çıktı |
| **Windows uyumlu** | UTF-8 reconfigure, `traisearch "sorgu"` olarak çalışır |
| **pip kurulumu** | `pip install -e .` ile global komut olarak yüklenir |

---

## ⚡ Kurulum

### Gereksinimler

- Python 3.8+
- İnternet bağlantısı (API'lere erişim için)

### pip ile kur

```bash
git clone https://github.com/kullanici/traisearch.git
cd traisearch
pip install -e .
```

> `-e` (editable) bayrağı sayesinde `src/` altındaki değişiklikler  
> anında yansır, yeniden kurulum gerekmez.

### Kurulumu doğrula

```bash
traisearch --versiyon
# traisearch 1.0.0

traisearch --help
```

---

## 🚀 Kullanım

### Temel sözdizimi

```bash
traisearch "sorgunuz"
```

### Kripto Para

```bash
traisearch "bitcoin kaç tl"
traisearch "ethereum fiyatı"
traisearch "solana kaç dolar"
traisearch "dogecoin"
traisearch "btc"
```

### Döviz Kuru

```bash
traisearch "dolar kaç tl"
traisearch "euro kaç tl"
traisearch "sterlin kaç"
traisearch "japon yeni"
traisearch "chf kuru"
```

### Haberler

```bash
traisearch "son dakika haber"
traisearch "gündem ne"
traisearch "bugün ne oldu"
traisearch "teknoloji haberleri"
traisearch "ekonomi haberleri"
```

### Bilgi / Ansiklopedi

```bash
traisearch "yapay zeka nedir"
traisearch "blockchain nasıl çalışır"
traisearch "kuantum bilgisayar nedir"
traisearch "türkiye tarihi"
traisearch "einstein kimdir"
```

### Yardım

```bash
traisearch           # yardım menüsü
traisearch --help
traisearch --versiyon
```

---

## 🏗 Mimari

```
Kullanıcı Girdisi
      │
      ▼
  ┌─────────┐
  │  cli.py │  ← argparse, Windows UTF-8 fix
  └────┬────┘
       │ sorgu: str
       ▼
  ┌─────────┐
  │ core.py │  ← sistem orkestrasyonu
  └────┬────┘
       │
   ┌───┴──────────────────────────┐
   │                              │
   ▼                              ▼
┌──────────┐              ┌────────────┐
│ analiz.py│              │  router.py │
│          │─── intent ──▶│            │
│ intent   │              │ hangi API? │
│ detection│              └─────┬──────┘
└──────────┘                    │
                                ▼
                       ┌─────────────────┐
                       │  kaynaklar.py   │
                       │                 │
                       │ ┌─────────────┐ │
                       │ │  CoinGecko  │ │  kripto
                       │ ├─────────────┤ │
                       │ │Frankfurter  │ │  döviz
                       │ ├─────────────┤ │
                       │ │  BBC RSS    │ │  haber
                       │ ├─────────────┤ │
                       │ │  Wikipedia  │ │  bilgi
                       │ └─────────────┘ │
                       └────────┬────────┘
                                │ [sonuç listesi]
                                ▼
                          ┌──────────┐
                          │ fusion.py│  ← birleştir, duplikat temizle
                          └────┬─────┘
                               │ birlesik_veri
                               ▼
                        ┌────────────┐
                        │formatter.py│  ← Türkçe doğal dil
                        └─────┬──────┘
                              │ str
                              ▼
                         print(cevap)
```

---

## 📁 Modüller

### `cli.py` — Giriş Noktası

- `argparse` ile `sorgu` argümanını alır
- Windows'ta `sys.stdout.reconfigure(encoding="utf-8")` uygular
- `core.ara(sorgu)` çağırır, sonucu `print` eder
- Boş girdide yardım menüsü gösterir

### `core.py` — Orkestratör

- Tüm pipeline'ı sırayla çalıştırır
- `try/except` ile sistem çökmelerini yakalar
- Her koşulda anlamlı string döndürür

### `analiz.py` — Intent Detection

- **ML yok**, saf keyword tabanlı puanlama
- `INTENT_AGIRLIKLAR`: her intent için ağırlıklı keyword sözlüğü
- `COKLU_IFADELER`: çok kelimeli ifadelere yüksek öncelik
- Türkçe karakter normalizasyonu (ş→s, ğ→g vb.)
- Tam kelime + kısmi eşleşme
- 0–100 arası güven skoru
- `kripto_sembol_bul()`, `doviz_sembol_bul()`, `wikipedia_arama_terimi()` yardımcıları

### `router.py` — Yönlendirici

- Intent → API fonksiyonu eşlemesi
- `_kripto_route`, `_doviz_route`, `_haber_route`, `_bilgi_route`, `_genel_route`
- USD sorulduğunda EUR'u da paralel çeker (karşılaştırma için)
- Haber kategorisini sorgudaki anahtar kelimeden tespit eder

### `kaynaklar.py` — Veri Kaynakları

```python
# Hepsi bu formatta döner:
{
    "source": "coingecko",   # kaynak adı
    "type":   "kripto",      # veri tipi
    "data":   { ... },       # içerik
    "hata":   None,          # hata mesajı (varsa)
    "basarili": True,        # başarı bayrağı
}
```

| Kaynak | Endpoint | Kullanım |
|---|---|---|
| CoinGecko | `api.coingecko.com/api/v3` | Kripto fiyat, değişim, hacim, piyasa değeri |
| Frankfurter | `api.frankfurter.app` | Günlük döviz kuru (ECB verisi) |
| BBC RSS | `feeds.bbci.co.uk/turkce/rss.xml` | Türkçe haber başlıkları |
| Wikipedia | `tr.wikipedia.org/api/rest_v1` | Türkçe ansiklopedi özeti |

**Retry sistemi:**

```python
MAX_RETRY   = 3        # maksimum deneme
TIMEOUT     = 8        # saniye
RETRY_WAIT  = 1.0      # deneme arası bekleme (artan)
```

- HTTP 429 (rate limit) → 2x uzun bekleme
- HTTP 400/401/403/404 → anında dur, retry yok
- `TimeoutError`, `URLError` → kademeli bekleme

### `fusion.py` — Veri Birleştirme

- `KAYNAK_SKORU` tablosu: her kaynağa 1–10 güvenilirlik puanı
- Başarılı sonuçları filtreler, başarısızları atar
- Intent'e göre farklı birleştirme stratejisi:
  - **kripto**: en yüksek puanlı kaynağı seç
  - **döviz**: tüm kurları birleştir
  - **haber**: duplikat başlıkları temizle (≥%60 örtüşme)
  - **bilgi**: en uzun özeti seç
- `_haber_duplikat_temizle()`: kelime örtüşmesi tabanlı filtre

### `formatter.py` — Türkçe Formatlayıcı

- Ham veri veya JSON **asla** gösterilmez
- `_para_formatla()`: trilyon/milyar/milyon kısaltmaları
- `_degisim_oku()`: `▲ %2.34 artış` / `▼ %1.12 düşüş`
- `_yon_emoji()`: 🚀 📈 ➡️ 🔻 📉
- Bayrak emoji ile para birimi eşleşmesi
- Haber özetlerini 120 karakterde, kelime sınırında keser
- Wikipedia özetini 350 karakterde, cümle sınırında keser

---

## 🧠 Intent Sistemi

Intent tespiti saf Python ile, ML kullanmadan yapılır.

### Puanlama Örneği

```
Sorgu: "bitcoin kaç tl"

Çok kelimeli eşleşme:
  "bitcoin kaç" → kripto +18

Tekil keyword eşleşmesi:
  "bitcoin"     → kripto +10
  "kaç"         → kripto +2, doviz +2
  "tl"          → kripto +1, doviz +3
  "coin"        → kripto +7

Toplam:
  kripto = 38   ← kazanan
  doviz  =  5
  haber  =  0
  bilgi  =  0

Güven skoru: min(100, 38/20 × 100) = 100.0
```

### Intent Öncelik Sırası

```
1. Çok kelimeli özel ifadeler  (en yüksek öncelik, +15–20 puan)
2. Tam kelime eşleşmesi        (tam ağırlık)
3. Kısmi eşleşme               (×0.7 ağırlık, len>3)
4. Uzunluk bonusu              (bilgi intent için ×1.2)
5. Fallback → genel            (toplam puan < 3 ise)
```

---

## 🌐 Veri Kaynakları

### CoinGecko

- **URL**: `https://api.coingecko.com/api/v3/simple/price`
- **Ücretsiz**: Evet (rate limit: ~30 istek/dk)
- **Dönen veri**: USD, TRY, EUR fiyatı + 24s değişim + hacim + piyasa değeri
- **Desteklenen coinler**: `bitcoin`, `ethereum`, `solana`, `ripple`, `cardano`, `dogecoin`, `avalanche-2`, `polkadot`, `litecoin`, `matic-network`, `shiba-inu` ve daha fazlası

### Frankfurter

- **URL**: `https://api.frankfurter.app/latest`
- **Kaynak**: Avrupa Merkez Bankası (ECB)
- **Ücretsiz**: Evet, sınırsız
- **Desteklenen para birimleri**: USD, EUR, GBP, JPY, CHF, RUB, CNY, SAR, AED, KWD
- **Not**: TRY baz para olarak desteklenmez, ters çevirme yapılır

### BBC News RSS

- **URL**: `https://feeds.bbci.co.uk/turkce/rss.xml`
- **Kategoriler**: `turkce`, `dunya`, `teknoloji`, `ekonomi`
- **Format**: XML/RSS → Python `xml.etree.ElementTree`
- **Güncelleme**: Canlı, gerçek zamanlı

### Wikipedia Türkçe

- **Arama**: `tr.wikipedia.org/w/api.php?action=query&list=search`
- **Özet**: `tr.wikipedia.org/api/rest_v1/page/summary/{başlık}`
- **Fallback**: `extracts` API (özet endpoint başarısız olursa)

---

## 📸 Örnek Çıktılar

### Kripto Fiyatı

```
🚀 Bitcoin (BTC) fiyatı:

  🇹🇷 TL   →  3.456.789 ₺
  🇺🇸 USD  →  98.234,50 $
  🇪🇺 EUR  →  91.450,20 €

  📊 24s değişim  →  ▲ %3.21 artış
  💹 24s hacim   →  42.30 milyar $
  🏦 Piyasa değ. →  1.95 trilyon $

  📡 Kaynak: CoinGecko
```

### Döviz Kuru

```
🇺🇸 Amerikan Doları (USD) döviz kuru:

  1 USD  =  35,1240 ₺
  1 EUR  =  38,4510 ₺ 🇪🇺
  1 GBP  =  45,2300 ₺ 🇬🇧

  📅 Tarih: 2025-04-26
  📡 Kaynak: Frankfurter
```

### Son Dakika Haber

```
📰 BBC News Türkçe — Son Dakika Haberleri
   (6 haber bulundu)

  1. Türkiye ekonomisinde büyüme beklentisi
     └─ Merkez Bankası açıklamasına göre yıllık büyüme...

  2. Yapay zeka regülasyonları güncellendi
     └─ AB, yeni yönetmelikler çerçevesinde...

  ...

  📡 Kaynak: BBC News RSS
```

### Bilgi / Wikipedia

```
📚 Yapay Zeka
   bilgisayar bilimi dalı

  Yapay zeka (YZ), insan zekasının bilgisayarlar tarafından
  simüle edilmesini kapsayan bilgisayar bilimi dalıdır. 
  Makine öğrenmesi, derin öğrenme ve doğal dil işleme gibi 
  alt alanları içerir...

  🔗 Daha fazla: https://tr.wikipedia.org/wiki/Yapay_zeka
  📡 Kaynak: Wikipedia Türkçe
```

---

## ⚙️ Kısıtlar ve Tasarım Kararları

| Kısıt | Neden |
|---|---|
| Sadece stdlib | Kurulum sürtünmesini sıfırla indir, her Python ortamında çalış |
| `urllib.request` | `requests` kütüphanesi yasak, aynı işlevi görür |
| ML yok | Ağırlık sözlükleri %95 doğrulukla iş yapar, model gerektirmez |
| Sunucu yok | CLI aracı; web sunucusu gereksiz karmaşıklık ekler |
| Her zaman çıktı | `try/except` tüm pipeline'ı sarar, crash olmaz |
| Türkçe karakter normalizasyonu | "şeker" ve "seker" aynı kelimeyi eşler |

---

## 🗂 Proje Yapısı

```
traisearch/
├── pyproject.toml          ← pip metadata & entry point
├── setup.py                ← eski pip uyumluluğu için fallback
├── README.md
└── src/
    └── traisearch/
        ├── __init__.py
        ├── cli.py          ← giriş noktası (traisearch komutu)
        ├── core.py         ← orkestratör
        ├── analiz.py       ← intent detection
        ├── router.py       ← API yönlendirici
        ├── kaynaklar.py    ← CoinGecko, Frankfurter, BBC, Wikipedia
        ├── fusion.py       ← veri birleştirme motoru
        └── formatter.py    ← Türkçe doğal dil formatlayıcı
```

---

## 📄 Lisans

Bu yazılım “TraiSearch License v1.0” kapsamında sunulmaktadır.

### ✔ İzin verilenler
- Yazılımın kişisel ve eğitim amaçlı kullanımı
- Paket olarak çalıştırılması

### ❌ Yasaklananlar
- Kaynak kodun değiştirilmesi
- Türev ürün oluşturulması
- Yeniden dağıtım
- Ticari kullanım

### ⚠️ Not
Bu yazılım “olduğu gibi” sağlanır. Herhangi bir garanti verilmez.
