---
title: 'İçerik Envanteri ve Gruplama'
source: 'https://academia.sh/tr/kurslar/kullanici-deneyimi/icerik-envanteri-ve-gruplama'
course: 'Kullanıcı Deneyimi ve Davranış Tasarımı'
language: tr
updated: '2026-08-17T18:09:38+00:00'
license: 'CC BY-SA 4.0'
---

# İçerik Envanteri ve Gruplama

Yapının içerikten türetilmesi; envanterin sütunları, kart gruplama verisinden benzerlik matrisi kurulması, eşikle gruplama ve üzerinde uzlaşılmayan kartların saptanması.

Problem tanımlandı ve çözüm alanı açık. İlk soru ekranların kendisi değil, aralarındaki
yapıdır. Katalog arayüzü binlerce kayıt, onlarca konu ve bir dizi işlem taşıyor; bunların
hangi başlıklar altında toplanacağı bir üslup sorusu değildir. Yanlış gruplama, kullanıcının
aradığı şeyi doğru yerde aramamasına ve hiçbir arama kutusunun kurtaramayacağı bir kayba yol
açar.

**Bilgi mimarisi (information architecture)**, içeriğin gruplanması, adlandırılması ve
aralarındaki ilişkilerin kurulmasıdır. Bu ders yapının nereden türetildiğini gösterir: önce
elde ne olduğunu sayan bir envanter, sonra kullanıcıların bu ögeleri nasıl grupladığını
ölçen bir çalışma.

## Envanter Neyi Sayar

**İçerik envanteri (content inventory)**, arayüzün taşıdığı her ögenin listesidir. Liste
olmadan gruplama yapılamaz; gruplanan şeyin ne olduğu bilinmez. Envanterin beş sütunu vardır.

- **Öge.** İçeriğin adı. Ekran adı değil, içeriğin kendisi: "ödünç koşulları" bir ögedir,
  "yardım sayfası" bir kaptır.
- **Tür.** Kayıt mı, açıklama metni mi, işlem mi, dış bağlantı mı. Tür, ögenin nasıl
  gösterileceğini değil, nasıl gruplanabileceğini belirler.
- **Görev bağı.** Öge hangi göreve hizmet ediyor. Üçüncü derste kurulan görev envanterine
  bağlanır. Hiçbir göreve bağlanamayan öge, envanterde bir soru işaretiyle kalır.
- **Sahip.** İçeriği kim güncelliyor. Sahibi olmayan içerik eskir ve eskimiş içerik yanlış
  bilgidir.
- **Son güncelleme.** Ögenin ne kadar zamandır değişmediği.

Son iki sütun gruplama kararını doğrudan etkilemez ama envanterin en çok işe yarayan
parçasıdır: yapı kurulmadan önce silinmesi gereken içerik burada görünür. Katalog
arayüzünde hiçbir göreve bağlanamayan ve iki yıldır güncellenmemiş bir öge, gruplanacak
değil kaldırılacak bir ögedir.

## Kullanıcı Gruplaması Ölçülür

Gruplamayı tasarım ekibinin yapması, kurumun kendi yapısını arayüze kopyalamasıyla
sonuçlanır. Kütüphanenin iç örgütlenmesinde "ödünç birimi" ile "referans birimi" ayrı
olabilir; kullanıcı bu ayrımı bilmez ve "kurumlar arası ödünç" ögesini hangi birimin
yürüttüğüne göre aramaz.

**Kart gruplama (card sorting)**, katılımcılara envanterdeki ögeleri kart olarak verip
kendilerine göre gruplamalarını istemektir. Grup adlarını katılımcı koyuyorsa açık, adlar
önceden veriliyorsa kapalı gruplamadır. Açık gruplama yapıyı ve adlandırmayı birlikte
ölçer; kapalı gruplama var olan bir yapının sınanmasına yarar.

Sonuç bir örüntü yığınıdır ve tek tek okunamaz. On katılımcının on ayrı gruplaması,
kartların birlikte gruplanma sayısına indirgenir.

```js
// kart-gruplama.mjs — kart gruplama verisinden benzerlik matrisi ve gruplama

// Envanterdeki 15 icerik ogesi ve her ogenin beklenen kumesi (dogrulanacak varsayim)
const KARTLAR = [
  ["arama ipuclari", "kesif"], ["konu basliklari", "kesif"], ["yeni gelenler", "kesif"],
  ["veri tabanlari", "kesif"], ["odunc kosullari", "odunc"], ["gecikme ucreti", "odunc"],
  ["uzatma", "odunc"], ["rezervasyon", "odunc"], ["kurumlar arasi odunc", "odunc"],
  ["raf plani", "yerinde"], ["calisma salonlari", "yerinde"], ["acilis saatleri", "yerinde"],
  ["uye olma", "hesap"], ["sifre yenileme", "hesap"], ["iletisim", "belirsiz"],
];
const KUMELER = ["kesif", "odunc", "yerinde", "hesap"];

// Belirlenimci sozde rastgele uretec (mulberry32)
function uretec(tohum) {
  let a = tohum >>> 0;
  return () => {
    a = (a + 0x6d2b79f5) >>> 0;
    let t = Math.imul(a ^ (a >>> 15), 1 | a);
    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
  };
}
const rnd = uretec(20260101);

// 10 katilimcinin kartlari gruplamasi: beklenen kumeye %80 uyum, "belirsiz" kart serbest
const KATILIMCI = 10;
const sortlar = [];
for (let k = 0; k < KATILIMCI; k++) {
  sortlar.push(
    KARTLAR.map(([, beklenen]) =>
      beklenen === "belirsiz" || rnd() > 0.8
        ? KUMELER[Math.floor(rnd() * KUMELER.length)]
        : beklenen
    )
  );
}

// Benzerlik matrisi: kac katilimci i ile j'yi ayni gruba koydu
const n = KARTLAR.length;
const M = Array.from({ length: n }, () => new Array(n).fill(0));
for (const s of sortlar)
  for (let i = 0; i < n; i++)
    for (let j = 0; j < n; j++) if (i !== j && s[i] === s[j]) M[i][j]++;

console.log("benzerlik matrisi (10 katilimcinin kaci ayni gruba koydu)");
console.log(" ".repeat(24) + KARTLAR.map((_, i) => String(i + 1).padStart(3)).join(""));
KARTLAR.forEach(([ad], i) => {
  console.log(
    `${String(i + 1).padStart(2)} ${ad.padEnd(21)}` +
      M[i].map((v, j) => (i === j ? "  ." : String(v).padStart(3))).join("")
  );
});

// Uzaklik = 1 - benzerlik; ortalama bag ile birlestir, esik 0.5'te dur
const uzak = (i, j) => 1 - M[i][j] / KATILIMCI;
let gruplar = KARTLAR.map((_, i) => [i]);
const bagUzakligi = (a, b) => {
  let t = 0;
  for (const i of a) for (const j of b) t += uzak(i, j);
  return t / (a.length * b.length);
};
const ESIK = 0.5;
while (gruplar.length > 1) {
  let en = Infinity, cift = null;
  for (let i = 0; i < gruplar.length; i++)
    for (let j = i + 1; j < gruplar.length; j++) {
      const d = bagUzakligi(gruplar[i], gruplar[j]);
      if (d < en) { en = d; cift = [i, j]; }
    }
  if (en > ESIK) break;
  const [i, j] = cift;
  gruplar = gruplar.filter((_, x) => x !== i && x !== j).concat([gruplar[i].concat(gruplar[j])]);
}
gruplar = gruplar.map((g) => g.sort((a, b) => a - b)).sort((a, b) => a[0] - b[0]);

console.log(`\nesik ${ESIK} ile olusan gruplar (${gruplar.length} grup)`);
for (const g of gruplar) console.log(`  ${g.map((i) => KARTLAR[i][0]).join(", ")}`);

// Her kartin kendi grubuna ve en yakin ikinci gruba baglilik farki
console.log("\nkart                 kendi grubu  en yakin diger  fark");
const ortBenzerlik = (i, g) => {
  const d = g.filter((x) => x !== i);
  return d.length ? d.reduce((t, j) => t + M[i][j], 0) / d.length / KATILIMCI : 0;
};
for (let i = 0; i < n; i++) {
  const kendi = gruplar.find((g) => g.includes(i));
  const a = ortBenzerlik(i, kendi);
  const digerleri = gruplar.filter((g) => g !== kendi).map((g) => ortBenzerlik(i, g));
  const b = digerleri.length ? Math.max(...digerleri) : 0;
  console.log(
    `${KARTLAR[i][0].padEnd(20)} ${a.toFixed(2).padStart(11)}  ${b.toFixed(2).padStart(14)}  ${(a - b).toFixed(2)}${a - b < 0.2 ? "  BELIRSIZ" : ""}`
  );
}
```

```
benzerlik matrisi (10 katilimcinin kaci ayni gruba koydu)
                          1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
 1 arama ipuclari         .  9  8 10  1  1  0  0  1  0  1  1  2  0  2
 2 konu basliklari        9  .  7  9  1  1  0  0  1  0  2  2  2  0  2
 3 yeni gelenler          8  7  .  8  0  2  1  1  2  0  0  1  2  1  3
 4 veri tabanlari        10  9  8  .  1  1  0  0  1  0  1  1  2  0  2
 5 odunc kosullari        1  1  0  1  .  8  8  9  7  0  1  0  1  0  2
 6 gecikme ucreti         1  1  2  1  8  .  8  9  7  0  0  1  0  0  3
 7 uzatma                 0  0  1  0  8  8  .  9  7  0  1  0  1  1  3
 8 rezervasyon            0  0  1  0  9  9  9  .  8  0  1  0  0  0  3
 9 kurumlar arasi odunc   1  1  2  1  7  7  7  8  .  0  1  0  1  1  3
10 raf plani              0  0  0  0  0  0  0  0  0  .  6  8  2  1  5
11 calisma salonlari      1  2  0  1  1  0  1  1  1  6  .  7  0  1  3
12 acilis saatleri        1  2  1  1  0  1  0  0  0  8  7  .  1  0  3
13 uye olma               2  2  2  2  1  0  1  0  1  2  0  1  .  7  2
14 sifre yenileme         0  0  1  0  0  0  1  0  1  1  1  0  7  .  1
15 iletisim               2  2  3  2  2  3  3  3  3  5  3  3  2  1  .

esik 0.5 ile olusan gruplar (5 grup)
  arama ipuclari, konu basliklari, yeni gelenler, veri tabanlari
  odunc kosullari, gecikme ucreti, uzatma, rezervasyon, kurumlar arasi odunc
  raf plani, calisma salonlari, acilis saatleri
  uye olma, sifre yenileme
  iletisim

kart                 kendi grubu  en yakin diger  fark
arama ipuclari              0.90            0.20  0.70
konu basliklari             0.83            0.20  0.63
yeni gelenler               0.77            0.30  0.47
veri tabanlari              0.90            0.20  0.70
odunc kosullari             0.80            0.20  0.60
gecikme ucreti              0.80            0.30  0.50
uzatma                      0.80            0.30  0.50
rezervasyon                 0.88            0.30  0.57
kurumlar arasi odunc        0.72            0.30  0.42
raf plani                   0.70            0.50  0.20  BELIRSIZ
calisma salonlari           0.65            0.30  0.35
acilis saatleri             0.75            0.30  0.45
uye olma                    0.70            0.20  0.50
sifre yenileme              0.70            0.10  0.60
iletisim                    0.00            0.37  -0.37  BELIRSIZ
```

## Matrisin Okunması

Matris, tek tek gruplamalardan çıkarılamayan bir yapıyı gösterir. Birinci ve dördüncü
kartlar — arama ipuçları ile veri tabanları — on katılımcının onunda aynı gruba konmuş.
Beşinci ile sekizinci kartlar dokuz katılımcıda birlikte. Bu değerler bir uzlaşma
ölçüsüdür: yüksek sayı, kullanıcıların o iki ögeyi aynı işin parçası saydığını gösterir.

Eşik 0.5 seçildi; yani iki öge, katılımcıların en az yarısında birlikte gruplanıyorsa aynı
gruba giriyor. Eşik bir doğa yasası değil, denetlenebilir bir karardır. Yükseltilirse daha
çok ve daha küçük grup çıkar, düşürülürse gruplar birleşir. Önemli olan eşiğin yazılmış
olmasıdır: "bunlar birlikte durmalı" cümlesi tartışılabilir, "birlikte gruplanma oranı 0.7,
eşik 0.5" cümlesi denetlenebilir.

Beş grup çıktı ve dördü kendi içinde tutarlı. Beşinci "grup" tek kart taşıyor.

## Uzlaşılmayan Kart Yapının En Önemli Bulgusudur

Son tablodaki bağlılık farkı, her kartın kendi grubuna olan ortalama bağlılığı ile en yakın
ikinci gruba olan bağlılığı arasındaki farktır. Fark büyükse kart yerini bulmuştur; küçükse
katılımcılar uzlaşmamıştır.

**İletişim** kartı hiçbir grubun içinde kalmadı. En yüksek bağlılığı 0.37 ile yerinde
kullanım grubuna; hiçbir eşiği geçmiyor. Bu bir veri kusuru değil, bir bulgudur: kullanıcılar
iletişim bilgisinin nerede aranacağı konusunda uzlaşmıyor. Böyle bir kart için üç seçenek
vardır ve seçim veriye göre yapılır.

- **Birden çok yerde gösterilir.** Bilgi ucuzsa ve kısaysa yinelenmesi zararsızdır; iletişim
  bilgisi hem yerinde kullanım grubunda hem hesap grubunda görünebilir.
- **Yapının dışına alınır.** Bazı ögeler gruplara değil, her ekranda erişilebilir bir alana
  aittir. Altbilgi bunun için vardır.
- **Bölünür.** "İletişim" tek bir öge olmayabilir: rafla ilgili soru sorma ile üyelik
  sorunu bildirme ayrı işlerdir ve ayrı gruplara giderler. Uzlaşmama, ögenin kendi içinde
  ikiye ayrıldığının işareti olabilir.

**Raf planı** kartı da işaretlendi: kendi grubuna bağlılığı 0.70 ama iletişim kartıyla
birlikte gruplanma oranı 0.50. Katılımcıların yarısı, rafın yerini sormakla rafın planına
bakmayı aynı iş sayıyor. Bu, dördüncü derste ölçülen "kitap rafta bulunamıyor" probleminin
bilgi mimarisi tarafındaki izidir: kullanıcı raf bilgisini nerede arayacağını bilmiyor.

## Grupların Adlandırılması

Gruplar oluştu ama adları yok. Ad, kart gruplamanın açık biçiminde katılımcıların kendi
koyduğu adlardan çıkarılır; aynı grubu adlandıran on iki ifade içinden en sık kullanılan
sözcük seçilir. Kurumun iç sözlüğü buraya karışmamalıdır: kullanıcı "dolaşım hizmetleri"
demiyorsa başlık "dolaşım hizmetleri" olmaz.

Adlandırmada iki ölçüt vardır. Ad, grubun **bütününü** kapsamalıdır; "uzatma" başlığı beş
ögeli ödünç grubunun yalnızca birini adlandırır. Ad, komşu gruptan **ayırt edici**
olmalıdır; "kütüphane bilgileri" ile "genel bilgi" başlıkları yan yana durduğunda kullanıcı
hangisine gireceğini seçemez ve seçemediği için ikisini de dener.

## Kart Gruplamanın Etik Çerçevesi

Kart gruplama bir araştırma oturumudur ve önceki dersteki kurallar burada da geçerlidir:
katılımcı ne için gruplama yaptığını bilerek onay verir, oturum kaydı kod adıyla tutulur ve
ham kayıt çözümlemeden sonra saklama sınırı içinde silinir. Yukarıdaki matriste tek bir
katılımcının gruplaması görünmüyor; yalnızca birlikte gruplanma sayıları var.

Envanterin kendisine ait iki kural daha eklenir. **Kişisel veri taşıyan içerik envanterde
işaretlenir**: ödünç geçmişi, üyelik bilgisi ve arama geçmişi kişiye bağlıdır ve bunların
gruplama kararı erişim kararıyla birlikte verilir. **Envanterde her kişisel veri ögesinin
saklama süresi yazılır**; süresi yazılmayan bir öge, arayüzde bir yere konmadan önce
belirsiz süreli saklanıyor demektir.

## Özet

- İçerik envanteri öge, tür, görev bağı, sahip ve son güncelleme sütunlarını taşır; hiçbir
  göreve bağlanamayan ve güncellenmeyen öge gruplanacak değil kaldırılacak ögedir.
- Kart gruplama, yapının kurumun iç örgütlenmesinden değil kullanıcının zihinsel
  gruplamasından türetilmesini sağlar; açık biçim yapıyı ve adlandırmayı birlikte ölçer.
- Tek tek gruplamalar okunamaz; veri, kartların birlikte gruplanma sayısını veren benzerlik
  matrisine indirgenir ve yazılı bir eşikle gruplanır.
- Bağlılık farkı düşük olan kart bir kusur değil bulgudur; örnek veride bir kart hiçbir gruba
  bağlanamadı ve çözümü yineleme, yapının dışına alma ya da ögeyi bölmedir.
- Grup adları katılımcıların sözcüklerinden seçilir; ad grubun bütününü kapsamalı ve komşu
  gruptan ayırt edici olmalıdır.
- Kişisel veri taşıyan içerik envanterde işaretlenir ve saklama süresiyle birlikte yazılır.

## Sonraki Adım

Beş grup ve grup adları elde edildi, ama bu henüz bir gezinme değil. Grupların kaç tanesinin
aynı anda gösterileceği, alt kırılımların kaç düzey ineceği ve kullanıcının bir ögeye kaç
tıklamayla ulaşacağı ayrı bir karardır. Sonraki ders hiyerarşik, düz ve matris gezinme
modellerini karşılaştırır; menü genişliği ile derinlik arasındaki ödünleşimi hesaplar ve
toplam tarama maliyetini en küçükleyen genişliği bulur.
