Korpusu CSV'ye çıkar¶
Dizin düzeni¶
analyze_corpus üç düzeni kendiliğinden tanır. Her satır bir label
(etiket) ve bir source (kaynak) taşır.
1. Alt klasör — klasör adı etikettir:
2. Kökte Etiket_Başlık.txt — dosya adının ilk alt çizgisine kadarki kısım
etikettir:
korpus/
Roman_Yaban.txt → label "Roman", source "Yaban"
notlar.txt → label "" (alt çizgi yok), source "notlar"
Alt çizgili dosya adları
Kökteki bir dosyanın adında alt çizgi varsa ilk kısım etiket olur:
metin_1.txt → label "metin", source "1".
İki düzen aynı klasörde birlikte bulunabilir.
3. Tek bir CSV ya da TSV dosyası — analyze_corpus("korpus.csv"). Sütun
başlıkları şu adlardan biri olmalı (ilk eşleşen kullanılır):
| Alan | Kabul edilen başlıklar |
|---|---|
| metin (zorunlu) | text, Text, metin, Metin, METIN, content |
| etiket | label, Label, etiket, Etiket, ETIKET, author, Author, yazar, Yazar, kategori, category |
| kaynak | source, Source, kaynak, Kaynak, başlık, title, book, file |
Kaynak sütunu yoksa dosyanın adı kullanılır. .tsv uzantılı dosya sekmeyle
ayrılmış okunur.
Etiket yazar olmak zorunda değil — dönem, tür, sınıf düzeyi, deney kolu, ne ölçüyorsanız o.
Dosyalar UTF-8 olmalı. UTF-8 olmayan dosya varsa analiz başlamadan hata verilir ve okunamayan dosyaların hepsi adıyla listelenir.
Bir parçanın analizi ValueError verirse çalışma orada durur. Hata o
parçanın label, source ve segment_id değerini söyler.
İki çağrı¶
import turkish_linguistic_features as tlf
satirlar = tlf.analyze_corpus("korpus/", lang="tr")
tlf.save_csv(satirlar, "oznitelikler.csv")
print("satır sayısı:", len(satirlar))
print("sütun sayısı:", len(satirlar[0]))
Ne çıkıyor¶
Her dosya bir satır. 211 sütun = 208 öznitelik + üç kimlik sütunu:
label=yazar_a source=metin1 segment_id=0 ttr=1.0
label=yazar_a source=metin2 segment_id=0 ttr=1.0
label=yazar_b source=metin3 segment_id=0 ttr=1.0
| Sütun | Ne |
|---|---|
label |
Klasör adı |
source |
Dosya adı (uzantısız) |
segment_id |
Parça numarası; segment_size verilmediyse hep 0 |
CSV başlığı:
İlerlemeyi görün¶
Korpus büyükse:
Dosyaları parçalara bölerek analiz edin¶
Örneğin 648 sözcüklük tek bir dosya içeren tek_dosya/ klasöründe:
butun = tlf.analyze_corpus("tek_dosya/", lang="tr")
parcali = tlf.analyze_corpus("tek_dosya/", lang="tr", segment_size=200)
print(len(butun), len(parcali), [s["segment_id"] for s in parcali])
Çıktı:
648 ÷ 200 = 3 tam parça; kalan 48 sözcük varsayılan min_fill=1.0 ile atılır.
Tümce uzunluğu dağılımını etiketlere göre karşılaştıran çalışan örnek:
examples/05_cumle_ritmi.py.
Parçalama dosya dosya yapılır, korpus geneli değil
segment_size=1000, her dosyayı ayrı ayrı 1000'lik parçalara
böler. Bütün dosyaları birleştirip baştan sona 1000'er kesmez.
Dolayısıyla her dosyanın sonunda segment_size'dan kısa bir artık kalır ve
varsayılan min_fill=1.0 ile atılır.
Neden ve ne zaman parçalamalısınız → Metni parçalara böl.
Tam imza¶
analyze_corpus(
path: str | Path,
lang: str = "tr",
segment_size: int | None = None,
*,
min_fill: float = 1.0,
unit: str = "word",
model: str | None = None,
groups: list[str] | None = None,
params: FeatureParams | None = None,
custom_ngrams: list[list[str]] | None = None,
show_progress: bool = False,
warn: bool = True,
) -> list[dict[str, object]]
groups, params, model, custom_ngrams, warn — hepsi analyze ile aynı
anlamda ve her parçaya uygulanır. custom_ngrams sayıları parça başınadır.