Arama kutusu gözünüzle aynı karşılaştırmayı yapmayabilir
Notlarınızda aynı başlığı arıyorsunuz. Gözünüze göre iki satır aynı, fakat eşitlik kontrolü yalnızca birini buluyor. Yapay zekâya “bütün metinleri temizle” demek kolaydır. Ancak temizlik sırasında üst simgeleri, harfleri veya ürün kodlarını da değiştirirseniz yeni eşleşmelerin doğru olup olmadığını anlayamazsınız. Önce farkın nereden geldiğini tanımlamak, sonra yalnızca gereken dönüşümü uygulamak gerekir.
Bu uygulama dört sentetik karakter çiftini kullanır. Gerçek kişi, kurum veya hesap eşleştirmesi yapmıyoruz. Görevimiz iki metnin aynı karakter dizisi olup olmadığını ve dar kapsamlı bir normalleştirmeden sonra eşleşip eşleşmediğini belirlemek. Bir satırın başka satırla aynı kurumu temsil ettiği sonucunu çıkarmayacağız. Karakter eşitliği bir veri hazırlığı koşuludur; gerçek dünyadaki kimlik eşitliğini tek başına kanıtlamaz.
| Çift | Sol metin | Sağ metin | Kritik kod noktaları |
|---|---|---|---|
| U1 | ş | ş | U+015F / U+0073 U+0327 |
| U2 | m² | m2 | U+00B2 / U+0032 |
| U3 | I | ı | U+0049 / U+0131 |
| U4 | A | А | U+0041 / U+0410 |
U1’de solda tek kod noktasıyla yazılmış ş, sağda s ve birleşen çengel bulunur. Yazı tipi bunları aynı gösterebilir. U4’te ise soldaki Latin A ile sağdaki Kiril А farklı harflerdir. Bunları yalnızca görünüşe göre birleştiren kural, arama sonucunu genişletirken kod veya başlık ayrımlarını da silebilir. Tablo bu nedenle görünür metnin yanına kod noktalarını koyar.
Bu çalışmada yalnızca NFC kullanıyoruz
Unicode normalleştirmesi kanonik eşdeğerlik ile uyumluluk eşdeğerliğini ayırır. NFC kanonik normalleştirme ve birleştirme uygular; NFKC uyumluluk dönüşümlerini de kapsar. Bu örnekte U1’in iki yazımı NFC ile eşitlenir. Üst simgeli ² ise NFC’de korunur, NFKC ile 2’ye dönüşebilir. Hangi ayrımın korunacağını belirlemeden “en güçlü temizliği” seçmek uygun bir veri sözleşmesi değildir.Kaynak: Unicode — UAX #15 Normalization Forms
Çalışma kuralımız şu: ham metin değişmeden tutulacak, karşılaştırma anahtarı ayrı bir alanda NFC ile üretilecek. Küçük harfe çevirme, aksan kaldırma, boşluk silme veya benzer görünen harfleri değiştirme eklenmeyecek. Böylece bir eşleşmenin hangi işlemden kaynaklandığını izleyebiliriz. Türkçe I/ı ilişkisi de bu uygulamada harf küçültme kuralı olmadığı için ayrı kalır. Dil duyarlı arama ihtiyacı varsa o kural başka bir test grubuyla tasarlanmalıdır.
U1: U+015F ile U+0073 U+0327; U2: m² ile m2; U3: I ile ı; U4: Latin A ile Kiril А. Her çift için ham karakter dizisi eşitliğini ve yalnızca NFC sonrası eşitliği göster. Ham metinleri değiştirme. NFKC, küçük harfe çevirme, aksan silme veya benzer harf dönüşümü ekleme. Eşleşmeyenleri otomatik birleştirmek yerine ayrı inceleme listesine koy. Bir karakter eşleşmesini kişi veya kurum kimliği doğrulaması olarak sunma.
| Çift | Ham eşitlik | NFC sonrası eşitlik | Karar |
|---|---|---|---|
| U1 | Hayır | Evet | Kanonik karşılaştırmada eşleşir |
| U2 | Hayır | Hayır | Üst simge farkını koru |
| U3 | Hayır | Hayır | Harf kuralı ayrıca değerlendirilmeli |
| U4 | Hayır | Hayır | Farklı yazı sistemlerini birleştirme |
Sonuç tablosunda yalnızca U1 otomatik eşleşmeye uygundur; bu karar sadece tanımladığımız karakter karşılaştırması içindir. U2 bir alan ölçüsü, ürün adı veya sıradan metin olabilir. Bağlamı bilmeden m² ile m2’yi eşdeğer kabul etmiyoruz. U3’te Türkçe harf dönüşümü gerekebilir, fakat bu gereksinimi kullanıcı veya kaynak sistemi doğrulamalıdır. U4’ün görsel yakınlığı da kanonik eşitlik sağlamaz.
Dönüşümü görünür bir ara alanla sınayın
Bir betik veya veri aracı kullanıyorsanız önce bu dört çifti çalıştırın. Girdi metni, girdi kod noktaları, normalleştirilmiş anahtar ve karar ayrı sütunlarda bulunmalı. Yapay zekânın görsel metni yeniden yazması, Unicode işleminin gerçekten yapıldığına kanıt değildir. Örneğin sağdaki birleşen karakteri fark etmeden soldakiyle aynı biçimde kopyalayabilir. Kontrol çıktısında hangi kod noktalarının işlendiğini görmek bu yanılgıyı azaltır.
const sol = "ş";
const sag = "ş";
sol === sag; // false
sol.normalize("NFC") === sag.normalize("NFC"); // true
"m²".normalize("NFC") === "m2"; // false
"m²".normalize("NFKC") === "m2"; // trueBu kısa kod yalnızca açıkça verilen sabit metinleri karşılaştırır. Dosya değiştirmez, kayıt silmez veya dış hizmet çağırmaz. Çıktıları kendi çalışma aracınızda doğrularken araya otomatik harf düzeltmesi girip girmediğine dikkat edin. Ham metni başka bir editörden kopyalamak, incelemek istediğiniz karakter dizisini daha test başlamadan değiştirebilir. Mümkünse kod noktalarıyla kurulmuş küçük bir girdi kullanın.
- Ham veriyi ve kaynak satır kimliğini saklayın; anahtar üretmek silme yetkisi vermez.
- NFC işlemini ikinci kez uygulamak anahtarı değiştirmemeli.
- U1 eşleşirken U2, U3 ve U4 ayrı kalmalı; hepsinin eşleşmesi fazla dönüşüm belirtisidir.
- Anahtarı aynı olan satırları raporlayın; içerikleri birleştirmek için ayrıca görev kuralı gerekir.
Kendi not arşivinizde bir anahtar birden fazla satıra karşılık gelebilir. Bu her zaman yinelenen kayıt bulunduğu anlamına gelmez; aynı başlıkla iki ayrı not yazmış olabilirsiniz. Bu yüzden çıktı “silinecekler” listesi olmamalıdır. Aynı karşılaştırma anahtarını paylaşan satırlar, tarih ve belge kimliği gibi bağlamlarıyla incelenmelidir. Normalleştirme aramayı tutarlı yapmaya yardım ederken kayıtların geçmişini korumalıdır.
é ile e ve birleşen vurgu için karar verin
Alıştırmada sol metin U+00E9, sağ metin U+0065 U+0301 olsun. Ham eşitlik ve NFC sonucu için tahmininizi yazın. Ardından ikinci bir çift olarak e ile é kullanın. Bu iki karşılaştırmanın neden aynı kararı vermediğini açıklayın. Burada aksanların dildeki işlevini tartışmanız gerekmez; yalnızca izin verilen normalleştirme işleminin kapsamını uygulayın.
U+00E9 ile U+0065 U+0301 ham olarak farklı, NFC sonrasında eşittir. e ile é ise NFC sonrasında da farklıdır. NFC aksan silme işlemi değildir. İkinci çift için başka arama kuralı isteniyorsa bu ayrı tanımlanmalı ve test edilmelidir.
Teslim edeceğiniz küçük kontrol dosyasında dönüşümün adı ve sürümü kullanılan araçla birlikte yazsın. Böylece başka biri yalnızca görünen son tabloyu değil, aynı kararın nasıl üretildiğini de kontrol edebilir. Yeni bir temizleme adımı önerildiğinde önce hangi çiftlerin kararını değiştireceğini sorun. Beklenmeyen birleşmeler varsa kapsamı genişletmeden önce gerekçesini araştırın.
Kaynaklar ve doğrulama
- Unicode — UAX #15 Normalization Forms
Kanonik ve uyumluluk normalleştirmesinin farklılığı; NFC ve NFKC kapsamı.
Erişim ve kontrol:
Üretken Yapay Zekâ ile İş Verimliliği
Üretken Yapay Zekâ ile İş Verimliliği programında kullanmak üzere küçük bir metin kontrol dosyası hazırlayabilirsiniz. Ham ifadeyi koruyan karşılaştırma tablonuz, otomatik temizleme önerilerini değerlendirmenizi kolaylaştırır.
- Bireysel tarih henüz açıklanmadı