Uzun vadeli bilgi birikimini dijital ortama aktarmak için blog gönderilerini toplu olarak indiren ve bu içerikleri wikiye dönüştüren bir yapı hayal edin. Bu süreçte en zahmetli adım, her site için ayrı kod yazmak yerine, çalışma zamanı sırasında otomatik olarak tarayıcı mantığı üretmektir. pluckmd adlı proje tam da bu soruna odaklanıyor ve tek bir veri yapısıyla farklı web sitelerinden içerik çıkarmayı mümkün kılıyor.
Projenin temel fikri, tarayıcı mantığını kod olarak değil, veri olarak tanımlamaktır. Böylece hem geliştirme süreci hızlanıyor hem de farklı kaynaklara uyarlama kolaylaşıyor. Sistem, öncelikle yerel sezgisel yöntemleri kullanır, ardından karmaşık durumlarda büyük dil modelini devreye sokar. Bu yaklaşım, hem performansı artırıyor hem de yanlış çıkarımların sisteme zarar vermesini engelliyor.
Veri olarak tanımlanan adaptör yapısı
pluckmd’nin çekirdeğinde, AdapterSpec adlı basit bir JSON nesnesi bulunuyor. Bu nesne, bir web sitesinden içerik çıkarmak için gerekli tüm talimatları barındırıyor ve siteye özel kod yazma ihtiyacını ortadan kaldırıyor:
interface AdapterSpec {
listing: ListingExtractionSpec; // Makale bağlantılarını bulma yöntemi
article: ArticleExtractionSpec; // Makale içeriğini çıkarma yöntemi
pagination: PaginationSpec; // Sayfalama davranışı (scroll, buton tıklama vb.)
evidence: string; // Doğrulama için kullanılan kanıt
}Bu yapı, hem elle girilebilecek basit bir JSON dosyası hem de büyük dil modeli tarafından üretilen bir çıktı olabiliyor. Aynı zamanda yerel sezgiler, önceden kaydedilmiş cache verileri ya da otomatik olarak oluşturulan önerilerle de doldurulabiliyor. Sistem, tüm bu kaynaklardan gelen verileri aynı şekilde işleyerek tutarlı bir çıkış elde ediyor.
Sezgisel yöntemler ve büyük dil modellerinin rolü
Sistem, öncelikle üç aşamalı bir doğrulama süreci uyguluyor:
- Cache kontrolü: Önceden kaydedilmiş ve doğrulanmış veriler ilk sırada deneniyor. Eğer cache verisi güncelse, doğrudan kullanılıyor.
- Yerel sezgiler: Sayfa yapısını analiz eden algoritmalar devreye giriyor. Örneğin, tüm bağlantılar normalize edilerek ortak desenler bulunuyor:
/blog/ilk-gonderi→/blog/*/blog/ikinci-gonderi→/blog/*/hakkinda→/hakkinda
Bu desenlerden en az üç bağlantı içeren ve sayfa içindeki oranı yüksek olan grup, makale listesi olarak kabul ediliyor. Sistem, bağlantıların derinliği, içerik alanında bulunma durumu ve benzeri faktörlere göre puanlama yapıyor.
- Büyük dil modeli müdahalesi: Eğer yerel sezgiler yeterli sonucu üretemezse, büyük dil modeli devreye giriyor. Model, sayfa yapısını analiz ederek bir
AdapterSpecoluşturuyor. Ancak bu çıktı, doğrudan kullanılmadan önce canlı DOM üzerinde test ediliyor.
Bu katmanlı yaklaşım, hem performansı artırıyor hem de hatalı çıkarımların sisteme zarar vermesini engelliyor. Her seferinde, doğrulanmış veriler cache’e yazılarak sonraki çalışmalarda hızlı bir şekilde kullanılabiliyor.
Canlı DOM doğrulama ve güvenlik
Sistem, herhangi bir veriyi kullanmadan veya cache’e kaydetmeden önce, canlı DOM üzerinde aşağıdaki koşulları doğruluyor:
- Bağlantı seçicisi en az üç bağlantı bulmalı
- Bu bağlantılarının en az yarısı URL desenine uygun olmalı
- İçerik çıkarma için kullanılan yöntem en az 80 karakterlik bir metin üretmeli
Bu doğrulama adımı, hem elle girilen hem de model tarafından üretilen verilerin güvenilirliğini sağlıyor. Eğer bir spek doğrulanamazsa, sistem reddederek kullanılmıyor. Bu sayede, hem yanlış çıkarımların sisteme zarar vermesi engelleniyor hem de kullanıcıların güvenilir olmayan kaynaklardan veri almaması sağlanıyor.
Farklı sayfa kaynaklarına esnek destek
Bir web sitesinden içerik çıkarmak için statik bir HTTP isteği, headless tarayıcıyla render edilmiş bir sayfa ya da kullanıcının kendi tarayıcısında oturum açmış hali oldukça farklı sonuçlar doğurabilir. pluckmd, bu üç farklı kaynağı tek bir arayüz altında topluyor:
- Statik fetch: Basit HTTP istekleriyle içerik çıkarımı
- Headless tarayıcı: JavaScript tarafından render edilen içerikleri alma
- Kullanıcı tarayıcısı: Oturum gerektiren sitelerden veri alma
Buna ek olarak, sistem DomEvaluator adlı bir bileşenle canlı işlemleri de destekliyor. Örneğin, sayfa aşağı kaydırma, "Daha fazla yükle" butonuna tıklama gibi işlemler kolayca gerçekleştirilebiliyor. Bağlantı toplayıcı ve içerik çıkarıcı bileşenleri, hangi kaynaktan geldiklerini bilmiyor. Bu sayede, yeni bir kaynak eklemek için sadece ilgili arayüzün uygulanması yeterli oluyor.
Ajans kurtarma yöntemi: Elle müdahaleye gerek yok
Eğer yerel sezgiler ve büyük dil modeli bile yeterli sonucu üretemezse, sistem otomatik olarak bir yardım talebi oluşturuyor. Bu talep, sayfanın yapısını ve aday seçicileri içeren bir dosya olarak kaydediliyor. Bir kodlama ajansı bu dosyayı okuyarak gerekli AdapterSpec’i oluşturuyor. Kullanıcı, bu speki doğruladıktan ve cache’e kaydettikten sonra, sistem otomatik olarak çalışmaya devam ediyor. Bu sayede, en karmaşık siteler bile otomatik olarak işlenebiliyor.
Gelecekteki olasılıklar ve iyileştirmeler
pluckmd’nin şu anki en büyük belirsizlik noktası, güven eşiğinin nasıl ayarlanacağı. Yerel sezgilerin ne zaman yeterli olduğunu ve büyük dil modelinin ne zaman devreye girmesi gerektiğini belirlemek, sistemin performansını doğrudan etkiliyor. Gelecekte, bu eşiğin otomatik olarak ayarlanması ya da kullanıcıya özel olarak yapılandırılması mümkün olabilir.
Ayrıca, farklı web sitelerinden veri çıkarmak için benzer yaklaşımlar kullanan projelerle karşılaştırma yapmak ve en iyi uygulamaları paylaşmak da geliştirme sürecine katkı sağlayabilir. pluckmd’nin açık kaynaklı doğası, topluluk katkılarına da açık ve gelecekte daha da genişleyebilir.
Bu proje, içerik çıkarmada kod yerine veri odaklı yaklaşımların ne kadar güçlü olabileceğini gösteriyor. Tek bir veri yapısıyla farklı kaynaklardan tutarlı ve güvenilir veri elde etmek, hem geliştiriciler hem de son kullanıcılar için büyük bir avantaj sağlıyor.
Yapay zeka özeti
Tek bir JSON yapısıyla tüm web sitelerinden içerik çıkarmak mümkün. pluckmd’nin nasıl çalıştığını ve kod yerine veri odaklı yaklaşımların avantajlarını keşfedin.