Metni parçalara böl¶
Neden gerekli¶
Sözcüksel zenginlik öznitelikleri metin uzunluğuna duyarlıdır. TTR uzun
metinde mutlaka düşer, hapax_ratio düşer, yule_k oynar. 50 000 sözcüklük
bir romanla 800 sözcüklük bir köşe yazısını aynı tabloda karşılaştırırsanız
ölçtüğünüz şey üslup değil, uzunluk olur. mattr, mtld ve vocd_d TTR'den
daha az duyarlıdır ama bağımsız değildir
(ölçüm örneği).
Çözüm: hepsini aynı boya getirin.
Parça boyu sözcükle ölçülür¶
segment_size, analyze'ın saydığı sözcüğü sayar: boşlukla ayrılan, kenar
noktalaması atılan, harf ya da rakam içeren birim. Noktalama sözcük değildir
(tam tanım).
Öğreticideki 25 sözcüklük metin ile:
uzun = " ".join([metin] * 15) # 375 sözcük
parcalar = tlf.segment_text(uzun, segment_size=100, lang="tr")
len(parcalar) # 3
[len(p.split()) for p in parcalar] # [100, 100, 100]
375 sözcük ÷ 100 = 3 tam parça, artan 75 sözcük atılır. Her parça
analyze'da tam 100 sözcük eder; mattr gibi "en az 100 sözcük" isteyen bir
ölçüye yeter.
Son parça: min_fill¶
Varsayılan min_fill=1.0 yalnız tam parçaları tutar. Eksik kalan son
parça atılır.
tlf.segment_text(uzun, segment_size=100, lang="tr") # 3 parça
tlf.segment_text(uzun, segment_size=100, min_fill=0.5, lang="tr") # 4 parça
Artık 75 sözcük, yani parçanın %75'i: 1.0 eşiğinin altında, 0.5'in
üstünde.
min_fill |
Anlamı |
|---|---|
1.0 (varsayılan) |
Yalnız tam parçalar. En temiz karşılaştırma. |
0.5 |
En az yarısı dolu son parçayı da tut. |
0.0 |
Ne kalırsa tut. Uzunluk karşılaştırmasını bozar. |
Atılan veri sessizce atılır
Kütüphane kaç parça attığını size söylemez. min_fill=1.0 ile 1400
sözcüklük bir dosyadan segment_size=1000 ile tek parça çıkar; kalan 400
sözcük gider. Korpusunuzda kısa dosyalar varsa hiç parça
üretmeyebilirler.
Karakterle bölmek¶
unit="char" ham karakter sayar; sözcük kuralı devreye girmez, dolayısıyla
lang anlamsızlaşır. Sözcük sınırına saygı göstermez — parça bir sözcüğün
ortasında bitebilir.
Korpusta doğrudan kullanın¶
Tek tek bölüp analyze çağırmanıza gerek yok:
Tam imza¶
segment_text(
text: str,
segment_size: int = 1000,
min_fill: float = 1.0,
unit: str = "word",
lang: str = "tr",
) -> list[str]
lang metnin diliyle aynı olmalı. Varsayılan "tr". Sözcük kuralı iki dilde
neredeyse aynıdır; fark sıra sayısındadır (Türkçede 3. kat'taki 3. tek
sözcük), yani İngilizce bir metinde parça sınırları nadiren kayar.
Parça içeriği ham metin dilimidir — yeniden birleştirilmiş sözcük listesi değil. Yani noktalama, boşluk ve satır sonları olduğu gibi kalır.