Önce sınırın birimini bulun

Bir form en fazla dört karakter istiyor. Yapay zekâ metninizi Aş😀 olarak kısaltıyor ve sınırın altında olduğunu söylüyor. Metin gözünüze üç karakter gibi görünürken aktarım sistemi yedi bayt sayabilir. İki sonuç da kendi ölçüsünde doğru olabilir. Sorun, uzunluk sözcüğünün farklı sistemlerde aynı miktarı anlatmamasıdır. Kısaltmaya başlamadan önce hedefin ne saydığını öğrenmek gerekir.

Bu yazıdaki bütün metinler sentetik eğitim girdileridir. Kişisel bilgi içeren bir form doldurulmuyor. Amaç, beş kısa diziyi değiştirmeden saymak ve verilen kabul kuralına göre karar üretmektir. “Karakter” ifadesini dört ayrı ölçüyle açacağız: grafem kümesi, Unicode kod noktası, UTF-16 kod birimi ve UTF-8 baytı. Bunlar sözcük veya model token sayısı da değildir.

Grafem, bu örneklerde kullanıcıya tek karakter gibi görünen birimin teknik karşılığıdır. Bir grafem birden çok kod noktasından oluşabilir. Kod noktası ise Unicode içindeki bir değerdir. JavaScript length özelliği UTF-16 kod birimlerini sayar; her kod noktasının tek birim tutması gerekmez. MDN bu ayrımı ve grafem için Intl.Segmenter kullanımını açıklar.Kaynak: MDN — String length

Sentetik ham metinler · tırnaklar veriye dahil değil
KimlikMetinKod noktaları
U1AU+0041
U2şU+015F
U3U+0073 U+0327
U4😀U+1F600
U5Aş😀U+0041 U+015F U+1F600

Aynı metni dört ölçüyle sayın

U2 ile U3 ekranda benzer görünür. U2 tek kod noktasıdır; U3 ise s harfi ile birleşen çengelden oluşur. Bu nedenle ikinci satır bir, üçüncü satır iki kod noktası içerir. Şimdi eşitlik dönüşümü yapmıyoruz. Kaynak metni normalize etmek, ölçtüğümüz girdiyi değiştireceği için ayrı bir işlem kararı olarak ele alınmalıdır.

UTF-8, metni bayt dizisi olarak temsil eder. TextEncoder bu kodlamayı kullanır. A harfi bir bayt, tek kod noktalı ş iki bayt, bu örnekteki emoji dört bayttır. Kodlama seçimini yazmadan dosya veya aktarım boyutu hakkında kesin bir sayı vermek doğru değildir. Aşağıdaki ölçüler yalnızca belirtilmiş ham metinlerin UTF-8 karşılığıdır.Kaynak: MDN — TextEncoder

Yerel hesapla doğrulanan beklenen sayımlar
KimlikGrafemKod noktasıUTF-16 birimiUTF-8 baytı
U11111
U21112
U31223
U41124
U53347

Tabloda U5, üç farklı kod noktasından oluşur. Bunların UTF-8 uzunluklarını toplarsanız 1 + 2 + 4 = 7 elde edersiniz. UTF-16 tarafında emoji iki birim olduğu için toplam dört olur. Görünen üç karakteri saymak, bu iki aktarım ölçüsünden birinin yerine kendiliğinden geçmez. Hedef formun kuralını bu nedenle tabloya ayrıca ekleyin.

Kabul kararını ölçüye bağlayın

Kopyalanabilir uzunluk denetimi
U1=A; U2=U+015F; U3=U+0073 U+0327; U4=U+1F600; U5=Aş😀. Ham dizileri değiştirme. Her biri için grafem, Unicode kod noktası, UTF-16 birimi ve UTF-8 bayt sayısını ayrı ver. Birinci senaryoda üst sınır 4 UTF-16 birimi; ikincide 4 UTF-8 baytı. Dahil sınır kullan. Token veya kelime sayısını bu ölçülere eşitleme. Kısaltma önermek yerine hangi ölçüde hangi kaydın sınırı geçtiğini açıkla.
Açıklama amacıyla hazırlanmış karar
4 UTF-16 birimi sınırında U1–U5 geçer; U5 tam sınırdadır.
4 UTF-8 baytı sınırında U1–U4 geçer; U4 tam sınırdadır. U5 yedi baytla sınırı aşar.
Kaynak metinler aynı kaldı; yalnızca kabul ölçütü değişti.

Bu sonuç, herhangi bir gerçek web formunun davranışını gördüğümüz anlamına gelmez. Formun sayacı veya sunucusu farklı bir kural kullanabilir. Deneme ortamında aynı girdinin gönderilmeden önceki sayımını ve sistemin kabul sonucunu kaydedin. Sonuç farklıysa önce kural tanımını, ardından metne eklenen satır sonu veya boşluk gibi farkları araştırın.

Bir dosyanın toplam boyutu da burada sayılan alan uzunluğundan farklı olabilir. Başlık, ayırıcı, tırnak ve satır sonu ayrıca yer kaplar. Yedi bayt yalnızca U5 alanının UTF-8 içeriğidir. Bu sayıyı bir CSV dosyasının, JSON gövdesinin veya sıkıştırılmış ağ aktarımının toplam boyutu diye raporlamayın.

Kısaltmayı kör bir kesmeye çevirmeyin

  • Ham metni ve sayım birimini birlikte saklayın.
  • Tam sınırdaki girdiyi ve sınırın bir üstünü ayrı sınayın.
  • Görünen karakter sayısını kodlama boyutu diye sunmayın.
  • İçerik değişirse sayımı yeni metin üzerinde yeniden yapın.

Uzunluk sorununu çözmek için bayt dizisini rastgele bir yerde kesmek bir karakterin temsilini bölebilir. Benzer biçimde UTF-16 birimi üzerinden kesmek de emoji çiftini ayırabilir. Bir kısaltma yöntemi gerekiyorsa hem kesme birimini hem izin verilen anlam değişikliğini tanımlayın. Bu alıştırmada kaynak metne müdahale edilmez; yalnızca kabul kararı hazırlanır.

Yapay zekâdan sayıyı tahmin etmesini istemek yerine kısa bir denetim koduyla karşılaştırabilirsiniz. JavaScript için metin.length UTF-16 birimini, [...metin].length kod noktasını, new TextEncoder().encode(metin).length UTF-8 baytını verir. Grafem sayımı ayrı bir segmentleyici gerektirir. Bu işlemler aynı isimle tek sayaca bağlanmamalıdır.

Sınırı değiştirin, metni koruyun

U5 için bu kez sınır üç grafem olsun. Aynı girdiye ayrıca en fazla altı UTF-8 baytı koşulu uygulansın. İki koşulun birlikte gerektiği bir formda son kararı yazın. Ardından emoji çıkarılırsa kalan Aş metninin dört ölçüsünü hesaplayın; bu değişikliği kullanıcının onayı alınmış ayrı bir taslak olarak düşünün.

Alıştırmanın cevabı
U5 üç grafem koşulunu karşılar, yedi bayt olduğu için altı bayt koşulunu karşılamaz; birleşik kabul geçmez. Aş: 2 grafem, 2 kod noktası, 2 UTF-16 birimi, 3 UTF-8 baytı. Bu ikinci sonuç değiştirilmiş bir metne aittir.

Son kontrol kaydınızda metin, ölçü, üst sınır ve karar yan yana bulunsun. Böylece yapay zekânın kısaltılmış taslağını, gerçekten kullanılacağı alanın koşullarına göre değerlendirebilirsiniz. Uzunluk sayacı açık olduğunda hangi değişikliğin gerekli olduğu da daha anlaşılır hale gelir.

Kaynaklar ve doğrulama

  • MDN — String length

    UTF-16 kod birimi, kod noktası ve grafem sayısının ayrı olması.

    Erişim ve kontrol:
  • MDN — TextEncoder

    Metnin UTF-8 baytlarına kodlanması.

    Erişim ve kontrol:

İlgili okumalar

Üretken Yapay Zekâ ile İş Verimliliği

Üretken Yapay Zekâ ile İş Verimliliği programına, kullandığınız bir formun uzunluk kuralını ve sınırı geçen kısa bir metni getirebilirsiniz. Sayım ölçütünü açıklamak aktarım sorununu yeniden üretmeyi kolaylaştırır.

  • Bireysel tarih henüz açıklanmadı