Erişim Artırmalı Üretim (RAG) sistemleri, veri alma katmanlarının kalitesi kadar iyidir. Taranmış belgelerle çalışırken, Optik Karakter Tanıma (OCR) ile ham metin çıkarımı genellikle önemli gürültü, biçimlendirme hataları ve yapısal parçalanma getirir. Orta düzeyden ileri düzey geliştiriciler için, yüksek doğruluklu metin çıkarımı sağlayan bir hat oluşturmak, erişim doğruluğunu korumak ve Büyük Dil Modellerinden (LLM'ler) tutarlı yanıtlar üretmek açısından kritik öneme sahiptir.
Mükemmel Olmayan Girdinin Zorluğu
Taranmış belgeler nadiren temiz, dijital ortama hazır metin sağlar. Yaygın sorunlar arasında eğik sayfalar, düşük kontrast, karmaşık düzenler, karışık diller ve hatta el yazısı notları bulunur. Standart OCR motorları bu belirsizliklerle mücadele edebilir ve LLM'nin parçalı veya anlamsız bağlam almasına neden olan "çöp girdi, çöp çıktı" senaryolarına yol açabilir. Bunu azaltmak için, basit görüntüden metne dönüşmenin ötesine geçen çok aşamalı bir ön işleme hizi uygulamamız gerekir.
Ön İşleme ve Gürültü Giderme
OCR çalıştırılmadan önce, görüntülerin özellik algılamasını artırmak için normalize edilmesi gerekir. Bu işlem, gri tonlama dönüşümü, arka plan gürültüsünü kaldırmak için eşikleme ve döndürme hatalarını düzeltmek için eğriyi düzeltmeyi (deskewing) içerir. OpenCV gibi kütüphaneler kullanarak bu adımları otomatikleştirebilir ve OCR motorunun temiz bir girdi almasını sağlayabiliriz.
import cv2
import numpy as np
def preprocess_image(image_path):
# Görüntüyü yükle
img = cv2.imread(image_path)
# Gri tonlamaya dönüştür
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Düzensiz aydınlatmayı ele almak için adaptif eşikleme uygula
thresh = cv2.adaptiveThreshold(
gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2
)
# Morfolojik işlemler kullanarak gürültüyü gider
kernel = np.ones((2,2), np.uint8)
cleaned = cv2.dilate(thresh, kernel, iterations=2)
cleaned = cv2.erode(cleaned, kernel, iterations=1)
return cleaned
El Yazısı ve Çok Dilli Metinlerin Yönetimi
Çok sayıda kurumsal belge, yazdırılmış metinle karışık el yazısı notları veya imzalar içerir. Geleneksel OCR modelleri, çoğunlukla yazdırılmış yazı tiplerine eğitildiğinden, el yazısıyla mücadele eder. Bu durumlarda, yazdırılmış metin tanıma ile özel el yazısı modellerini birleştiren hibrit modeller kullanmayı veya Tesseract veya PaddleOCR gibi açık kaynaklı modelleri alan özgü veri setlerinde ince ayar yapmayı düşünün.
Çok dilli belgeler için dil tanımlama çok önemlidir. langdetect gibi kütüphaneler kullanarak birincil dili tespit edebilir ve OCR motorunun dil yapılandırmasını buna göre değiştirebilirsiniz. Bu, varsayılan yapılandırmalar tarafından sıkça yanlış yorumlanan CJK (Çince, Japonca, Korece) veya Kiril karakterleri gibi Latin olmayan scriptler için doğru karakter eşlemesini sağlar.
Son İşleme ve Doğrulama
OCR sonrası işleme, ham metin çıktısını temizlemeyi içerir. Bu işlem, muhtemelen içerik yerine gürültüyü temsil eden özel karakterleri kaldırma, yaygın OCR yanlış tanımlamalarını düzeltme (örneğin, bağlama göre 'O' yerine '0' koyma) ve metni gömme (embedding) için mantıksal parçalara yeniden yapılandırma işlemlerini içerir. Düzenli ifadeler burada güçlü bir araç olabilir:
import re
def clean_text(raw_text):
# Fazla boşlukları kaldır
cleaned = re.sub(r'\s+', ' ', raw_text)
# Noktalama işaretleri hariç sayısal olmayan karakterleri kaldır
cleaned = re.sub(r'[^\w\s.,!?;:\-()]', '', cleaned)
return cleaned.strip()
Sonuç
RAG için sağlam OCR hatları oluşturmak sadece bir aracı çalıştırmaktan ibaret değildir; görüntü ön işleme, akıllı model seçimi ve titiz son işlemeyi içeren bütünsel bir yaklaşım gerektirir. Gürültüyü, el yazısını ve dil değişkenliğini sistematik olarak ele alarak geliştiriciler, belge tabanlı AI uygulamalarının güvenilirliğini ve faydalılığını önemli ölçüde artırabilir.