---
name: ekos-gazete-search
description: "İstanbul Üniversitesi EKOS gazete arşivinde (1928-1942, 53 gazete, 581k sayfa OCR'lı) konu-bazlı sistematik arama. Türkçe-OCR-toleranslı fuzzy regex, öncelikli zaman pencereleri, Obsidian raporu üretimi. Kırım, Filistin, Holodomor, herhangi bir konu için parametrik."
domain: intelligence
subdomain: archival-research
tags:
  - archive
  - foia
  - ottoman-press
  - turkish-press
  - historical-research
  - ocr
  - pdf
  - newspaper
  - early-republic
  - crimea
  - kirim
  - diaspora
personas:
  - scribe
  - scholar
  - oracle
  - frodo
---

# EKOS Gazete Arama — Skill

## Ne zaman çağırılır?

Kullanıcı şunlardan birini söylediğinde:
- "EKOS arşivinde X tara/ara"
- "İstanbul Üniversitesi gazete arşivinde X haberlerini bul"
- "1928-1942 Türk basınında X"
- "nek.istanbul.edu.tr gazetelerinde tarama"
- Var olan keyword set'i (Kırım, Filistin, vb.) ile yeniden çalıştır

## Mimari özet

```
SLUG (53 gazete) → manifest.csv → fuzzy search → hits.jsonl → Obsidian raporu
```

3 aşama, üç ayrı script:
1. **`scripts/01_build_manifest.py`** — 53 gazete sayfasını çekip tüm PDF URL'lerini `manifests/ekos_master.csv`'ye yazar. Bir kez çalıştırılır, cache'lenir.
2. **`scripts/02_search_pdfs.py`** — manifest üzerinden iterate; her PDF'i indir, `pdftotext` ile metni çıkar, fuzzy regex'le ara, hit'leri `hits/<topic>.jsonl`'ye yaz, PDF'i sil.
3. **`scripts/03_render_report.py`** — JSONL'yi `6-Geopolitics/Russia/03. HISTORICAL CONTEXT/` altına master + yıllık raporlar olarak markdown'a render eder.

## Önkoşullar

```bash
# Sistem paketleri (Kali Linux'ta zaten var olabilir)
which pdftotext pdfinfo curl  # poppler-utils

# Python venv (CLAUDE.md kuralı: sisteme değil venv'e kur)
cd /home/salva/.claude/skills/ekos-gazete-search
python3 -m venv .venv
source .venv/bin/activate
pip install requests pyyaml beautifulsoup4
```

## Tipik kullanım akışı

### A) İlk çalıştırma — manifest oluştur

```bash
cd /home/salva/.claude/skills/ekos-gazete-search
source .venv/bin/activate
python scripts/01_build_manifest.py
# → manifests/ekos_master.csv (~tek seferlik, ~5 dk)
```

### B) Arama — Kırım için, öncelikli pencerelerden başlayarak

```bash
# Strateji B: 1932-33, 1936-37, 1941-42 önce
python scripts/02_search_pdfs.py \
  --keywords keywords/kirim.yaml \
  --priority-only \
  --workers 4 \
  --out hits/kirim.jsonl

# Sonra geri kalan tüm yıllar
python scripts/02_search_pdfs.py \
  --keywords keywords/kirim.yaml \
  --workers 4 \
  --out hits/kirim.jsonl
```

### C) POC modu — sadece 5 ana gazete, az veri ile test

```bash
python scripts/02_search_pdfs.py \
  --keywords keywords/kirim.yaml \
  --slug cumhuriyet \
  --year-from 1932 --year-to 1933 \
  --limit 50 \
  --out hits/kirim_poc.jsonl
```

### D) Raporu render et

```bash
python scripts/03_render_report.py \
  --hits hits/kirim.jsonl \
  --topic Kirim \
  --keywords keywords/kirim.yaml
# →  6-Geopolitics/Russia/03. HISTORICAL CONTEXT/EKOS-Kirim-Bulgular.md (master)
# →  EKOS-Kirim-1932.md, EKOS-Kirim-1933.md, ... (yıllık)
```

## Yeni konu eklemek

1. `keywords/<topic>.yaml` oluştur — `keywords/_template.yaml`'ı şablon olarak kullan.
2. Wordlist'i doldur: `canonical`, `aliases`, `proper_nouns` (kişi adları), `disambiguators` (false positive filtreleri).
3. `priority_windows` tanımla — konunun yoğunlaştığı yıllar.
4. Çalıştır: `python scripts/02_search_pdfs.py --keywords keywords/<topic>.yaml --out hits/<topic>.jsonl`

## OCR Toleransı

PDF'lerin OCR'ı 2014 vintage, kalitesi orta-düşük. Türkçe diakritikleri sistematik olarak bozulmuş:

| Doğru | OCR'da | Regex class |
|---|---|---|
| `ı` | `1, i, l, |` | `[1iIıİlj|]` |
| `ş` | `~, s` | `[s~ş]` |
| `ç` | `c` | `[cç]` |
| `ğ` | `g` | `[gğ]` |
| `ü` | `u, ii` | `(?:[uü]|ii)` |
| `ö` | `o` | `[oö]` |

`scripts/lib/fuzzy.py` bu mapping'i otomatik uygular: `build_pattern("Kırım")` → `r"K[1iIıİlj|][rR][1iIıİlj|]m"`.

## Sınırlar ve uyarılar

- **Yunanca/Ermenice gazeteler** (apoyevmatini, aravelk, jamanak, metapolitefsis): OCR'ları henüz test edilmedi. İlk taramada Latin transkripsiyon aliases üzerinden tarayacak. Yetersizse ileride Tesseract `ell`/`hye` ile re-OCR eklenir.
- **Throttle:** 0.25 sn/istek. 581k sayfa tüm arşiv için 4 worker × ~12-18 saat. Kütüphaneye nezaket.
- **False positive:** "Kerim" (özel ad) ↔ "Kırım", "Kefe" (ilçe) ↔ "kefil/kefe" çakışması olur. Hit listesini gözden geçirirken `disambiguators` listesini büyüt.
- **Telif:** 1928-1942 PDF'ler kütüphane tarafından dağıtılıyor; biz sadece arama yapıp URL referansı kaydediyoruz, kalıcı kopya almıyoruz. Yasal sorun yok.

## Çıktı şeması (`hits/*.jsonl`)

Her satır bir hit:
```json
{
  "slug": "cumhuriyet",
  "year": "1933",
  "month": "subat",
  "day": "12",
  "page": 3,
  "keyword": "Kırım",
  "match": "K1r1m",
  "snippet": "...lan acl1k haberlerine gore K1r1m'da binlerce..." ,
  "url": "https://nek.istanbul.edu.tr/.../cumhuriyet_1933_subat_12_.pdf"
}
```

## Persona ile entegrasyon

Bu skill, `persona-scribe-salva` (FOIA arşivci) personasının el aletidir. Scribe persona, arşiv-tarama görevi aldığında bu skill'i çağırır. Diğer alakalı personalar:
- `persona-frodo-russia` — Sovyet/Rus dönem analizi için hit'leri yorumlar
- `persona-centurion` — Askeri/savaş haberleri (1941-42 Doğu Cephesi)
- `persona-polyglot-russian` — Yunanca/Ermenice gazeteler aktive olduğunda

## Bilinen geliştirme alanları

- [ ] Yunanca/Ermenice OCR re-pass (Tesseract 5)
- [ ] Hit-level Tesseract doğrulaması (yanlış pozitif azaltma)
- [ ] Dataview view'ı (Obsidian'da hit listesi sortlanabilir)
- [ ] Kütüphaneye yazılı bilgi notu (büyük tarama öncesi)
