Bu özellik, CSV dosyalarından veri okuyarak her satırı tek bir belge (document) olarak ChromaDB'ye ekler. Satırlar kesinlikle parçalanmaz!
from file_processing.csv_reader import CSVReader
# CSV'den tüm satırları oku
documents = CSVReader.extract_rows_from_csv("data.csv")# Sadece belirli sütunları birleştir
documents = CSVReader.extract_rows_from_csv(
"data.csv",
columns_to_combine=["title", "content", "category"]
)# CSV'deki sütun isimlerini listele
columns = CSVReader.get_csv_columns("data.csv")
print(columns) # ['title', 'content', 'category', 'author']# İlk 5 satırı görüntüle
preview = CSVReader.preview_csv("data.csv", n_rows=5)
print(preview)FileProcessor otomatik olarak dosya uzantısını algılar:
from file_processing.file_processor import FileProcessor
processor = FileProcessor(db_manager, model_name, chroma_collection)
# Hem PDF hem CSV işleyebilir
processor.process_files([
"document.pdf",
"data.csv"
])title,content,category,author
Deep Learning Basics,Deep learning uses neural networks...,AI,John Doe
Machine Learning,ML enables computers to learn...,AI,Jane SmithHer satır şu formatta tek bir belgeye dönüştürülür:
title: Deep Learning Basics | content: Deep learning uses neural networks... | category: AI | author: John Doe
documents = CSVReader.extract_rows_from_csv(
"data.csv",
separator=" || " # Varsayılan: " | "
)Çıktı:
title: Deep Learning Basics || content: ... || category: AI || author: John Doe
✅ Satır Bütünlüğü: Her CSV satırı tek bir belge olarak saklanır (parçalanmaz) ✅ Esnek Sütun Seçimi: İstediğiniz sütunları seçip birleştirebilirsiniz ✅ Otomatik Temizleme: Boş satırlar ve NaN değerler otomatik filtrelenir ✅ Metadata Desteği: Her belgeye kaynak dosya, tip ve chunk_index eklenir ✅ Önizleme: İşlemeden önce veriyi görebilirsiniz ✅ Encoding Desteği: UTF-8 encoding ile Türkçe karakter desteği
products.csv:
product_name,description,price,category
iPhone 15,Latest Apple smartphone with A17 chip,999,Electronics
MacBook Pro,Professional laptop with M3 chip,2499,Electronicsfrom vector_store.manager import ChromaDBManager
from file_processing.file_processor import FileProcessor
# ChromaDB setup
db_manager = ChromaDBManager("./ChromaDBData")
client, collection = db_manager.create.create_client_and_collection(
"Products",
"distiluse-base-multilingual-cased-v1"
)
db_manager.initialize_add(client)
# CSV'yi yükle
processor = FileProcessor(db_manager, "distiluse-base-multilingual-cased-v1", collection)
processor.process_files(["products.csv"])from query_docs.retrieve_docs import ChromaDBRetriever
retriever = ChromaDBRetriever(collection)
results = retriever.retrieve_docs("laptop with M3 chip", n_results=3)- Hız: Her satır doğrudan eklenir (tokenization yok)
- Bellek: Büyük CSV'ler için pandas chunk reading kullanabilirsiniz
- Ölçeklenebilirlik: 1M+ satırlı CSV'ler desteklenir
- Satır = Belge: Her CSV satırı bir belgedir ve parçalanmaz
- Token Limiti Yok: PDF'deki gibi token bazlı bölme yapılmaz
- Sütun Sırası: Sütunlar CSV'deki sırayla birleştirilir
- Boş Değerler: NaN ve boş sütunlar otomatik atlanır
- Encoding: UTF-8 varsayılan olarak kullanılır
# Hata: ValueError: Şu sütunlar CSV'de bulunamadı: ['xyz']
# Çözüm: Önce sütunları kontrol edin
columns = CSVReader.get_csv_columns("data.csv")
print(f"Mevcut sütunlar: {columns}")# Eğer UTF-8 dışında encoding kullanıyorsanız
# csv_reader.py içinde encoding parametresini değiştirin
df = pd.read_csv(csv_path, encoding='latin-1') # veya 'iso-8859-9'| Özellik | CSV | |
|---|---|---|
| Bölme | Token-based chunks | Satır başına 1 belge |
| Parçalama | Evet (128 token) | Hayır |
| Metadata | "PDF Document" | "CSV Data" |
| İşlem | Multi-step (char→token) | Single-step (row→doc) |
| Kullanım | Uzun metinler | Yapılandırılmış veri |
class CustomCSVProcessor:
def process_with_custom_logic(self, csv_path):
df = pd.read_csv(csv_path)
# Özel işlemler
df['combined'] = df['title'] + ": " + df['content']
# Her satır için
documents = []
for _, row in df.iterrows():
doc = f"Title: {row['title']}\nContent: {row['content']}"
documents.append(doc)
return documentsimport glob
# Tüm CSV dosyalarını işle
csv_files = glob.glob("data/*.csv")
processor.process_files(csv_files)- Büyük CSV'ler: Chunk processing kullanın
- Veri Kalitesi: CSV'yi işlemeden önce temizleyin
- Sütun Seçimi: Sadece gerekli sütunları seçin (daha hızlı)
- Önizleme: Her zaman önce preview_csv() kullanın
- Metadata: Filtreleme için type="CSV Data" kullanın
- FAQ Sistemi: Soru-cevap CSV'sinden chatbot
- Ürün Kataloğu: E-ticaret ürün arama
- Bilgi Bankası: Dokümantasyon ve kılavuzlar
- Akademik Veri: Paper abstracts ve metadata