tdk-api-wrapper 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -24,6 +24,7 @@ tdk ornek araba
24
24
  tdk koken lisan
25
25
  tdk hece muvaffakiyet
26
26
  tdk uyum elma
27
+ tdk kucukuyum armut
27
28
  tdk yazim herkes
28
29
  tdk kok halılarımızın
29
30
  tdk deyim göz
@@ -37,6 +38,11 @@ tdk kural kısaltmalar
37
38
  tdk karsilastir kalem kağıt
38
39
  tdk analiz "Bu güzel kalem masanın üstünde duruyor"
39
40
  tdk oneri kale
41
+ tdk bulmaca k_l_m
42
+ tdk anagram kalem
43
+ tdk kafiye bahar
44
+ tdk denetle "Bugün evde kaldım ama sen gelmedinki"
45
+ tdk repl
40
46
  tdk kubbealti merhaba
41
47
  tdk nisanyan merhaba
42
48
  tdk viki merhaba
@@ -49,20 +55,30 @@ tdk ara kalem --json
49
55
  # ["Yazma, çizme vb. işlerde kullanılan çeşitli biçimlerde araç", ...]
50
56
  ```
51
57
 
58
+ Argümansız `tdk` veya `tdk repl` çalıştırıldığında interaktif sözlük kabuğu açılır.
59
+
52
60
  ## Kullanım Başlangıcı
53
61
 
54
62
  Modülü projenize dahil edip TDK sınıfını kullanarak tüm işlemleri başlatabilirsiniz. CommonJS ve ECMAScript Modules (ESM) yapıları tam olarak desteklenmektedir.
55
63
 
56
64
  ```typescript
57
- import { TDK } from 'tdk-api';
58
-
59
- // Performansı artırmak için bellek içi önbelleği (Memory Cache) aktif etme
60
- TDK.enableCache(true);
65
+ import { TDK, TDKClient } from 'tdk-api-wrapper';
66
+
67
+ // gecikmesi, yeniden deneme ve bellek içi önbelleği yapılandırma
68
+ TDK.configure({
69
+ timeoutMs: 8000, // İstek zaman aşımı (varsayılan: 8000ms)
70
+ retries: 1, // 5xx ve ağ hatalarında otomatik tekrar (varsayılan: 1)
71
+ cache: true, // Bellek içi önbelleği aktif etme
72
+ maxCacheSize: 1000 // Maksimum önbellek boyutu (LRU)
73
+ });
74
+
75
+ // İsteğe bağlı: Ayrı yapılandırmaya sahip bağımsız istemci örneği (Multi-tenant/Backend için)
76
+ const client = new TDKClient({ timeoutMs: 5000, cache: true });
61
77
  ```
62
78
 
63
79
  ## API Referansı ve Fonksiyonlar
64
80
 
65
- Aşağıdaki metotlar `TDK` sınıfı üzerinden statik olarak erişilebilir durumdadır:
81
+ Aşağıdaki metotlar `TDK` sınıfı üzerinden statik olarak veya `TDKClient` örneği üzerinden erişilebilir durumdadır:
66
82
 
67
83
  ### 1. Temel Arama ve Anlamlar
68
84
  - **`TDK.getWord(word)`**: Kelimenin TDK sözlüğündeki tüm yapısal özelliklerini tam veri seti (JSON) olarak getirir.
@@ -70,38 +86,51 @@ Aşağıdaki metotlar `TDK` sınıfı üzerinden statik olarak erişilebilir dur
70
86
  - **`TDK.getWordsBatch(wordsArray)`**: Birden fazla kelimeyi aynı anda aramak için kullanılır (sunucuyu yormamak adına yerleşik gecikme içerir).
71
87
 
72
88
  ### 2. Dilbilgisi ve Gramer Özellikleri
73
- - **`TDK.syllabicate(word)`**: Kelimeyi Türkçe heceleme kurallarına göre doğru hecelerine ayırır (Örn: `['mu', 'vaf', 'fa', 'ki', 'yet']`). API isteği atmaz, çok hızlıdır.
89
+ - **`TDK.syllabicate(word)`**: Kelimeyi Türkçe heceleme kurallarına göre doğru hecelerine ayırır (Örn: `['mu', 'vaf', 'fa', 'ki', 'yet']`, `['e', 'lek', 'trik']`, `['kon', 'trol']`).
74
90
  - **`TDK.checkVowelHarmony(word)`**: Kelimenin büyük ünlü uyumuna uyup uymadığını (boolean) kontrol eder.
91
+ - **`TDK.checkLabialHarmony(word)`**: Kelimenin küçük ünlü uyumuna (düzlük-yuvarlaklık uyumu) uyup uymadığını (boolean) kontrol eder.
75
92
  - **`TDK.getPartOfSpeech(word)`**: Kelimenin sözcük türünü (isim, sıfat, zarf vb.) döndürür.
76
- - **`TDK.checkSpelling(word)`**: Kelimenin doğru yazılıp yazılmadığını kontrol eder. Önce TDK'de doğrudan arar; bulamazsa TDK'nin "sık yapılan yanlışlar" listesini kontrol eder. Ardından **morfolojik ek sıyırma (stemming) motoru** devreye girer; kelime çekimli bir biçimse (`halılarımızın`, `kitabımız`, `çocuğa`, `okuyoruz`) kökünü tespit edip `{ isCorrect: true, isInflected: true, root: "..." }` döner. Son aşamada ise TDK'nin ~81 bin kelimelik tam madde listesi üzerinde Damerau-Levenshtein edit-distance ile en yakın kelimeyi önerir (`yanlız` → `yalnız`).
93
+ - **`TDK.checkSpelling(word)`**: Kelimenin doğru yazılıp yazılmadığını kontrol eder. Önce TDK'de doğrudan arar; bulamazsa TDK'nin "sık yapılan yanlışlar" listesini kontrol eder. Ardından **morfolojik ek sıyırma (stemming) motoru** devreye girer; kelime çekimli bir biçimse (`halılarımızın`, `kitabımız`, `çocuğa`, `okuyoruz`, `hakkımızda`, `başlıyor`) kökünü tespit edip `{ isCorrect: true, isInflected: true, root: "..." }` döner. Son aşamada ise TDK'nin ~81 bin kelimelik tam madde listesi üzerinde Damerau-Levenshtein edit-distance ile en yakın kelimeyi önerir (`yanlız` → `yalnız`).
77
94
  - **`TDK.getCompoundWords(word)`**: Aranan kelime ile oluşturulmuş birleşik kelimeleri (Örn: dolma kalem) listeler.
78
95
 
79
96
  ### 3. Morfoloji ve Kök Bulma (Morphology Engine)
80
- - **`TDK.findRoot(word)`**: Çekimli veya ek almış bir kelimenin TDK sözlüğündeki yalın kökünü/maddesini bulur (`"halılarımızın"` → `"halı"`, `"kitabımız"` → `"kitap"`, `"çocuğa"` → `"çocuk"`, `"şehre"` → `"şehir"`, `"okuyoruz"` → `"okumak"`). Aşamalı ek sıyırma (BFS), ünsüz yumuşaması tersine çevirme, ünlü düşmesi ve mastar onarımı uygular. Kök bulunamazsa `null` döner.
97
+ - **`TDK.findRoot(word)`**: Çekimli veya ek almış bir kelimenin TDK sözlüğündeki yalın kökünü/maddesini bulur (`"halılarımızın"` → `"halı"`, `"kitabımız"` → `"kitap"`, `"çocuğa"` → `"çocuk"`, `"şehre"` → `"şehir"`, `"okuyoruz"` → `"okumak"`, `"hakkımızda"` → `"hak"`, `"başlıyor"` → `"başlamak"`, `"diyor"` → `"demek"`, `"gitsen"` → `"gitmek"`). Aşamalı ek sıyırma (BFS), ünsüz yumuşaması, ünsüz ikizleşmesi (türemesi), ünlü daralması onarımı ve mastar onarımı uygular. Kök bulunamazsa `null` döner.
81
98
  - **`TDK.stem(word)`**: Kelime üzerinde morfolojik analiz yaparak `{ word, root, isInflected, candidates }` nesnesi döndürür.
82
99
  - **`TDK.getStemCandidates(word)`**: Kelimeden Türkçe ek sıyırma kurallarıyla türetilen tüm aday kökleri öncelik sırasıyla string dizisi olarak üretir (saf fonksiyon, ağ isteği atmaz).
83
100
  - **`TDK.isHeadword(word)`**: Kelimenin TDK'de kayıtlı bir sözlük maddesi olup olmadığını kontrol eder (hafızadaki 81 binlik set üzerinden anında $O(1)$ kontrol).
84
101
 
85
- ### 4. Edebi ve Kültürel Analiz
102
+ ### 4. Metin Redaksiyon ve İmla Denetimi (Proofreading)
103
+ - **`TDK.proofread(text)`**: Verilen Türkçe metindeki imla hatalarını, yanlış bitişik yazılan bağlaçları (`da/de`, `ki`) ve soru eklerini (`mi/mı/mu/mü`) cümle düzeyinde tespit edip hata türü, metin konumu (offset) ve önerisiyle birlikte `{ text, issues, isCorrect }` döner:
104
+ - **`da/de` bağlacı**: Fiillerden sonra yanlışlıkla bitişik yazılan durumları yakalar (`gitsende` → `gitsen de`).
105
+ - **`ki` bağlacı**: Fiillerden sonra bitişik yazılan durumları yakalar (`gördümki` → `gördüm ki`), kalıplaşmış **SOMBAHÇEMİ** (*sanki, oysaki, mademki, belki, halbuki, çünkü, meğerki, illaki*) istisnalarını korur.
106
+ - **`mi/mı/mu/mü` soru eki**: Kelimeye bitişik yazılan soru eklerini yakalar (`yaptınmı` → `yaptın mı`).
107
+ - **Genel imla denetimi**: Sözlükte bulunamayan hatalı kelimeler için en yakın TDK önerisini sunar.
108
+
109
+ ### 5. Dilbilimsel Arama Araçları
110
+ - **`TDK.patternSearch(pattern, options?)`**: Bulmaca ve maskeli arama desteği. `_` veya `?` tek harf jokerini, `*` ise çoklu harf jokerini temsil eder (`TDK.patternSearch("k_l_m")` → `["kalem", "kelam", "kilim"]`, `TDK.patternSearch("*istan")` → `["gülistan", "kabristan", ...]`).
111
+ - **`TDK.findAnagrams(letters, options?)`**: Verilen harflerle yazılabilecek Türkçe TDK kelimelerini döner (`TDK.findAnagrams("kalem")` → `["emlak", "kelam", "kemal"]`).
112
+ - **`TDK.findRhymes(word, options?)`**: Aranan kelimeyle kafiyeli (son heceleri/harfleri eşleşen) kelimeleri listeler (`TDK.findRhymes("bahar")` → `["ilkbahar", "sonbahar", "buhar", ...]`).
113
+
114
+ ### 6. Edebi ve Kültürel Analiz
86
115
  - **`TDK.getExamples(word)`**: Ünlü yazarlardan edebi örnek cümleleri ve yazar isimlerini liste halinde döner.
87
116
  - **`TDK.getOrigin(word, fallbackStem?)`**: Kelimenin hangi dilden geldiğini (etimolojik lisan kökenini) döner; kelime hiç bulunamazsa `null` döner, bulunup köken kaydı yoksa `"Türkçe"` döner. İsteğe bağlı `fallbackStem: true` verilirse çekimli kelimelerde kökün etimolojisine bakar.
88
117
  - **`TDK.getProverbs(word)`**: Yalnızca aranan kelimenin geçtiği atasözü ve deyimleri dizi olarak getirir.
89
118
  - **`TDK.isForeignWord(word)`**: Kelimenin yabancı kökenli olup olmadığını `boolean` olarak döner; kelime bulunamazsa `null` döner.
90
119
  - **`TDK.groupByOrigin(words)`**: Bir kelime listesini etimolojik kökenlerine göre gruplar (bulunamayanlar `"Bilinmiyor"` altında toplanır).
91
120
  - **`TDK.getSynonyms(word)`** / **`TDK.getAntonyms(word)`**: Kelimenin eş/zıt anlamlılarını döner (undocumented `gts-yeni` endpoint'i üzerinden; sonuç bulunamazsa `[]`).
92
- - **`TDK.compareWords(a, b)`**: İki kelimeyi anlam sayısı, köken, hece bölünüşü ve büyük ünlü uyumu açısından yan yana karşılaştırır.
121
+ - **`TDK.compareWords(a, b)`**: İki kelimeyi anlam sayısı, köken, hece bölünüşü, büyük ve küçük ünlü uyumu açısından yan yana karşılaştırır.
93
122
  - **`TDK.analyzeText(text)`**: Bir metindeki (Türkçe bağlaçlar/edatlar hariç) her benzersiz kelimeyi tek tek arayıp ilk anlamını, kökenini ve varsa kökünü döner. Çekimli kelimeleri morfoloji motoruyla otomatik tespit edip kökleriyle (`isInflected: true, root: "..."`) birlikte analiz eder.
94
123
 
95
- ### 5. Yardımcı Metotlar
124
+ ### 7. Yardımcı Metotlar
96
125
  - **`TDK.getSuggestions(prefix)`**: TDK'nin ~81 bin kelimelik tam madde listesi üzerinden önek bazlı otomatik tamamlama önerileri döner (ilk çağrıda listeyi indirip önbelleğe alır, sonraki çağrılar anlıktır).
97
126
  - **`TDK.getAudioUrl(word)`**: TDK'nin bu kelime için gerçekten bir ses kaydı varsa doğrudan indirme URL'sini döner, yoksa `null`. `downloadAudio(word, destPath)` ile cihazınıza indirebilirsiniz.
98
127
  - **`TDK.getDailyContent()`**: TDK anasayfasında yer alan "Günün Kelimesi, Atasözü ve Kuralı" içeriklerini çeker.
99
128
  - **`TDK.getWordOfTheDay()`**: `getDailyContent()`'in üzerine ince bir katman; günün kelimesini ve tüm anlamlarını `{ word, meanings }` şeklinde döner.
100
129
  - **`TDK.getRandomWord()`**: Günün içeriğindeki kelime ve atasözü havuzundan rastgele bir tanesini `{ type: "kelime" | "atasoz", madde, anlam }` şeklinde seçer (not: tüm sözlük değil, sadece o günkü içerik havuzundan seçim yapar).
101
- - **`TDK.getKurallar()`**: TDK'nin `/icerik` akışının o an döndürdüğü yazım kuralı sayfa(lar)ını `{ adi, url }` şeklinde listeler. Not: bu sabit bir katalog değildir — `/icerik` her istekte, yaklaşık yirmi kurallık bir havuzdan rastgele tek bir kural döndürür.
102
- - **`TDK.getRule(name)`**: Adı verilen (küçük/büyük harf duyarsız, alt dize eşleşmesi) yazım kuralının tam metnini `tdk.gov.tr`'den çekip düz metne çevirir. `getKurallar()`'ın rastgeleliği yüzünden istenen kuralı bulana kadar eşzamanlı gruplar hâlinde (toplam en fazla 25 deneme, ~5 round-trip'e sığdırılmış) yeniden dener; bulamazsa veya sayfa ayrıştırılamazsa `null` döner.
130
+ - **`TDK.getKurallar()`**: TDK'nin `/icerik` akışının o an döndürdüğü yazım kuralı sayfa(lar)ını `{ adi, url }` şeklinde listeler.
131
+ - **`TDK.getRule(name)`**: Adı verilen yazım kuralının tam metnini `tdk.gov.tr`'den çeker.
103
132
 
104
- ### 5. Diğer Sözlük Kaynakları
133
+ ### 8. Diğer Sözlük Kaynakları
105
134
 
106
135
  TDK dışındaki bu üç kaynak da her zaman kullanılabilir/dokümante edilmiş resmî API'ler değildir; her biri **fragile scraping** (kırılgan, dokümante edilmemiş entegrasyon) — kaynak taraflarında bir değişiklik olursa `null`/`[]` dönerler, hataya düşmezler. Verinin telif/kullanım koşulları kaynağa göre farklıdır: Wiktionary içeriği CC BY-SA lisanslıdır (açık); Nişanyan Sözlük ücretsiz, açık bir kişisel/akademik kaynaktır; **Kubbealtı Lugatı ise ticari bir sözlük ürünüdür** — bu kütüphane onu da dokümante edilmemiş bir uç noktadan çekebiliyor olsa da, kullanımınızı Kubbealtı'nın kendi kullanım şartlarına göre değerlendirmeniz önerilir.
107
136