---
title: 'Belge Hazırlama'
source: 'https://academia.sh/tr/kurslar/rag/belge-hazirlama'
course: 'Gömme Vektörleri ve Erişim Artırılmış Üretim'
language: tr
updated: '2026-08-17T18:06:35+00:00'
license: 'CC BY-SA 4.0'
---

# Belge Hazırlama

Aynı kurgu dağarcığın ham hâlinden başlayarak dört hazırlık düzeyinin aynı kırk sorguda ölçülmesi: belge başına tek blok olarak bırakılan kaynak erişim anmasını 1,0000 ile en yükseğe çıkarıyor ama isteklerin tamamı bağlam penceresini aşıyor ve üretim 0,0000'a iniyor, yani tek sütun basılsaydı en kötü kurulum kazanırdı. Satır bazlı kaba bölme 1805 parça saklıyor ve üretimde 0,9000 veriyor, yapıya duyarlı hazırlık ise 693 parçayla 0,9250 ve önceki dersin başladığı yeri birebir üretiyor; aradaki 0,0250 bu kursun 0,0750 eşiğinin altındadır ve ölçülmemiş sayılır. Yinelenen satır süzgeci 798 satır ve 6962 belirteç atarken 568 kavram-belge bağının 96'sını yok ediyor ve sekiz belgede ana kavramın kanıtını siliyor; eşik ikiye indiğinde kayıp 283 bağa ve altmış belgeye çıkıyor. Erişim ve üretim sütunları bu kaybın hiçbirini göstermiyor.

Önceki ders dağarcığı hazır bulmuştu: iki yüz belge, altı yüz doksan üç temiz paragraf, ayrı
tutulmuş kod ve sınıf alanları. O hazırlık kendiliğinden olmadı. Saha ekibinin kayıtları bir form
başlığı, bir kod satırı, satır ortasından bölünmüş cümleler ve bir sayfa altlığı taşır; erişim
hattına giren şey bunların hepsidir.

Bu dersin sorusu tek: **hazırlık erişim anmasına ne katıyor, ve hazırlığın kendisi neyi atıyor.**
İkinci yarısı birincisi kadar önemlidir, çünkü temizleme bir seçme işidir ve seçilmeyen her satır
dağarcıktan silinir. Ayrıştırma, temizleme ve meta veri çıkarma **yordamı** M26/K03'ün veri toplama
ve hazırlama kursunda ölçüldü ve burada **tekrarlanmaz**; buraya eklenen tek şey, o yordamın
erişim hattındaki karşılığıdır.

- **EH8.** Kod bir **benzeticidir**; dağarcık, ham kaynak biçimi ve sorgular **kurgudur**, tohum
  **20260218**. Gömme ve dil modeli önceki dersteki tanımlardır.
- **EH9.** Ham kaynak dört artık taşır: her belgede yinelenen **form başlığı**, metnin içine
  gömülü **kod ve sınıf alanı**, paragrafların **0,45**'inde satır ortasından bölünme, ve her
  belgede yinelenen **sayfa altlığı**. Devam satırı iki boşlukla girintilidir.
- **EH10.** Bölünme noktası paragrafın birinci, beşinci ya da yedinci sözcüğünden sonradır.
  Birinci ve yedinci nokta bir **belge yüzeyini ortadan böler** ve o yüzeyi arama için görünmez
  kılar; beşinci nokta iki yüzeyi de sağlam bırakır.
- **EH11.** **Ham blok** belge başına tek parça bırakır. **Satır bazlı** her ham satırı ayrı parça
  sayar. **Yinelenen satır süzgeci** üçten çok belgede geçen satırı atar. **Yapıya duyarlı
  hazırlık** devam satırlarını birleştirir, bilinen başlık ile altlığı atar, kod ve sınıf alanını
  metinden çıkarıp alana yazar.
- **EH12.** Ölçütler önceki dersin tanımlarıdır ve ilk üç parça getirilir; eşik **0,0750**. Bedel
  iki birimledir: **saklanan parça sayısı** (her parça bir vektör tutar, vektör başına otuz iki
  sayı) ve **saklanan belirteç**.
- **EH13.** **Kavram-belge bağı**, bir belgenin metninde bir kavramın belge yüzeyinin geçmesidir.
  Bu sayı sorgu kümesinden ve koşumdan **bağımsızdır**.

## Ham Kaynağın Hâli

İlk blok kurgu dağarcığı kurar, üstüne ham kaynak biçimini uygular ve bir belgenin ham hâlini
basar. Yazdırılan belgede üç bölünme vardır ve üçü de ayrı noktadadır.

```python
# KURGUDUR. Dagarcik, kavram ekseni, gomme ve ham kaynak bicimi benzeticidir; gercek bir
# gomme uc noktasi cagrilmaz. Tohum 20260218.
TOHUM, M32 = 20260218, 0xFFFFFFFF
BOYUT = 32


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


def ayrik(u, w):
    t = 0.0
    for i, x in enumerate(w):
        t += x
        if u < t:
            return i
    return len(w) - 1


def belirtecle(m):
    b = []
    for s in m.lower().replace(",", " , ").split():
        while len(s) > 5:
            b.append(s[:5])
            s = s[5:]
        b.append(s)
    return b


# ---- KURGU anlam ekseni: her kavramin belge dilinde ve sorgu dilinde ayri yuzeyi var
SINIF = ["tarife", "ariza", "sayac", "kesinti", "bakim"]
KOD = {"tarife": "TR", "ariza": "AR", "sayac": "SY", "kesinti": "KS", "bakim": "BK"}
KAVRAM = {                       # kavram: (sinif, belge yuzeyi, sorgu yuzeyi)
    "basamak":   ("tarife", "kademe esigi", "hangi dilimdeyim"),
    "birim":     ("tarife", "birim ucret", "metrekup fiyati"),
    "abonetip":  ("tarife", "abone tipi", "mesken mi isyeri mi"),
    "gecis":     ("tarife", "tarife gecisi", "plan degistirme"),
    "arizakod":  ("ariza", "ariza kodu", "hata numarasi"),
    "sizinti":   ("ariza", "hat sizintisi", "su kacagi"),
    "basinc":    ("ariza", "basinc dususu", "zayif akis"),
    "ekip":      ("ariza", "saha ekibi", "gorevli ne zaman gelir"),
    "endeks":    ("sayac", "endeks degeri", "sayac ustundeki rakam"),
    "okuma":     ("sayac", "okuma yordami", "nasil kaydediliyor"),
    "degisim":   ("sayac", "sayac degisimi", "cihaz yenileme"),
    "dogrula":   ("sayac", "okuma dogrulamasi", "yanlis girilmis mi"),
    "planli":    ("kesinti", "planli kesinti", "onceden duyurulan durma"),
    "duyuru":    ("kesinti", "duyuru kanali", "nereden ogrenirim"),
    "sure":      ("kesinti", "kesinti suresi", "ne kadar surer"),
    "geridonus": ("kesinti", "yeniden verme", "ne zaman gelir"),
    "periyot":   ("bakim", "periyodik bakim", "duzenli kontrol"),
    "vana":      ("bakim", "vana kontrolu", "musluk kapatma duzeni"),
    "filtre":    ("bakim", "filtre degisimi", "temizleme parcasi"),
    "kalib":     ("bakim", "kalibrasyon kaydi", "olcum ayari"),
}
ANAHTAR = list(KAVRAM)
ORTAK = ["kayit", "bolge", "donem", "islem", "form", "onay", "not"]

# ---- KURGU dagarcik
BELGE = []
for i in range(200):
    r = uretec(TOHUM + 7919 * i)
    s = SINIF[ayrik(r(), [0.22, 0.24, 0.20, 0.18, 0.16])]
    kav = [k for k in ANAHTAR if KAVRAM[k][0] == s]
    ana = kav[int(r() * len(kav))]
    n = 2 + int(r() * 4)
    par, kavlar = [], [ana]
    for _ in range(n):
        y = kav[int(r() * len(kav))]
        kavlar.append(y)
        o = ORTAK[int(r() * len(ORTAK))]
        par.append(f"{KAVRAM[y][1]} icin {o} tutulur ve {KAVRAM[ana][1]} ile birlikte yazilir")
    BELGE.append({"kod": f"{KOD[s]}{i + 1:03d}", "sinif": s, "ana": ana, "kavram": kavlar,
                  "baslik": f"{KAVRAM[ana][1]} yordami", "par": par})


# ---- KURGU gomme: yuzey once kavrama, kavram sonra boyuta dusuruluyor
def _kavramla(m, alan=True):
    v = [0.0] * len(ANAHTAR)
    dm = " " + m.lower() + " "
    for i, k in enumerate(ANAHTAR):
        bel, sor = KAVRAM[k][1], KAVRAM[k][2]
        if bel in dm:
            v[i] += 1.0
        if sor in dm:
            v[i] += 1.0 if alan else 0.0
    if not alan:
        for o in ORTAK:
            if " " + o + " " in dm:
                for i in range(len(ANAHTAR)):
                    v[i] += 0.05
    return v


IZDUS = []
for i in range(len(ANAHTAR)):
    r = uretec(TOHUM ^ (i + 1) * 2654435761)
    IZDUS.append([r() * 2 - 1 for _ in range(64)])


def gom(m, boyut=BOYUT, alan=True):
    k = _kavramla(m, alan)
    v = [0.0] * boyut
    for i, a in enumerate(k):
        if a:
            for j in range(boyut):
                v[j] += a * IZDUS[i][j % 64]
    n = sum(x * x for x in v) ** 0.5
    return [x / n for x in v] if n else v


def aci(a, b):
    return sum(x * y for x, y in zip(a, b))


# ---- KURGU sorgu kumesi: sorgu dili belge dilinden ayri
SORGU = []
for i in range(40):
    r = uretec(TOHUM + 104729 * i)
    d = BELGE[int(r() * len(BELGE))]
    SORGU.append({"metin": f"{KAVRAM[d['ana']][2]} {ORTAK[int(r() * len(ORTAK))]}",
                  "sinif": d["sinif"], "kavram": d["ana"]})

# ---- KURGU ham kaynak: form basligi, kod alani, bolunmus paragraflar, sayfa altligi
BASLIK, ALTLIK = "bolge mudurlugu saha kayit formu", "ic kullanim icindir dagitilamaz"
HAM = []
for i, d in enumerate(BELGE):
    r = uretec(TOHUM + 3011 * i)
    s = [BASLIK, f"belge kodu {d['kod']} sinif {d['sinif']}", d["baslik"]]
    for p in d["par"]:
        w = p.split()
        if r() < 0.45:
            k = [1, 5, 7][ayrik(r(), [0.4, 0.25, 0.35])]
            s += [" ".join(w[:k]), "  " + " ".join(w[k:])]   # devam satiri iki bosluk girintili
        else:
            s.append(p)
    HAM.append(s + [ALTLIK])

j = next(i for i, s in enumerate(HAM)
         if sum(x.startswith("  ") for x in s) >= 2 and len(s) <= 10)
print("ham kaynak %s, %d satir:" % (BELGE[j]["kod"], len(HAM[j])))
for x in HAM[j]:
    print("  |" + x)
print("toplam ham satir %d, hazir paragraf %d"
      % (sum(len(s) for s in HAM), sum(len(d["par"]) for d in BELGE)))
```

```
ham kaynak SY003, 10 satir:
  |bolge mudurlugu saha kayit formu
  |belge kodu SY003 sinif sayac
  |okuma yordami yordami
  |okuma dogrulamasi icin not tutulur
  |  ve okuma yordami ile birlikte yazilir
  |sayac degisimi icin form tutulur ve okuma
  |  yordami ile birlikte yazilir
  |okuma
  |  yordami icin islem tutulur ve okuma yordami ile birlikte yazilir
  |ic kullanim icindir dagitilamaz
toplam ham satir 1805, hazir paragraf 693
```

Sekizinci satır tek bir sözcüktür: `okuma`. Devamı bir alt satırdadır. Bu belgede `okuma yordami`
yüzeyi üç kez geçiyor ama satır sınırı yüzeyi ortadan böldüğü için o geçişlerden biri arama
tarafında **yok** sayılır. Altıncı satır da aynı şeyi yapıyor. Bölünme kayıp değildir; **hazırlık
yapılmadığı sürece** kayıptır.

## Dört Hazırlık Düzeyi

İkinci blok dil modeli benzeticisini kurar, dört hazırlık düzeyini üretir ve dördünü aynı kırk
sorguda ölçer. Yönerge tek kavramlık yanıt dayattığı için model doğrudan etiketi yazar.

```python
import math
# ---- KURGU dil modeli benzeticisi: onceki dersin benzeticisi, yanit uzayi yirmi kavram
PENCERE = 240
ON_BILGI = {"sizinti", "basinc", "sure", "degisim", "vana", "duyuru", "gecis"}
SAYAC = [0]


def izno(m):
    h = 2166136261
    for c in m:
        h = ((h ^ ord(c)) * 16777619) & M32
    return h


def cagir(istem, tohum=TOHUM, sicaklik=0.6):
    SAYAC[0] += 1
    b = belirtecle(istem)
    if len(b) > PENCERE:
        return {"durum": "baglam_asimi", "giris": len(b), "cikis": 0, "yanit": ""}
    if SAYAC[0] % 37 == 0:
        return {"durum": "hiz_siniri", "giris": len(b), "cikis": 0, "yanit": ""}
    r = uretec(tohum ^ izno(istem))
    dm = " " + istem.lower() + " "
    p = {k: 0.15 for k in ANAHTAR}
    for k in ANAHTAR:
        p[k] += 2.0 * dm.count(KAVRAM[k][1])             # belge dilini model taniyor
        if k in ON_BILGI and KAVRAM[k][2] in dm:
            p[k] += 2.0
    w = [math.exp(p[a] / sicaklik) for a in sorted(p)]
    y = sorted(p)[ayrik(r(), [x / sum(w) for x in w])]
    return {"durum": "tamam", "giris": len(b), "cikis": len(belirtecle(y)), "yanit": y}


YONERGE = ("Talebi su kavramlardan birine bagla: " + " , ".join(ANAHTAR) +
           " . Yanit olarak tek kavram yaz . ")


def birlestir(s):
    c = []
    for x in s:
        if x.startswith("  ") and c:
            c[-1] += " " + x.strip()                     # devam satiri geriye eklenir
        else:
            c.append(x)
    return c


SAY = {}
for s in HAM:
    for x in set(birlestir(s)):
        SAY[x] = SAY.get(x, 0) + 1


def hazirla(kip, esik=3):
    p, atilan = [], []
    for i, s in enumerate(HAM):
        if kip == "ham blok":
            c = [" ".join(s)]
        elif kip == "satir bazli":
            c = [x.strip() for x in s]
        elif kip == "yinelenen suzme":
            c = [x for x in birlestir(s) if SAY[x] < esik]
            atilan += [x for x in birlestir(s) if SAY[x] >= esik]
        else:
            c = [x for x in birlestir(s) if x not in (BASLIK, ALTLIK, BELGE[i]["baslik"])
                 and not x.startswith("belge kodu")]
        p += [{"kod": BELGE[i]["kod"], "sinif": BELGE[i]["sinif"], "metin": x,
               "kavram": [k for k in ANAHTAR if KAVRAM[k][1] in x]} for x in c]
    return p, atilan


def olc(p, k=3):
    SAYAC[0] = 0
    v = [gom(x["metin"]) for x in p]
    a = [0] * 6
    for s in SORGU:
        q = gom(s["metin"])
        ug = sorted(range(len(p)), key=lambda i: -aci(q, v[i]))[:k]
        h = [s["kavram"] in p[i]["kavram"] for i in ug]
        a[0] += any(h)
        a[1] += sum(h) / k
        a[2] += sum(p[i]["sinif"] == s["sinif"] for i in ug) / k
        y = cagir(YONERGE + "Kaynak: " + " . ".join(p[i]["metin"] for i in ug) +
                  " . Talep: " + s["metin"])
        a[3] += y["durum"] == "baglam_asimi"
        a[4] += y["giris"] + y["cikis"]
        a[5] += y["yanit"] == s["kavram"]
    return [x / len(SORGU) for x in a[:4]] + [a[4], a[5] / len(SORGU)]


print("hazirlik         parca saklanan   anma kesinlik  sinif  uretim  asim belirtec")
for kip in ("ham blok", "satir bazli", "yinelenen suzme", "yapiya duyarli"):
    p, at = hazirla(kip)
    m = olc(p)
    print("%-16s%6d %8d %6.4f %8.4f %6.4f %7.4f %5.2f %8d"
          % (kip, len(p), sum(len(belirtecle(x["metin"])) for x in p),
             m[0], m[1], m[2], m[5], m[3], m[4]))
```

```
hazirlik         parca saklanan   anma kesinlik  sinif  uretim  asim belirtec
ham blok           200    16183 1.0000   0.9667 0.9667  0.0000  1.00    12345
satir bazli       1805    16183 0.9500   0.9500 0.9500  0.9000  0.00     4412
yinelenen suzme    695     9221 0.9500   0.9500 0.9500  0.9250  0.00     5341
yapiya duyarli     693    11281 0.9500   0.9500 0.9500  0.9250  0.00     5343
```

Birinci satır bu dersin en önemli sayısıdır. Hazırlanmamış kaynak, **erişim sütununun en iyisidir**:
anma **1,0000**, kesinlik ve sınıf isabeti **0,9667**. Sebep açık, çünkü belge başına tek parça
tutulduğunda o parça belgedeki bütün kavramları taşır ve hedefi kaçırması güçleşir. Aynı satırın
üretim isabeti **0,0000**'dır. Bağlam aşımı payı **1,00**: kırk isteğin kırkı da pencereye
sığmamıştır, çünkü üç belge birden istemin içine konmuştur. **Tek sütun basılsaydı bu kurulum
kazanırdı.**

Satır bazlı bölme öbür uçtur. Anma **0,9500**'e iner, çünkü bölünmüş yüzeyler artık aranamaz;
buna karşılık istek başına belirteç en düşük değerdedir (**4412**), zira getirilen satırlar
kısadır. Bedeli saklanan parça sayısında ödenir: **1805** vektör, yani yapıya duyarlı hazırlığın
**2,6 katı**, üstelik saklanan belirteç aynı kalarak. Üretim **0,9000**'dır ve yapıya duyarlı
hazırlığın **0,9250**'siyle arasındaki fark **0,0250**, yani bu kursun **0,0750** eşiğinin
altındadır: **ölçülmemiş** sayılır. Bu iki kurulum arasındaki ölçülmüş fark isabette değil,
**saklanan vektör sayısındadır**.

Son satır önceki dersin başladığı yerdir: 693 parça, 0,9500 anma, 0,9250 üretim, 5343 belirteç.
Yapıya duyarlı hazırlığın çıktısı, birinci dersin girdisidir.

## Hazırlığın Attığı

Üçüncü satır ucuz görünüyor: saklanan belirteci **11281'den 9221'e** indiriyor ve isabetin hiçbir
sütununu oynatmıyor. Yinelenen satır süzgeci bir tahmine dayanır: aynı metin çok belgede
geçiyorsa artıktır. Form başlığı ve sayfa altlığı için doğrudur. Kayıt dili **kalıplı** olduğu
için gerçek paragraflar da yinelenir.

```python
def baglar(p):
    return {(x["kod"], k) for x in p for k in x["kavram"]}


tam = baglar(hazirla("yapiya duyarli")[0])
print("yapiya duyarli hazirligin kurdugu kavram-belge bagi:", len(tam))
print("esik  parca  atilan satir  atilan belirtec  kaybolan bag  anasiz belge    anma  uretim")
for e in (2, 3, 4):
    p, at = hazirla("yinelenen suzme", e)
    b = baglar(p)
    m = olc(p)
    print("%4d %6d %13d %16d %13d %13d  %6.4f  %6.4f"
          % (e, len(p), len(at), sum(len(belirtecle(x)) for x in at), len(tam - b),
             sum((d["kod"], d["ana"]) not in b for d in BELGE), m[0], m[5]))
```

```
yapiya duyarli hazirligin kurdugu kavram-belge bagi: 568
esik  parca  atilan satir  atilan belirtec  kaybolan bag  anasiz belge    anma  uretim
   2    427          1066            11357           283            60  0.9500  0.9250
   3    695           798             6962            96             8  0.9500  0.9250
   4    835           658             4714            17             0  0.9500  0.9250
```

Üç eşiğin üçünde de anma **0,9500**, üretim **0,9250**. Sorgu kümesi hiçbir şey görmüyor. Oysa
eşik üçte süzgeç **798 satır** ve **6962 belirteç** atıyor; dağarcığın kurduğu **568** kavram-belge
bağının **96'sı** yok oluyor ve **sekiz belgede** o belgenin kendi ana kavramının kanıtı kalmıyor.
Eşik ikiye indirildiğinde kayıp **283 bağa** ve **altmış belgeye** çıkıyor, saklanan belirtecin
üçte ikisi gidiyor, ve iki ölçüt sütunu hâlâ kımıldamıyor.

Buradaki asıl ders ölçme üzerinedir. Kırk sorgu iki yüz belgenin yirmi kavramını örneklemez;
sorulmayan bir kavramın kanıtının silinmesi bu ölçümde **görünmez**. Kavram-belge bağı sayısı ise
koşumdan ve sorgu kümesinden bağımsızdır: dağarcığın ne kadarının hâlâ aranabilir olduğunu, hiç
sorgu koşturmadan söyler. Temizleme kuralı seçilirken bakılacak sayı budur.

## Özet

- Hazırlığın erişim hattındaki karşılığı iki ayrı sorudur: **anmaya ne kattığı** ve **neyi attığı**.
  İkincisi erişim ve üretim sütunlarında görünmeyebilir.
- Hazırlanmamış kaynak erişim sütununun en iyisidir (anma 1,0000) ve üretim sütununun en kötüsü
  (0,0000); kırk isteğin kırkı da bağlam penceresini aşıyor.
- Satır bazlı kaba bölme 1805 vektör saklıyor, yapıya duyarlı hazırlık 693; aradaki üretim farkı
  0,0250, yani eşiğin altında. Ölçülmüş kazanç isabette değil, saklanan vektör sayısındadır.
- Yapıya duyarlı hazırlık 693 parça, 0,9500 anma ve 0,9250 üretim verir; bu, önceki dersin
  başladığı noktadır.
- Yinelenen satır süzgeci eşik üçte 798 satır ve 6962 belirteç atarken 568 kavram-belge bağının
  96'sını siliyor; eşik ikide kayıp 283 bağ ve altmış belgedir.
- Kavram-belge bağı sayısı sorgu kümesinden bağımsız bir ölçüdür ve temizleme kararının asıl
  ölçütüdür.

## Sonraki Adım

Yapıya duyarlı hazırlık bir sınırı **verili** kabul etti: kaynağın kendi paragraf sınırı. Devam
satırları birleştirildi, başlık ve altlık atıldı, ama paragrafın nerede biteceği kaynağın kararı
olarak bırakıldı. O sınır bir karardır ve erişim hattının ölçtüğü her şeyi değiştirir. Parça
küçüldükçe kesinlik yükselir ve sınır üstündeki yüzeyler kaybolur; büyüdükçe anma yükselir ve
bağlam penceresi doluverir. Sonraki ders bu sınırı eline alır: parça boyutu ile örtüşmeyi süpürür,
her kurulumun anmasını, saklanan parça sayısını ve saklanan belirtecini yan yana basar, ve
örtüşmenin kazandırdığının maliyetini karşılamayı bıraktığı noktayı sayar.
