Ne işe yarar (iş diliyle)
Kullanıcılar aynı kelimeyi farklı yazar: ENERJI, Enerji, enerji, enerjı, enerji (sondaki boşluk). Bu yetenek hepsini tek “enerji” aggregate’i altında sayar; aynı zamanda gösterimde orijinal en sık kullanılan formatı korur. Anket, oylama, etiket bulutu, müşteri geri-bildirim gruplamada veri kalitesinin temeli — yoksa “5 kişi enerji dedi” yerine “1+1+1+1+1” görürsünüz.
Hangi müşteri/projelerde işe yarar
- Anket / oylama platformu (mevcut)
- Etiket bulutu (sosyal medya yorumları, ürün etiketleri)
- Müşteri geri-bildirim gruplaması (NPS açık metin)
- Soru toplama platformu (aynı soru farklı yazımlarla)
- Türkçe arama autocomplete (kullanıcı yazım hatası affı)
- Email / form girdi deduplikasyonu
- CMS etiket sistemi (admin tek tek temizlemesin)
Nasıl çalışır (kısa, sade)
Gelen kelime şu adımlardan geçer: baş/son boşluk silinir → Türkçe locale ile küçük harfe çevrilir → Türkçe karakter map’i uygulanır (ı→i, ğ→g, ü→u, ş→s, ö→o, ç→c) → alfanümerik olmayan karakterler temizlenir → çoklu boşluk tekleştirilir. Bu normalize edilmiş form veritabanında unique index’lidir (event + normalized_word). Aynı normalize değer geliyorsa count+1; yoksa yeni satır eklenir. Display için ilk girilen veya en sık kullanılan form saklanır.
Olgunluk
canlida-kanitlanmis. Basit ve hızlı; morfolojik kök (lemma) ayrımı yapmaz — “enerji” ve “enerjisi” ayrı aggregate’lerdir. Morfoloji gerekiyorsa Zemberek entegrasyonu küçük ek iş.
Teknik (geliştiriciler için)
- Kod:
server/src/lib/normalize.ts(saf fonksiyon, side-effect yok),server/src/db/schema.ts(word_aggregatestablosu +uniqueEventWordindex on(event_id, normalized_word)),server/src/routes/public-event.ts(submit handler upsert akışı). - Girdi: raw_word (string).
- Çıktı: { normalized_word, display_word }. Submission tablosunda raw + normalized birlikte saklanır (audit + replay imkanı için).
- Sınır: morfolojik kök ayrımı yok (“enerjisi” ve “enerji” ayrı); Türkçe-dışı diller için map güncellenmeli (Arapça, Rusça vb. transliterasyon farkı); noktalama ile birleşik kelimeler (örn. “enerji-tasarrufu”) tek alfanümerik token olarak normalize edilir, semantic tek-kelime korumak istenirse pre-processing kuralı eklenmeli.