File size: 7,088 Bytes
3d99898
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
"""
TDK Sözlük veri setini yükleyen ve işleyen modül.

Bu modül Hugging Face'den veri setini indirir, temizler ve
RAG sistemi için uygun formata dönüştürür.
"""

from datasets import load_dataset
import pandas as pd
from tqdm import tqdm
import json
import os


class TDKDataLoader:
    """TDK Sözlük veri setini yükler ve işler."""

    def __init__(self, cache_dir="./data"):
        """
        Args:
            cache_dir: Veri setinin kaydedileceği klasör
        """
        self.cache_dir = cache_dir
        self.dataset = None
        self.processed_data = []

        # Klasör yoksa oluştur
        os.makedirs(cache_dir, exist_ok=True)

    def load_dataset(self):
        """
        Hugging Face'den TDK Sözlük veri setini yükler.

        Returns:
            Dataset objesi
        """
        print("📚 TDK Sözlük veri seti yükleniyor...")

        try:
            # Veri setini yükle
            self.dataset = load_dataset("Ba2han/TDK_Sozluk-Turkish-v2")
            print(f"Veri seti başarıyla yüklendi!")
            print(f"Toplam kayıt sayısı: {len(self.dataset['train'])}")

            return self.dataset

        except Exception as e:
            print(f"Veri seti yüklenirken hata: {e}")
            return None

    def explore_data(self):
        """Veri setinin yapısını inceler ve örnek gösterir."""

        if self.dataset is None:
            print("Önce veri setini yüklemelisiniz!")
            return

        print("\n" + "=" * 60)
        print("VERİ SETİ YAPISI")
        print("=" * 60)

        # İlk kaydı göster
        first_item = self.dataset['train'][0]

        print("\nİlk kayıt örneği:")
        print("-" * 60)
        for key, value in first_item.items():
            # Uzun metinleri kısalt
            if isinstance(value, str) and len(value) > 200:
                print(f"{key}: {value[:200]}...")
            else:
                print(f"{key}: {value}")

        print("\nSütun bilgileri:")
        print("-" * 60)
        for key in first_item.keys():
            print(f"• {key}")

        # Birkaç örnek daha göster
        print("\nÖrnek kelimeler:")
        print("-" * 60)
        for i in range(min(10, len(self.dataset['train']))):
            item = self.dataset['train'][i]
            madde = item.get('madde', 'N/A')
            anlam = item.get('anlam', '')

            # Anlam tipini göster
            anlam_type = type(anlam).__name__
            print(f"{i + 1}. {madde} (anlam tipi: {anlam_type})")

            # İlk anlamı göster
            if isinstance(anlam, str) and anlam:
                try:
                    import json
                    anlam_parsed = json.loads(anlam)
                    if isinstance(anlam_parsed, list) and anlam_parsed:
                        first_anlam = anlam_parsed[0]
                        if isinstance(first_anlam, dict):
                            print(f"   → {first_anlam.get('anlam', 'N/A')[:100]}")
                except:
                    print(f"   → {anlam[:100]}")

    def process_data(self):
        """
        Veri setini RAG için uygun formata dönüştürür.

        Bu veri setinde her satır tek bir kelime-anlam çifti içeriyor.
        Çok basit ve düz bir yapı.
        """

        if self.dataset is None:
            print("Önce veri setini yüklemelisiniz!")
            return None

        print("\nVeri işleniyor...")

        self.processed_data = []
        error_count = 0

        # Her kelimeyi işle
        for item in tqdm(self.dataset['train'], desc="İşleniyor"):
            try:
                # Alanları al - None değerleri boş string'e çevir
                kelime = str(item.get('madde', '')).strip()
                anlam = str(item.get('anlam', '')).strip()
                ornek = str(item.get('ornek', '') or '').strip()
                ai_ornek = str(item.get('ai_ornek', '') or '').strip()

                # Kelime veya anlam boş ise atla
                if not kelime or not anlam or kelime == 'None' or anlam == 'None':
                    error_count += 1
                    continue

                # Tam metin oluştur (RAG için zengin context)
                full_text = f"Kelime: {kelime}\n\n"
                full_text += f"Anlam: {anlam}\n"

                # Örnek varsa ekle
                if ornek and ornek != 'None':
                    full_text += f"\nÖrnek kullanım: {ornek}\n"

                # AI örneği varsa ekle (daha detaylı)
                if ai_ornek and ai_ornek != 'None':
                    full_text += f"\nDetaylı örnek: {ai_ornek}\n"

                # Doküman oluştur
                doc = {
                    'text': full_text.strip(),
                    'kelime': kelime,
                    'anlam': anlam,
                    'ornek': ornek if (ornek and ornek != 'None') else None,
                    'ai_ornek': ai_ornek if (ai_ornek and ai_ornek != 'None') else None
                }

                self.processed_data.append(doc)

            except Exception as e:
                error_count += 1
                continue

        print(f"{len(self.processed_data)} doküman oluşturuldu!")
        if error_count > 0:
            print(f"{error_count} kayıt işlenirken hata oluştu (atlandı)")

        return self.processed_data

    def save_processed_data(self, filename="processed_tdk.json"):
        """İşlenmiş veriyi JSON olarak kaydeder."""

        if not self.processed_data:
            print("Önce veriyi işlemelisiniz!")
            return

        filepath = os.path.join(self.cache_dir, filename)

        with open(filepath, 'w', encoding='utf-8') as f:
            json.dump(self.processed_data, f, ensure_ascii=False, indent=2)

        print(f"Veri kaydedildi: {filepath}")

    def load_processed_data(self, filename="processed_tdk.json"):
        """Daha önce kaydedilmiş işlenmiş veriyi yükler."""

        filepath = os.path.join(self.cache_dir, filename)

        if not os.path.exists(filepath):
            print(f"Dosya bulunamadı: {filepath}")
            return None

        with open(filepath, 'r', encoding='utf-8') as f:
            self.processed_data = json.load(f)

        print(f"{len(self.processed_data)} doküman yüklendi!")
        return self.processed_data


# Test için main fonksiyonu
if __name__ == "__main__":
    # Veri yükleyiciyi oluştur
    loader = TDKDataLoader()

    # Veri setini yükle
    loader.load_dataset()

    # Veri yapısını incele
    loader.explore_data()

    # Veriyi işle
    loader.process_data()

    # İlk 3 dokümanı göster
    if loader.processed_data:
        print("\n" + "=" * 60)
        print("İLK 3 İŞLENMİŞ DOKÜMAN")
        print("=" * 60)
        for i, doc in enumerate(loader.processed_data[:3], 1):
            print(f"\n{i}. Doküman:")
            print(f"Kelime: {doc['kelime']}")
            print(f"Text:\n{doc['text']}")

    # İşlenmiş veriyi kaydet
    loader.save_processed_data()

    print("\n✨ İşlem tamamlandı!")