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 +43 -14
- package/dist/{chunk-5TYJDVHK.mjs → chunk-NEC5MIQM.mjs} +734 -24
- package/dist/cli.js +872 -29
- package/dist/cli.mjs +185 -6
- package/dist/index.d.mts +119 -1
- package/dist/index.d.ts +119 -1
- package/dist/index.js +738 -25
- package/dist/index.mjs +9 -3
- package/package.json +2 -2
- package/src/cli.ts +191 -5
- package/src/index.ts +1 -1
- package/src/morphology.ts +124 -5
- package/src/tdk.ts +762 -39
- package/src/types.ts +38 -0
- package/test/grammar.test.js +52 -0
- package/test/morphology.test.js +25 -1
- package/test/proofread.test.js +88 -0
- package/test/tools.test.js +51 -0
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
|
-
//
|
|
60
|
-
TDK.
|
|
65
|
+
import { TDK, TDKClient } from 'tdk-api-wrapper';
|
|
66
|
+
|
|
67
|
+
// Ağ 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']`
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
###
|
|
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.
|
|
102
|
-
- **`TDK.getRule(name)`**: Adı verilen
|
|
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
|
-
###
|
|
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
|
|