tdk-chatbot / prepare_system.py
esrakoc's picture
Upload 15 files
3d99898
"""
Tüm sistemi hazırlayan ana script.
Bu script:
1. TDK veri setini yükler
2. Veriyi işler
3. Embedding'leri oluşturur
4. Vector store'u hazırlar
"""
import sys
import os
# src klasörünü path'e ekle
sys.path.append(os.path.join(os.path.dirname(__file__), 'src'))
from data_loader import TDKDataLoader
from embeddings import EmbeddingModel
from vector_store import FAISSVectorStore
def main():
"""Ana hazırlık fonksiyonu."""
print("=" * 70)
print("TDK CHATBOT SİSTEM HAZIRLIĞI")
print("=" * 70)
print()
# ============================================
# ADIM 1: VERİ YÜKLEME
# ============================================
print("ADIM 1: Veri Yükleme")
print("-" * 70)
loader = TDKDataLoader(cache_dir="./data")
# Daha önce işlenmiş veri var mı kontrol et
processed_file = "./data/processed_tdk.json"
if os.path.exists(processed_file):
print("Daha önce işlenmiş veri bulundu, yükleniyor...")
documents = loader.load_processed_data()
else:
print("Veri ilk kez yükleniyor...")
loader.load_dataset()
loader.explore_data()
documents = loader.process_data()
loader.save_processed_data()
if not documents:
print("Veri yüklenemedi!")
return
print(f"Toplam {len(documents)} doküman hazır")
print()
# ============================================
# ADIM 2: EMBEDDING OLUŞTURMA
# ============================================
print("ADIM 2: Embedding Oluşturma")
print("-" * 70)
embeddings_file = "./data/embeddings.pkl"
# Daha önce oluşturulmuş embedding var mı kontrol et
if os.path.exists(embeddings_file):
print("Daha önce oluşturulmuş embedding'ler bulundu, yükleniyor...")
embedding_data = EmbeddingModel.load_embeddings(embeddings_file)
embeddings = embedding_data['embeddings']
valid_documents = embedding_data['documents']
else:
print("Embedding'ler oluşturuluyor (bu işlem biraz zaman alabilir)...")
# Embedding modelini yükle
embedder = EmbeddingModel()
# Dokümanları embedding'e çevir
embeddings, valid_documents = embedder.encode_documents(documents)
# Kaydet
embedder.save_embeddings(embeddings, valid_documents, embeddings_file)
print(f"{len(valid_documents)} doküman için embedding hazır")
print(f"Embedding shape: {embeddings.shape}")
print()
# ============================================
# ADIM 3: VECTOR STORE OLUŞTURMA
# ============================================
print("ADIM 3: Vector Store Oluşturma")
print("-" * 70)
vector_store_path = "./data/vector_store"
# Vector store oluştur
store = FAISSVectorStore(embedding_dim=embeddings.shape[1])
store.create_index(embeddings, valid_documents)
# Kaydet
store.save(vector_store_path)
# İstatistikleri göster
store.get_stats()
print()
# ============================================
# ADIM 4: SİSTEM TESTİ
# ============================================
print("ADIM 4: Sistem Testi")
print("-" * 70)
# Embedding modelini test için yükle
embedder = EmbeddingModel()
# Test sorguları
test_queries = [
"kitap ne demek",
"sevgi nedir",
"bilgisayar kelimesinin anlamı"
]
print("Test sorguları ile arama yapılıyor...\n")
for query in test_queries:
print(f"Sorgu: '{query}'")
# Sorguyu embedding'e çevir
query_emb = embedder.encode_single(query)
# Arama yap
results = store.search(query_emb, top_k=2)
# Sonuçları göster
for i, result in enumerate(results, 1):
kelime = result['document'].get('kelime', 'N/A')
anlam = result['document'].get('anlam', 'N/A')
score = result['score']
print(f" {i}. Kelime: {kelime}")
print(f" Anlam: {anlam[:100]}...")
print(f" Benzerlik: {score:.4f}")
print()
# ============================================
# TAMAMLANDI
# ============================================
print("=" * 70)
print("SİSTEM HAZIRLIĞI TAMAMLANDI!")
print("=" * 70)
print()
print("Oluşturulan dosyalar:")
print(f" - {processed_file}")
print(f" - {embeddings_file}")
print(f" - {vector_store_path}.index")
print(f" - {vector_store_path}.pkl")
print()
print("Artık chatbot'u çalıştırmaya hazırsınız!")
print()
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n\nİşlem kullanıcı tarafından durduruldu.")
except Exception as e:
print(f"\n\nHata oluştu: {e}")
import traceback
traceback.print_exc()