Doküman İşleme Akışı
Septum, yüklenen bir dosyayı aranabilir ve anonimleştirilmiş içeriğe dönüştürür. Tüm adımlar yerelde çalışır — ham PII makineden çıkmaz.
Adımlar
Yükleme — Dosya API'ye ulaştığında tipi uzantıdan değil, içerik baytlarından okunur (
python-magic). Uzantısı.pdfolan ama aslında PNG olan bir dosya doğrudan OCR hattına düşer.Formata göre ingester — PDF'ler
pypdfile sayfa sayfa okunur; DOCX ve XLSX içinpython-docxveopenpyxldevreye girer; görseller ve taranmış PDF'ler PaddleOCR'dan, ses dosyaları OpenAI Whisper'dan geçer.Dil tespiti — Çıkarılan metin 20+ dil arasında sınıflandırılır. Sonraki adımda kullanılacak NER modeli ve validator kuralları bu dile göre seçilir.
Üç katmanlı PII tespiti — Üç detektör sırayla çalışır ve çıktıları birleştirilir:
- Presidio — regex desenleri ve algoritmik validator'lar (TCKN checksum, Aadhaar Verhoeff, NRIC/FIN, CPF, NINO, CNPJ, My Number ve diğerleri).
- NER —
PERSON_NAME,LOCATION,ORGANIZATION_NAMEiçin XLM-RoBERTa transformer. - Ollama — desenlerin yakalayamadığı, bağlama bağlı PII için opsiyonel semantik katman. Varsayılan olarak kapalıdır; açmak için
SEPTUM_USE_OLLAMA=true.
Üç detektörün bulduğu çakışan span'ler birleştirilir; coreference çözümlenerek "Ahmet" ile "Bay Yılmaz" aynı placeholder numarasına bağlanır.
Maskeleme ve anonimleştirme haritası — Tespit edilen her varlık, tipe göre numaralanmış tutarlı bir placeholder ile değiştirilir (
[PERSON_1],[EMAIL_ADDRESS_3]).original → placeholderharitası her doküman için ayrı tutulur, diskte şifreli saklanır ve air-gapped bölgeden asla dışarı çıkmaz.Paralel işleme — Maskeli metin üretildikten sonra iki akış eşzamanlı koşar:
- Chunking → Embedding → FAISS + BM25 — Maskeli metin, paragraf sınırlarına sadık kalarak ve aralarında örtüşme bırakılarak chunk'lara bölünür. Her chunk sentence-transformers ile embed edilir; sonuçlar hem FAISS vektör indeksine hem BM25 keyword indeksine yazılır.
- Şifreli saklama — Orijinal dosya AES-256-GCM ile mühürlenerek diske yazılır; air-gapped bölge dışında asla deşifre edilmez.
Arama hazır — FAISS, BM25 ve şifreli dosya yazımı tamamlandığında doküman
ingestion_status="completed"olarak işaretlenir ve sohbet üzerinden sorgulanabilir hale gelir.